[cig-commits] r12404 - in cs/spatialdata-0.1/trunk: modulesrc/spatialdb templates/spatialdb

leif at geodynamics.org leif at geodynamics.org
Wed Jul 9 15:36:02 PDT 2008


Author: leif
Date: 2008-07-09 15:36:02 -0700 (Wed, 09 Jul 2008)
New Revision: 12404

Added:
   cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pxd.src
Modified:
   cs/spatialdata-0.1/trunk/modulesrc/spatialdb/Makefile.am
   cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe.src
   cs/spatialdata-0.1/trunk/templates/spatialdb/Makefile.am
   cs/spatialdata-0.1/trunk/templates/spatialdb/configure.ac
   cs/spatialdata-0.1/trunk/templates/spatialdb/spatialdb.pyxe.src
Log:
Use 'cimport' when extending spatialdata.


Modified: cs/spatialdata-0.1/trunk/modulesrc/spatialdb/Makefile.am
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/spatialdb/Makefile.am	2008-07-09 19:06:08 UTC (rev 12403)
+++ cs/spatialdata-0.1/trunk/modulesrc/spatialdb/Makefile.am	2008-07-09 22:36:02 UTC (rev 12404)
@@ -20,8 +20,8 @@
 
 dist_spatialdbmodule_la_SOURCES = spatialdb.pyxe.src
 nodist_spatialdbmodule_la_SOURCES = \
-	spatialdb.pyxe \
-	spatialdb.c spatialdb_embed.cpp spatialdb_embed.h
+	spatialdata.spatialdb.spatialdb.pyxe \
+	spatialdata.spatialdb.spatialdb.c spatialdata.spatialdb.spatialdb_embed.cpp spatialdata.spatialdb.spatialdb_embed.h
 
 spatialdbmodule_la_LIBADD = \
 	$(top_builddir)/libsrc/libspatialdata.la
@@ -32,16 +32,21 @@
 
 INCLUDES += -I$(PYTHON_INCDIR)
 
-spatialdb.pyx spatialdb_embed.cpp  spatialdb_embed.h: spatialdb.pyxe
-	pyrexembed spatialdb.pyxe
-spatialdb.pyxe: $(srcdir)/spatialdb.pyxe.src
+include_HEADERS = \
+	spatialdata.spatialdb.spatialdb.pxd
+
+spatialdata.spatialdb.spatialdb.pyx spatialdata.spatialdb.spatialdb_embed.cpp spatialdata.spatialdb.spatialdb_embed.h: spatialdata.spatialdb.spatialdb.pyxe spatialdata.spatialdb.spatialdb.pxd
+	pyrexembed spatialdata.spatialdb.spatialdb.pyxe
+spatialdata.spatialdb.spatialdb.pyxe: $(srcdir)/spatialdb.pyxe.src
 	cp $(srcdir)/spatialdb.pyxe.src $@
-spatialdb_embed.cpp: spatialdb_embed.h
-spatialdb_embed.h: spatialdb.pyx
+spatialdata.spatialdb.spatialdb.pxd: $(srcdir)/spatialdb.pxd.src
+	cp $(srcdir)/spatialdb.pxd.src $@
+spatialdata.spatialdb.spatialdb_embed.cpp: spatialdata.spatialdb.spatialdb_embed.h
+spatialdata.spatialdb.spatialdb_embed.h: spatialdata.spatialdb.spatialdb.pyx
 
 .pyx.c:
 	pyrexc $<
 
-CLEANFILES = spatialdb.pyx spatialdb.pyxe spatialdb.c *_embed.*
+CLEANFILES = spatialdata.spatialdb.spatialdb.pyx spatialdata.spatialdb.spatialdb.pyxe spatialdata.spatialdb.spatialdb.c *_embed.*
 
 # End of file 

Added: cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pxd.src
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pxd.src	                        (rev 0)
+++ cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pxd.src	2008-07-09 22:36:02 UTC (rev 12404)
@@ -0,0 +1,7 @@
+
+cdef class SpatialDB:
+
+  cdef void* thisptr # Pointer to C++ object
+  cdef readonly object handle # PyCObject holding pointer to C++ object
+  cdef readonly object name # Identifier for type of object
+

Modified: cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe.src
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe.src	2008-07-09 19:06:08 UTC (rev 12403)
+++ cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe.src	2008-07-09 22:36:02 UTC (rev 12404)
@@ -97,10 +97,6 @@
 
 cdef class SpatialDB:
 
-  cdef void* thisptr # Pointer to C++ object
-  cdef readonly object handle # PyCObject holding pointer to C++ object
-  cdef readonly object name # Identifier for type of object
-
   def __init__(self):
     """
     Constructor.

Modified: cs/spatialdata-0.1/trunk/templates/spatialdb/Makefile.am
===================================================================
--- cs/spatialdata-0.1/trunk/templates/spatialdb/Makefile.am	2008-07-09 19:06:08 UTC (rev 12403)
+++ cs/spatialdata-0.1/trunk/templates/spatialdb/Makefile.am	2008-07-09 22:36:02 UTC (rev 12404)
@@ -36,8 +36,8 @@
 
 dist_spatialdbmodule_la_SOURCES = spatialdb.pyxe.src
 nodist_spatialdbmodule_la_SOURCES = \
-	spatialdb.pyxe \
-	spatialdb.c spatialdb_embed.cpp spatialdb_embed.h
+	yourname.spatialdb.pyxe \
+	yourname.spatialdb.c yourname.spatialdb_embed.cpp yourname.spatialdb_embed.h
 
 spatialdbmodule_la_LIBADD = libyournamespatialdb.la
 if NO_UNDEFINED
@@ -47,17 +47,17 @@
 
 INCLUDES += -I$(PYTHON_INCDIR)
 
-spatialdb.pyx spatialdb_embed.cpp  spatialdb_embed.h: spatialdb.pyxe
-	pyrexembed spatialdb.pyxe
-spatialdb.pyxe: $(srcdir)/spatialdb.pyxe.src
+yourname.spatialdb.pyx yourname.spatialdb_embed.cpp yourname.spatialdb_embed.h: yourname.spatialdb.pyxe
+	pyrexembed yourname.spatialdb.pyxe
+yourname.spatialdb.pyxe: $(srcdir)/spatialdb.pyxe.src
 	cp $(srcdir)/spatialdb.pyxe.src $@
-spatialdb_embed.cpp: spatialdb_embed.h
-spatialdb_embed.h: spatialdb.pyx
+yourname.spatialdb_embed.cpp: yourname.spatialdb_embed.h
+yourname.spatialdb_embed.h: yourname.spatialdb.pyx
 
 .pyx.c:
-	pyrexc $<
+	pyrexc $(PYXFLAGS) $<
 
-CLEANFILES = spatialdb.pyx spatialdb.pyxe spatialdb.c *_embed.*
+CLEANFILES = yourname.spatialdb.pyx yourname.spatialdb.pyxe yourname.spatialdb.c *_embed.*
 
 
 

Modified: cs/spatialdata-0.1/trunk/templates/spatialdb/configure.ac
===================================================================
--- cs/spatialdata-0.1/trunk/templates/spatialdb/configure.ac	2008-07-09 19:06:08 UTC (rev 12403)
+++ cs/spatialdata-0.1/trunk/templates/spatialdb/configure.ac	2008-07-09 22:36:02 UTC (rev 12404)
@@ -61,6 +61,7 @@
 if test "$have_pyrexembed" = "no"; then
   AC_MSG_ERROR([Pyrexembed not found in current path.])
 fi
+AC_ARG_VAR(PYXFLAGS, [Pyrex flags])
 
 # CPPUNIT
 if test "$enable_testing" = "yes" ; then

Modified: cs/spatialdata-0.1/trunk/templates/spatialdb/spatialdb.pyxe.src
===================================================================
--- cs/spatialdata-0.1/trunk/templates/spatialdb/spatialdb.pyxe.src	2008-07-09 19:06:08 UTC (rev 12403)
+++ cs/spatialdata-0.1/trunk/templates/spatialdb/spatialdb.pyxe.src	2008-07-09 22:36:02 UTC (rev 12404)
@@ -21,289 +21,11 @@
 #}header
 
 # ----------------------------------------------------------------------
-cdef extern from "Python.h":
-  object PyCObject_FromVoidPtr(void*, void (*destruct)(void*))
-  void* PyCObject_AsVoidPtr(object)
 
 
-cdef extern from "stdlib.h":
-  ctypedef unsigned long size_t
-  void* malloc(size_t size)
-  void free(void* mem)
-  void strcpy(char*, char*)
+from spatialdata.spatialdb.spatialdb cimport SpatialDB
 
 
-cdef void* ptrFromHandle(obj):
-  """
-  Extract pointer from PyCObject.
-  """
-  return PyCObject_AsVoidPtr(obj.handle)
-
-cdef double* doubleArray(size):
-  """
-  Allocate C++ double array.
-  """
-  # create shim
-  #embed{ double* doubleArray_cpp(int size)
-  double* result = (size > 0) ? new double[size] : 0;
-  return result;
-  #}embed
-  return doubleArray_cpp(size)
-
-
-cdef float* floatArray(size):
-  """
-  Allocate C++ float array.
-  """
-  # create shim
-  #embed{ float* floatArray_cpp(int size)
-  float* result = (size > 0) ? new float[size] : 0;
-  return result;
-  #}embed
-  return floatArray_cpp(size)
-
-
-cdef int* intArray(size):
-  """
-  Allocate C++ int array.
-  """
-  # create shim
-  #embed{ int* intArray_cpp(int size)
-  int* result = (size > 0) ? new int[size] : 0;
-  return result;
-  #}embed
-  return intArray_cpp(size)
-
-
-# ----------------------------------------------------------------------
-cdef void SpatialDB_destructor(void* obj):
-  """
-  Destroy SpatialDB object.
-  """
-  # create shim for destructor
-  #embed{ void SpatialDB_destructor_cpp(void* pObj)
-  spatialdata::spatialdb::SpatialDB* pDB =
-    (spatialdata::spatialdb::SpatialDB*) pObj;
-  delete pDB;
-  #}embed
-  SpatialDB_destructor_cpp(obj)
-  return
-
-cdef class SpatialDB:
-
-  cdef void* thisptr # Pointer to C++ object
-  cdef readonly object handle # PyCObject holding pointer to C++ object
-  cdef readonly object name # Identifier for type of object
-
-  def __init__(self):
-    """
-    Constructor.
-    """
-    self.handle = None
-    self.thisptr = NULL
-    self.name = "spatialdata_spatialdb_SpatialDB"
-    return
-
-
-  property label:
-    def __set__(self, name):
-      """
-      Set label of spatial database.
-      """
-      # create shim for method 'label'
-      #embed{ void SpatialDB_label_set(void* pObj, char* name)
-      try {
-        ((spatialdata::spatialdb::SpatialDB*) pObj)->label(name);
-      } catch (const std::exception& err) {
-        PyErr_SetString(PyExc_RuntimeError,
-                        const_cast<char*>(err.what()));
-      } catch (...) {
-        PyErr_SetString(PyExc_RuntimeError,
-                        "Caught unknown C++ exception.");
-      } // try/catch
-      #}embed
-
-      SpatialDB_label_set(self.thisptr, name)
-
-    def __get__(self):
-      """
-      Get label of spatial database.
-      """
-      # create shim for method 'label'
-      #embed{ char* SpatialDB_label_get(void* pObj)
-      char* label = 0;
-      try {
-        label = (char*) ((spatialdata::spatialdb::SpatialDB*) pObj)->label();
-      } catch (const std::exception& err) {
-        PyErr_SetString(PyExc_RuntimeError,
-                        const_cast<char*>(err.what()));
-      } catch (...) {
-        PyErr_SetString(PyExc_RuntimeError,
-                        "Caught unknown C++ exception.");
-      } // try/catch
-      return label;
-      #}embed
-
-      return SpatialDB_label_get(self.thisptr)
-
-      
-  def open(self):
-    """
-    Open database and prepare for querying.
-    """
-    # create shim for method 'open'
-    #embed{ void SpatialDB_open(void* pObj)
-    try {
-      ((spatialdata::spatialdb::SpatialDB*) pObj)->open();
-    } catch (const std::exception& err) {
-      PyErr_SetString(PyExc_RuntimeError,
-                      const_cast<char*>(err.what()));
-    } catch (...) {
-      PyErr_SetString(PyExc_RuntimeError,
-                      "Caught unknown C++ exception.");
-    } // try/catch
-    #}embed
-
-    SpatialDB_open(self.thisptr)
-    return
-
-
-  def close(self):
-    """
-    Close the database.
-    """
-    # create shim for method 'close'
-    #embed{ void SpatialDB_close(void* pObj)
-    try {
-      ((spatialdata::spatialdb::SpatialDB*) pObj)->close();
-    } catch (const std::exception& err) {
-      PyErr_SetString(PyExc_RuntimeError,
-                      const_cast<char*>(err.what()));
-    } catch (...) {
-      PyErr_SetString(PyExc_RuntimeError,
-                      "Caught unknown C++ exception.");
-    } // try/catch
-    #}embed
-
-    SpatialDB_close(self.thisptr)
-    return
-
-
-  def queryVals(self, names):
-    """
-    Set values to be returned by queries.
-    """
-    # create shim for method 'queryVals'
-    #embed{ void SpatialDB_queryVals(void* pObj, char** names, int numVals)
-    try {
-      ((spatialdata::spatialdb::SpatialDB*) pObj)->queryVals((const char**) names, numVals);
-    } catch (const std::exception& err) {
-      PyErr_SetString(PyExc_RuntimeError,
-                      const_cast<char*>(err.what()));
-    } catch (...) {
-      PyErr_SetString(PyExc_RuntimeError,
-                      "Caught unknown C++ exception.");
-    } // try/catch
-    #}embed
-
-    cdef char** pNames
-    pNames = NULL
-    numVals = len(names)
-    if numVals > 0:
-      pNames = <char**> malloc(numVals*sizeof(char*))
-    for i from 0 <= i < numVals:
-      strsize = len(names[i])
-      pNames[i] = <char*> malloc(1+strsize*sizeof(char))
-      tmp = names[i]
-      strcpy(pNames[i], tmp)
-
-    SpatialDB_queryVals(self.thisptr, pNames, numVals)
-
-    # memory cleanup
-    for i from 0 <= i < numVals:
-      free(<void*> pNames[i])
-    free(<void*> pNames)
-    
-    return
-
-
-  def query(self, locs, cs, nvals):
-    """
-    Query db to get values at locations.
-    """
-    # create shim for method 'query'
-    #embed{ int SpatialDB_query(void* pObj, double* vals, int nvals, double* coords, int spaceDim, void* csObj)
-    int err = 0;
-    try {
-      spatialdata::geocoords::CoordSys* pCS =
-        (spatialdata::geocoords::CoordSys*) csObj;
-        err = ((spatialdata::spatialdb::SpatialDB*) pObj)->query(vals, nvals,
-                                                            coords, spaceDim,
-                                                            pCS);
-    } catch (const std::exception& err) {
-      PyErr_SetString(PyExc_RuntimeError,
-                      const_cast<char*>(err.what()));
-    } catch (...) {
-      PyErr_SetString(PyExc_RuntimeError,
-                      "Caught unknown C++ exception.");
-    } // try/catch
-    return err;
-    #}embed
-
-    import spatialdata.utils.simplearray
-    locs = spatialdata.utils.simplearray.objAsSimpleArray(locs)
-    if not locs.isCompatible(nd=2,
-                             simpletype="double",
-                             contiguous=True,
-                             notswapped=True):
-      raise TypeError, \
-            "Argument 'locs' must be a contiguous, 2-D array of type double."
-
-    if not cs.name == "spatialdata_geocoords_CoordSys":
-      raise TypeError, \
-            "Argument 'cs' must be extension module type 'CoordSys'."
-    if nvals < 1:
-      raise TypeError, \
-              "Argument 'nvals' must be a positive integer."
-
-    (nlocs, spaceDim) = locs.shape
-    
-    cdef double* pLocs
-    pLocs = <double*> PyCObject_AsVoidPtr(locs.data)
-
-    cdef double* pVals
-    pVals = doubleArray(nlocs*nvals)
-
-    cdef int* pErr
-    pErr = <int*> intArray(nlocs)
-
-    cdef double* valbuffer
-    valbuffer = <double*> malloc(nvals*sizeof(double))
-
-    for iloc from 0 <= iloc < nlocs:
-      pErr[iloc] = SpatialDB_query(self.thisptr, valbuffer, nvals,
-                                  &pLocs[spaceDim*iloc], spaceDim,
-                                  ptrFromHandle(cs))
-      for ival from 0 <= ival < nvals:
-        pVals[nvals*iloc+ival] = valbuffer[ival]
-    free(<void*> valbuffer)
-
-    dims = [nlocs, nvals]
-    import spatialdata.utils.simplearray
-    pValsObj = PyCObject_FromVoidPtr(pVals, NULL);
-    pErrObj = PyCObject_FromVoidPtr(pErr, NULL);
-    return (spatialdata.utils.simplearray.SimpleCppArray(pValsObj, dims, "double"),
-            spatialdata.utils.simplearray.SimpleCppArray(pErrObj, [nlocs], "int"))
-
-
-  def _createHandle(self):
-    """
-    Wrap pointer to C++ object in PyCObject.
-    """
-    return PyCObject_FromVoidPtr(self.thisptr, SpatialDB_destructor)
-
-
-# ----------------------------------------------------------------------
 cdef class GeoGridVelModel(SpatialDB):
 
   def __init__(self):



More information about the cig-commits mailing list