Simplified contrib.gis.geos.prototypes by replacing c_char with c_byte.

This commit is contained in:
Sergey Fedoseev 2017-08-29 23:50:24 +05:00 committed by Tim Graham
parent afc06b5625
commit 44ce308281
4 changed files with 13 additions and 18 deletions

View File

@ -43,10 +43,9 @@ def check_minus_one(result, func, cargs):
def check_predicate(result, func, cargs): def check_predicate(result, func, cargs):
"Error checking for unary/binary predicate functions." "Error checking for unary/binary predicate functions."
val = ord(result) # getting the ordinal from the character if result == 1:
if val == 1:
return True return True
elif val == 0: elif result == 0:
return False return False
else: else:
raise GEOSException('Error encountered on GEOS C predicate function "%s".' % func.__name__) raise GEOSException('Error encountered on GEOS C predicate function "%s".' % func.__name__)

View File

@ -1,5 +1,5 @@
import threading import threading
from ctypes import POINTER, Structure, byref, c_char, c_char_p, c_int, c_size_t from ctypes import POINTER, Structure, byref, c_byte, c_char_p, c_int, c_size_t
from django.contrib.gis.geos.base import GEOSBase from django.contrib.gis.geos.base import GEOSBase
from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory
@ -54,7 +54,7 @@ wkt_writer_set_outdim = GEOSFuncFactory(
'GEOSWKTWriter_setOutputDimension', argtypes=[WKT_WRITE_PTR, c_int] 'GEOSWKTWriter_setOutputDimension', argtypes=[WKT_WRITE_PTR, c_int]
) )
wkt_writer_set_trim = GEOSFuncFactory('GEOSWKTWriter_setTrim', argtypes=[WKT_WRITE_PTR, c_char]) wkt_writer_set_trim = GEOSFuncFactory('GEOSWKTWriter_setTrim', argtypes=[WKT_WRITE_PTR, c_byte])
wkt_writer_set_precision = GEOSFuncFactory('GEOSWKTWriter_setRoundingPrecision', argtypes=[WKT_WRITE_PTR, c_int]) wkt_writer_set_precision = GEOSFuncFactory('GEOSWKTWriter_setRoundingPrecision', argtypes=[WKT_WRITE_PTR, c_int])
# WKBReader routines # WKBReader routines
@ -106,8 +106,8 @@ wkb_writer_get_byteorder = WKBWriterGet('GEOSWKBWriter_getByteOrder')
wkb_writer_set_byteorder = WKBWriterSet('GEOSWKBWriter_setByteOrder') wkb_writer_set_byteorder = WKBWriterSet('GEOSWKBWriter_setByteOrder')
wkb_writer_get_outdim = WKBWriterGet('GEOSWKBWriter_getOutputDimension') wkb_writer_get_outdim = WKBWriterGet('GEOSWKBWriter_getOutputDimension')
wkb_writer_set_outdim = WKBWriterSet('GEOSWKBWriter_setOutputDimension') wkb_writer_set_outdim = WKBWriterSet('GEOSWKBWriter_setOutputDimension')
wkb_writer_get_include_srid = WKBWriterGet('GEOSWKBWriter_getIncludeSRID', restype=c_char) wkb_writer_get_include_srid = WKBWriterGet('GEOSWKBWriter_getIncludeSRID', restype=c_byte)
wkb_writer_set_include_srid = WKBWriterSet('GEOSWKBWriter_setIncludeSRID', argtypes=[WKB_WRITE_PTR, c_char]) wkb_writer_set_include_srid = WKBWriterSet('GEOSWKBWriter_setIncludeSRID', argtypes=[WKB_WRITE_PTR, c_byte])
# ### Base I/O Class ### # ### Base I/O Class ###
@ -194,7 +194,7 @@ class WKTWriter(IOBase):
def trim(self, flag): def trim(self, flag):
if bool(flag) != self._trim: if bool(flag) != self._trim:
self._trim = bool(flag) self._trim = bool(flag)
wkt_writer_set_trim(self.ptr, b'\x01' if flag else b'\x00') wkt_writer_set_trim(self.ptr, self._trim)
@property @property
def precision(self): def precision(self):
@ -277,15 +277,11 @@ class WKBWriter(IOBase):
# Property for getting/setting the include srid flag. # Property for getting/setting the include srid flag.
@property @property
def srid(self): def srid(self):
return bool(ord(wkb_writer_get_include_srid(self.ptr))) return bool(wkb_writer_get_include_srid(self.ptr))
@srid.setter @srid.setter
def srid(self, include): def srid(self, include):
if include: wkb_writer_set_include_srid(self.ptr, bool(include))
flag = b'\x01'
else:
flag = b'\x00'
wkb_writer_set_include_srid(self.ptr, flag)
# `ThreadLocalIO` object holds instances of the WKT and WKB reader/writer # `ThreadLocalIO` object holds instances of the WKT and WKB reader/writer

View File

@ -2,7 +2,7 @@
This module houses the GEOS ctypes prototype functions for the This module houses the GEOS ctypes prototype functions for the
unary and binary predicate operations on geometries. unary and binary predicate operations on geometries.
""" """
from ctypes import c_char, c_char_p, c_double from ctypes import c_byte, c_char_p, c_double
from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory
from django.contrib.gis.geos.prototypes.errcheck import check_predicate from django.contrib.gis.geos.prototypes.errcheck import check_predicate
@ -12,7 +12,7 @@ from django.contrib.gis.geos.prototypes.errcheck import check_predicate
class UnaryPredicate(GEOSFuncFactory): class UnaryPredicate(GEOSFuncFactory):
"For GEOS unary predicate functions." "For GEOS unary predicate functions."
argtypes = [GEOM_PTR] argtypes = [GEOM_PTR]
restype = c_char restype = c_byte
errcheck = staticmethod(check_predicate) errcheck = staticmethod(check_predicate)

View File

@ -1,4 +1,4 @@
from ctypes import c_char from ctypes import c_byte
from django.contrib.gis.geos.libgeos import ( from django.contrib.gis.geos.libgeos import (
GEOM_PTR, PREPGEOM_PTR, GEOSFuncFactory, GEOM_PTR, PREPGEOM_PTR, GEOSFuncFactory,
@ -13,7 +13,7 @@ prepared_destroy = GEOSFuncFactory('GEOSPreparedGeom_destroy', argtypes=[PREPGEO
# Prepared geometry binary predicate support. # Prepared geometry binary predicate support.
class PreparedPredicate(GEOSFuncFactory): class PreparedPredicate(GEOSFuncFactory):
argtypes = [PREPGEOM_PTR, GEOM_PTR] argtypes = [PREPGEOM_PTR, GEOM_PTR]
restype = c_char restype = c_byte
errcheck = staticmethod(check_predicate) errcheck = staticmethod(check_predicate)