summaryrefslogtreecommitdiffstats
path: root/webapp/django/contrib/gis/gdal/prototypes/generation.py
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/django/contrib/gis/gdal/prototypes/generation.py')
-rw-r--r--webapp/django/contrib/gis/gdal/prototypes/generation.py116
1 files changed, 116 insertions, 0 deletions
diff --git a/webapp/django/contrib/gis/gdal/prototypes/generation.py b/webapp/django/contrib/gis/gdal/prototypes/generation.py
new file mode 100644
index 0000000000..bba715d67c
--- /dev/null
+++ b/webapp/django/contrib/gis/gdal/prototypes/generation.py
@@ -0,0 +1,116 @@
+"""
+ This module contains functions that generate ctypes prototypes for the
+ GDAL routines.
+"""
+
+from ctypes import c_char_p, c_double, c_int, c_void_p
+from django.contrib.gis.gdal.prototypes.errcheck import \
+ check_arg_errcode, check_errcode, check_geom, check_geom_offset, \
+ check_pointer, check_srs, check_str_arg, check_string, check_const_string
+
+def double_output(func, argtypes, errcheck=False, strarg=False):
+ "Generates a ctypes function that returns a double value."
+ func.argtypes = argtypes
+ func.restype = c_double
+ if errcheck: func.errcheck = check_arg_errcode
+ if strarg: func.errcheck = check_str_arg
+ return func
+
+def geom_output(func, argtypes, offset=None):
+ """
+ Generates a function that returns a Geometry either by reference
+ or directly (if the return_geom keyword is set to True).
+ """
+ # Setting the argument types
+ func.argtypes = argtypes
+
+ if not offset:
+ # When a geometry pointer is directly returned.
+ func.restype = c_void_p
+ func.errcheck = check_geom
+ else:
+ # Error code returned, geometry is returned by-reference.
+ func.restype = c_int
+ def geomerrcheck(result, func, cargs):
+ return check_geom_offset(result, func, cargs, offset)
+ func.errcheck = geomerrcheck
+
+ return func
+
+def int_output(func, argtypes):
+ "Generates a ctypes function that returns an integer value."
+ func.argtypes = argtypes
+ func.restype = c_int
+ return func
+
+def srs_output(func, argtypes):
+ """
+ Generates a ctypes prototype for the given function with
+ the given C arguments that returns a pointer to an OGR
+ Spatial Reference System.
+ """
+ func.argtypes = argtypes
+ func.restype = c_void_p
+ func.errcheck = check_srs
+ return func
+
+def const_string_output(func, argtypes, offset=None):
+ func.argtypes = argtypes
+ if offset:
+ func.restype = c_int
+ else:
+ func.restype = c_char_p
+
+ def _check_const(result, func, cargs):
+ return check_const_string(result, func, cargs, offset=offset)
+ func.errcheck = _check_const
+
+ return func
+
+def string_output(func, argtypes, offset=-1, str_result=False):
+ """
+ Generates a ctypes prototype for the given function with the
+ given argument types that returns a string from a GDAL pointer.
+ The `const` flag indicates whether the allocated pointer should
+ be freed via the GDAL library routine VSIFree -- but only applies
+ only when `str_result` is True.
+ """
+ func.argtypes = argtypes
+ if str_result:
+ # String is the result, don't explicitly define
+ # the argument type so we can get the pointer.
+ pass
+ else:
+ # Error code is returned
+ func.restype = c_int
+
+ # Dynamically defining our error-checking function with the
+ # given offset.
+ def _check_str(result, func, cargs):
+ return check_string(result, func, cargs,
+ offset=offset, str_result=str_result)
+ func.errcheck = _check_str
+ return func
+
+def void_output(func, argtypes, errcheck=True):
+ """
+ For functions that don't only return an error code that needs to
+ be examined.
+ """
+ if argtypes: func.argtypes = argtypes
+ if errcheck:
+ # `errcheck` keyword may be set to False for routines that
+ # return void, rather than a status code.
+ func.restype = c_int
+ func.errcheck = check_errcode
+ else:
+ func.restype = None
+
+ return func
+
+def voidptr_output(func, argtypes):
+ "For functions that return c_void_p."
+ func.argtypes = argtypes
+ func.restype = c_void_p
+ func.errcheck = check_pointer
+ return func