[cig-commits] r5949 - in cs/spatialdata-0.1/trunk/modulesrc:
geocoords spatialdb spatialdb/generator utils
brad at geodynamics.org
brad at geodynamics.org
Thu Feb 1 13:25:44 PST 2007
Author: brad
Date: 2007-02-01 13:25:44 -0800 (Thu, 01 Feb 2007)
New Revision: 5949
Added:
cs/spatialdata-0.1/trunk/modulesrc/geocoords/geocoords.pyxe.src
cs/spatialdata-0.1/trunk/modulesrc/spatialdb/generator/generator.pyxe.src
cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe.src
cs/spatialdata-0.1/trunk/modulesrc/utils/simplearray.pyxe.src
cs/spatialdata-0.1/trunk/modulesrc/utils/utils.pyxe.src
Removed:
cs/spatialdata-0.1/trunk/modulesrc/geocoords/geocoords.pyxe
cs/spatialdata-0.1/trunk/modulesrc/spatialdb/generator/generator.pyxe
cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe
cs/spatialdata-0.1/trunk/modulesrc/utils/simplearray.pyxe
cs/spatialdata-0.1/trunk/modulesrc/utils/utils.pyxe
Modified:
cs/spatialdata-0.1/trunk/modulesrc/geocoords/Makefile.am
cs/spatialdata-0.1/trunk/modulesrc/spatialdb/Makefile.am
cs/spatialdata-0.1/trunk/modulesrc/spatialdb/generator/Makefile.am
cs/spatialdata-0.1/trunk/modulesrc/utils/Makefile.am
Log:
Fixed pyrexembed build rules to allow builds from outside the source tree.
Modified: cs/spatialdata-0.1/trunk/modulesrc/geocoords/Makefile.am
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/geocoords/Makefile.am 2007-02-01 20:26:35 UTC (rev 5948)
+++ cs/spatialdata-0.1/trunk/modulesrc/geocoords/Makefile.am 2007-02-01 21:25:44 UTC (rev 5949)
@@ -29,8 +29,8 @@
geocoords.pyx geocoords_embed.cpp geocoords_embed.h: geocoords.pyxe
pyrexembed geocoords.pyxe
-geocoords.pyxe: $(srcdir)/geocoords.pyxe
- cp $(srcdir)/geocoords.pyxe $@
+geocoords.pyxe: $(srcdir)/geocoords.pyxe.src
+ cp $(srcdir)/geocoords.pyxe.src $@
geocoords_embed.cpp: geocoords_embed.h
geocoords_embed.h: geocoords.pyx
Deleted: cs/spatialdata-0.1/trunk/modulesrc/geocoords/geocoords.pyxe
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/geocoords/geocoords.pyxe 2007-02-01 20:26:35 UTC (rev 5948)
+++ cs/spatialdata-0.1/trunk/modulesrc/geocoords/geocoords.pyxe 2007-02-01 21:25:44 UTC (rev 5949)
@@ -1,482 +0,0 @@
-#!/usr/bin/env python
-#
-# ======================================================================
-#
-# Brad T. Aagaard
-# U.S. Geological Survey
-#
-# {LicenseText}
-#
-# ======================================================================
-#
-
-#header{
-#include "spatialdata/geocoords/CoordSys.hh"
-#include "spatialdata/geocoords/CSCart.hh"
-#include "spatialdata/geocoords/CSGeo.hh"
-#include "spatialdata/geocoords/CSGeoLocalCart.hh"
-#include "spatialdata/geocoords/CSGeoProj.hh"
-#include "spatialdata/geocoords/Projector.hh"
-#include "spatialdata/geocoords/Converter.hh"
-#}header
-
-# ----------------------------------------------------------------------
-cdef extern from "Python.h":
- object PyCObject_FromVoidPtr(void*, void (*destruct)(void*))
- void* PyCObject_AsVoidPtr(object)
-
-cdef void* ptrFromHandle(obj):
- """Extract pointer from PyCObject."""
- return PyCObject_AsVoidPtr(obj.handle)
-
-cdef extern from "stdlib.h":
- ctypedef unsigned long size_t
- void* malloc(size_t size)
- void free(void* mem)
-
-# ----------------------------------------------------------------------
-cdef class CoordSys:
-
- cdef void* thisptr # Pointer to C++ object
- cdef readonly object handle # PyCObject holding pointer to C++ object
- cdef readonly object name # Identifier for object base type
-
- def __init__(self):
- """Constructor."""
- self.handle = None
- self.thisptr = NULL
- self.name = "spatialdata_geocoords_CoordSys"
- return
-
-
- def initialize(self):
- """Initialize the coordinate system."""
- # create shim for method 'initialize'
- #embed{ void CoordSys_initialize(void* pObj)
- ((spatialdata::geocoords::CoordSys*) pObj)->initialize();
- #}embed
-
- CoordSys_initialize(self.thisptr)
- return
-
-
- def _createHandle(self):
- """Wrap pointer to C++ object in PyCObject."""
- # create shim for destructor
- #embed{ void CoordSys_destructor(void* pObj)
- spatialdata::geocoords::CoordSys* pCS =
- (spatialdata::geocoords::CoordSys*) pObj;
- delete pCS;
- #}embed
- return PyCObject_FromVoidPtr(self.thisptr, CoordSys_destructor)
-
-
- property spaceDim:
- def __set__(self, ndims):
- """Set number of dimensions for coordinates."""
- # create shim for method 'spaceDim'
- #embed{ void CoordSys_spaceDim_set(void* pObj, int ndims)
- ((spatialdata::geocoords::CoordSys*) pObj)->setSpaceDim(ndims);
- #}embed
- CoordSys_spaceDim_set(self.thisptr, ndims)
-
- def __get__(self):
- """Get number of dimensions for coordinates."""
- # create shim for method 'spaceDim'
- #embed{ int CoordSys_spaceDim_get(void* pObj)
- return ((spatialdata::geocoords::CoordSys*) pObj)->spaceDim();
- #}embed
- return CoordSys_spaceDim_get(self.thisptr)
-
-
-# ----------------------------------------------------------------------
-cdef class CSCart(CoordSys):
-
- def __init__(self):
- """Constructor."""
- # create shim for constructor
- #embed{ void* CSCart_constructor()
- return (void*)(new spatialdata::geocoords::CSCart);
- #}embed
-
- CoordSys.__init__(self)
- self.thisptr = CSCart_constructor()
- self.handle = self._createHandle()
- return
-
-
- property toMeters:
- def __set__(self, scale):
- """Set scale factor for converting coordinates to SI units (meters)."""
- # create shim for method 'toMeters'
- #embed{ void CSCart_toMeters_set(void* pObj, double scale)
- ((spatialdata::geocoords::CSCart*) pObj)->toMeters(scale);
- #}embed
- CSCart_toMeters_set(self.thisptr, scale)
-
- def __get__(self):
- """Get scale factor for converting coordinates to SI units (meters)."""
- # create shim for method 'toMeters'
- #embed{ double CSCart_toMeters_get(void* pObj)
- return ((spatialdata::geocoords::CSCart*) pObj)->toMeters();
- #}embed
- return CSCart_toMeters_get(self.thisptr)
-
-
-# ----------------------------------------------------------------------
-cdef class CSGeo(CoordSys):
-
- def __init__(self):
- """Constructor."""
- # create shim for constructor
- #embed{ void* CSGeo_constructor()
- return (void*)(new spatialdata::geocoords::CSGeo);
- #}embed
-
- CoordSys.__init__(self)
- self.thisptr = CSGeo_constructor()
- self.handle = self._createHandle()
- return
-
-
- property ellipsoid:
- def __set__(self, name):
- """Set reference ellipsoid."""
- # create shim for method 'ellipsoid'
- #embed{ void CSGeo_ellipsoid_set(void* pObj, char* name)
- ((spatialdata::geocoords::CSGeo*) pObj)->ellipsoid(name);
- #}embed
- CSGeo_ellipsoid_set(self.thisptr, name)
-
- def __get__(self):
- """Fet reference ellipsoid."""
- # create shim for method 'ellipsoid'
- #embed{ char* CSGeo_ellipsoid_get(void* pObj)
- return (char*) ((spatialdata::geocoords::CSGeo*) pObj)->ellipsoid();
- #}embed
- return CSGeo_ellipsoid_get(self.thisptr)
-
-
- property datumHoriz:
- def __set__(self, name):
- """Set horizontal datum."""
- # create shim for method 'datumHoriz'
- #embed{ void CSGeo_datumHoriz_set(void* pObj, char* name)
- ((spatialdata::geocoords::CSGeo*) pObj)->datumHoriz(name);
- #}embed
- CSGeo_datumHoriz_set(self.thisptr, name)
-
- def __get__(self):
- """Get horizontal datum."""
- # create shim for method 'datumHoriz'
- #embed{ char* CSGeo_datumHoriz_get(void* pObj)
- return (char*) ((spatialdata::geocoords::CSGeo*) pObj)->datumHoriz();
- #}embed
- return CSGeo_datumHoriz_get(self.thisptr)
-
-
- property datumVert:
- def __set__(self, name):
- """Set vertical datum."""
- # create shim for method 'datumVert'
- #embed{ void CSGeo_datumVert_set(void* pObj, char* name)
- ((spatialdata::geocoords::CSGeo*) pObj)->datumVert(name);
- #}embed
- CSGeo_datumVert_set(self.thisptr, name)
-
- def __get__(self):
- """Get vertical datum."""
- # create shim for method 'datumVert'
- #embed{ char* CSGeo_datumVert_get(void* pObj)
- return (char*) ((spatialdata::geocoords::CSGeo*) pObj)->datumVert();
- #}embed
- return CSGeo_datumVert_get(self.thisptr)
-
-
- property isGeocentric:
- def __set__(self, flag):
- """Set geocentric flag."""
- # create shim for method 'isGeocentric'
- #embed{ void CSGeo_isGeocentric_set(void* pObj, int flag)
- ((spatialdata::geocoords::CSGeo*) pObj)->isGeocentric(flag);
- #}embed
- CSGeo_isGeocentric_set(self.thisptr, flag)
-
- def __get__(self):
- """Get geocentric flag."""
- # create shim for method 'isGeocentric'
- #embed{ int CSGeo_isGeocentric_get(void* pObj)
- return ((spatialdata::geocoords::CSGeo*) pObj)->isGeocentric();
- #}embed
- return CSGeo_isGeocentric_get(self.thisptr)
-
-
- property toMeters:
- def __set__(self, scale):
- """Set factor to convert Cartesian coordinates to meters."""
- # create shim for method 'toMeters'
- #embed{ void CSGeo_toMeters_set(void* pObj, double scale)
- ((spatialdata::geocoords::CSGeo*) pObj)->toMeters(scale);
- #}embed
- CSGeo_toMeters_set(self.thisptr, scale)
-
- def __get__(self):
- """Get factor to convert Cartesian coordinates to meters."""
- # create shim for method 'toMeters'
- #embed{ double CSGeo_toMeters_get(void* pObj)
- return ((spatialdata::geocoords::CSGeo*) pObj)->toMeters();
- #}embed
- return CSGeo_toMeters_get(self.thisptr)
-
-
-# ----------------------------------------------------------------------
-cdef class CSGeoLocalCart(CSGeo):
-
- def __init__(self):
- """Constructor."""
- # create shim for constructor
- #embed{ void* CSGeoLocalCart_constructor()
- return (void*)(new spatialdata::geocoords::CSGeoLocalCart);
- #}embed
-
- CSGeo.__init__(self)
- self.thisptr = CSGeoLocalCart_constructor()
- self.handle = self._createHandle()
- return
-
-
- def origin(self, lon, lat, elev):
- """Set origin of local cartesian coordinate system."""
- # create shim for method 'origin'
- #embed{ void CSGeoLocalCart_origin(void* pObj, double lon, double lat, double elev)
- ((spatialdata::geocoords::CSGeoLocalCart*) pObj)->origin(lon, lat, elev);
- #}embed
- CSGeoLocalCart_origin(self.thisptr, lon, lat, elev)
-
-
- def getOrigin(self):
- """Get origin of local cartesian coordinate system."""
- # create shim for method 'origin'
- #embed{ void CSGeoLocalCart_getOrigin(void* pObj, double* pLon, double* pLat, double* pElev)
- ((spatialdata::geocoords::CSGeoLocalCart*) pObj)->origin(pLon, pLat, pElev);
- #}embed
- cdef double lon, lat, elev
- CSGeoLocalCart_getOrigin(self.thisptr, &lon, &lat, &elev)
- return (lon, lat, elev)
-
-
-# ----------------------------------------------------------------------
-cdef class CSGeoProj(CSGeo):
-
- def __init__(self):
- """Constructor."""
- # create shim for constructor
- #embed{ void* CSGeoProj_constructor()
- return (void*)(new spatialdata::geocoords::CSGeoProj);
- #}embed
-
- CSGeo.__init__(self)
- self.thisptr = CSGeoProj_constructor()
- self.handle = self._createHandle()
- return
-
-
- property projector:
- def __set__(self, proj):
- """Set projector."""
- # create shim for method 'projector'
- #embed{ void CSGeoProj_projector(void* pObj, void* pProjObj)
- const spatialdata::geocoords::Projector* pProj =
- (spatialdata::geocoords::Projector*) pProjObj;
- ((spatialdata::geocoords::CSGeoProj*) pObj)->projector(*pProj);
- #}embed
- if not proj.name == "spatialdata_geocoords_Projector":
- raise TypeError, \
- "Argument must be extension module type 'Projector'."
- CSGeoProj_projector(self.thisptr, ptrFromHandle(proj))
-
-
-# ----------------------------------------------------------------------
-cdef class Projector:
-
- 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."""
- # create shim for constructor
- #embed{ void* Projector_constructor()
- return (void*)(new spatialdata::geocoords::Projector);
- #}embed
-
- self.thisptr = Projector_constructor()
- self.handle = self._createHandle()
- self.name = "spatialdata_geocoords_Projector"
- return
-
-
- property projection:
- def __set__(self, name):
- """Set projection."""
- # create shim for method 'projection'
- #embed{ void Projector_projection_set(void* pObj, char* name)
- ((spatialdata::geocoords::Projector*) pObj)->projection(name);
- #}embed
- Projector_projection_set(self.thisptr, name)
-
- def __get__(self):
- """Get projection."""
- # create shim for method 'projection'
- #embed{ char* Projector_projection_get(void* pObj)
- return (char*) ((spatialdata::geocoords::Projector*) pObj)->projection();
- #}embed
- return Projector_projection_get(self.thisptr)
-
-
- property units:
- def __set__(self, name):
- """Set units of projection."""
- # create shim for method 'units'
- #embed{ void Projector_units_set(void* pObj, char* name)
- ((spatialdata::geocoords::Projector*) pObj)->units(name);
- #}embed
- Projector_units_set(self.thisptr, name)
-
- def __get__(self):
- """Get units of projection."""
- # create shim for method 'units'
- #embed{ char* Projector_units_get(void* pObj)
- return (char*) ((spatialdata::geocoords::Projector*) pObj)->units();
- #}embed
- return Projector_units_get(self.thisptr)
-
- property projOptions:
- def __set__(self, options):
- """Set proj.4 options for projector."""
- # create shim for method 'projOptions'
- #embed{ void Projector_projOptions_set(void* pObj, char* options)
- ((spatialdata::geocoords::Projector*) pObj)->projOptions(options);
- #}embed
- Projector_projOptions_set(self.thisptr, options)
-
- def __get__(self):
- """Set proj.4 options for projector."""
- # create shim for method 'projOptions'
- #embed{ char* Projector_projOptions_get(void* pObj)
- return (char*) ((spatialdata::geocoords::Projector*) pObj)->projOptions();
- #}embed
- return Projector_projOptions_get(self.thisptr)
-
-
- def initialize(self, csGeo):
- """Initialize projector."""
- # create shim for method 'initialize'
- #embed{ void Projector_initialize(void* pObj, void* pCSObj)
- const spatialdata::geocoords::CoordSys* pCS =
- (spatialdata::geocoords::CoordSys*) pCSObj;
- const spatialdata::geocoords::CSGeo* pCSGeo =
- dynamic_cast<const spatialdata::geocoords::CSGeo*>(pCS);
- ((spatialdata::geocoords::Projector*) pObj)->initialize(*pCSGeo);
- #}embed
-
- if not csGeo.name == "spatialdata_geocoords_CoordSys":
- raise TypeError, \
- "Argument 'csGeo' must be extension module type 'CSGeo'."
-
- Projector_initialize(self.thisptr, ptrFromHandle(csGeo))
- return
-
-
- def project(self, lonlat):
- """Project geographic coordinates."""
- # create shim for method 'project'
- #embed{ void Projector_project(void* pObj, double* pX, double* pY, double lon, double lat)
- ((spatialdata::geocoords::Projector*) pObj)->project(pX, pY, lon, lat);
- #}embed
-
- cdef double x
- cdef double y
- npts = len(lonlat)
- xy = []
- for i from 0 <= i < npts:
- lon = lonlat[i][0]
- lat = lonlat[i][1]
- Projector_project(self.thisptr, &x, &y, lon, lat)
- xy.append([x, y])
- return xy
-
-
- def invproject(self, xy):
- """Get geographics coordinates for projected location."""
- # create shim for method 'invproject'
- #embed{ void Projector_invproject(void* pObj, double* pLon, double* pLat, double x, double y)
- ((spatialdata::geocoords::Projector*) pObj)->invproject(pLon, pLat, x, y);
- #}embed
-
- cdef double lon
- cdef double lat
- npts = len(xy)
- lonlat = []
- for i from 0 <= i < npts:
- x = xy[i][0]
- y = xy[i][1]
- Projector_invproject(self.thisptr, &lon, &lat, x, y)
- lonlat.append([lon, lat])
- return lonlat
-
-
- def _createHandle(self):
- """Wrap pointer to C++ object in PyCObject."""
- # create shim for destructor
- #embed{ void Projector_destructor(void* pObj)
- spatialdata::geocoords::Projector* pProj =
- (spatialdata::geocoords::Projector*) pObj;
- delete pProj;
- #}embed
- return PyCObject_FromVoidPtr(self.thisptr, Projector_destructor)
-
-
-# ----------------------------------------------------------------------
-# create shim for Converter method 'convert'
-#embed{ void CppConverter_convert(double* coords, int numLocs, int numDims, void* pCSDestObj, void* pCSSrcObj)
-spatialdata::geocoords::CoordSys* pCSDest =
- (spatialdata::geocoords::CoordSys*) pCSDestObj;
-spatialdata::geocoords::CoordSys* pCSSrc =
- (spatialdata::geocoords::CoordSys*) pCSSrcObj;
-spatialdata::geocoords::Converter::convert(coords, numLocs, numDims,
- pCSDest, pCSSrc);
-#}embed
-
-def Converter_convert(coordsSrc, csDest, csSrc):
- """Convert coordinates from source coordinate system 'csSrc' to
- destination coordinate system 'csDest'."""
-
- import spatialdata.utils.simplearray
- coordsSrc = spatialdata.utils.simplearray.objAsSimpleArray(coordsSrc)
- if not coordsSrc.isCompatible(nd=2,
- simpletype="double",
- writeable=True,
- contiguous=True,
- notswapped=True):
- raise TypeError, \
- "Argument 'coordsSrc' must be a contiguous, writeable, 2-D array " \
- "of type double."
-
- if not csDest.name == "spatialdata_geocoords_CoordSys":
- raise TypeError, \
- "Argument 'csDest' must be extension module type 'CSGeo'."
- if not csSrc.name == "spatialdata_geocoords_CoordSys":
- raise TypeError, \
- "Argument 'csSrc' must be extension module type 'CSGeo'."
-
- (numLocs, numDims) = coordsSrc.shape
-
- cdef double* vals
- vals = <double*> PyCObject_AsVoidPtr(coordsSrc.data)
- CppConverter_convert(vals, numLocs, numDims,
- ptrFromHandle(csDest), ptrFromHandle(csSrc))
- return
-
-
-# End of file
Copied: cs/spatialdata-0.1/trunk/modulesrc/geocoords/geocoords.pyxe.src (from rev 5948, cs/spatialdata-0.1/trunk/modulesrc/geocoords/geocoords.pyxe)
Modified: cs/spatialdata-0.1/trunk/modulesrc/spatialdb/Makefile.am
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/spatialdb/Makefile.am 2007-02-01 20:26:35 UTC (rev 5948)
+++ cs/spatialdata-0.1/trunk/modulesrc/spatialdb/Makefile.am 2007-02-01 21:25:44 UTC (rev 5949)
@@ -31,8 +31,8 @@
spatialdb.pyx spatialdb_embed.cpp spatialdb_embed.h: spatialdb.pyxe
pyrexembed spatialdb.pyxe
-spacialdb.pyxe: $(srcdir)/spacialdb.pyxe
- cp $(srcdir)/spacialdb.pyxe $@
+spatialdb.pyxe: $(srcdir)/spatialdb.pyxe.src
+ cp $(srcdir)/spatialdb.pyxe.src $@
spatialdb_embed.cpp: spatialdb_embed.h
spatialdb_embed.h: spatialdb.pyx
Modified: cs/spatialdata-0.1/trunk/modulesrc/spatialdb/generator/Makefile.am
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/spatialdb/generator/Makefile.am 2007-02-01 20:26:35 UTC (rev 5948)
+++ cs/spatialdata-0.1/trunk/modulesrc/spatialdb/generator/Makefile.am 2007-02-01 21:25:44 UTC (rev 5949)
@@ -29,8 +29,8 @@
generator.pyx generator_embed.cpp generator_embed.h: generator.pyxe
pyrexembed generator.pyxe
-generator.pyxe: $(srcdir)/generator.pyxe
- cp $(srcdir)/generator.pyxe $@
+generator.pyxe: $(srcdir)/generator.pyxe.src
+ cp $(srcdir)/generator.pyxe.src $@
generator_embed.cpp: generator_embed.h
generator_embed.h: generator.pyx
Deleted: cs/spatialdata-0.1/trunk/modulesrc/spatialdb/generator/generator.pyxe
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/spatialdb/generator/generator.pyxe 2007-02-01 20:26:35 UTC (rev 5948)
+++ cs/spatialdata-0.1/trunk/modulesrc/spatialdb/generator/generator.pyxe 2007-02-01 21:25:44 UTC (rev 5949)
@@ -1,197 +0,0 @@
-#!/usr/bin/env python
-#
-# ======================================================================
-#
-# Brad T. Aagaard
-# U.S. Geological Survey
-#
-# {LicenseText}
-#
-# ======================================================================
-#
-
-# Ugly implementation of some routines used to generate SimpleDB
-# databases from other spatial databases.
-
-#header{
-#include "spatialdata/spatialdb/SpatialDB.hh"
-#include "spatialdata/spatialdb/SimpleDB.hh"
-#include "spatialdata/spatialdb/SimpleDBTypes.hh"
-#}header
-
-# ----------------------------------------------------------------------
-cdef extern from "Python.h":
- object PyCObject_FromVoidPtr(void*, void (*destruct)(void*))
- void* PyCObject_AsVoidPtr(object)
-
-
-cdef void* ptrFromHandle(obj):
- """Extract pointer from PyCObject."""
- return PyCObject_AsVoidPtr(obj.handle)
-
-cdef void deleteArray(void* p):
- """Deallocate C array."""
- free(p);
- return
-
-
-cdef extern from "stdlib.h":
- ctypedef unsigned long size_t
- void* malloc(size_t size)
- void free(void* mem)
-
-
-
-# ----------------------------------------------------------------------
-def create(coords, locCount, locDim, numValues, spaceDim, dataDim):
- """Create structure for simple database."""
- # create C++ shim
- #embed{ void GenSimpleDB_tearDownData(void* pDataObj)
- spatialdata::spatialdb::SimpleDB::DataStruct* pData =
- (spatialdata::spatialdb::SimpleDB::DataStruct*) pDataObj;
- if (0 != pData) {
- delete[] pData->data;
- delete[] pData->valNames;
- delete[] pData->valUnits;
- } // if
- delete pData;
- #}embed
-
- # create C++ shim
- #embed{ void* GenSimpleDB_create(void* pCoordsObj, int locCount, int locDim, int numValues, int spaceDim, int dataDim)
- spatialdata::spatialdb::SimpleDB::DataStruct* pData =
- new spatialdata::spatialdb::SimpleDB::DataStruct;
- const int totalNumValues = locDim + numValues;
- const int size = locCount * totalNumValues;
- if (size > 0) {
- pData->data = new double[size];
- std::fill(pData->data, pData->data+size, 0.0);
- pData->numLocs = locCount;
- pData->numVals = numValues;
- pData->valNames = (numValues > 0) ? new std::string[numValues] : 0;
- pData->valUnits = (numValues > 0) ? new std::string[numValues] : 0;
- pData->spaceDim = spaceDim;
- pData->dataDim = dataDim;
- } // if
- double* pCoords = (double*) pCoordsObj;
- for (int iLoc=0; iLoc < locCount; ++iLoc) {
- double* pDataCoords =
- spatialdata::spatialdb::SimpleDBTypes::dataCoords(*pData, iLoc);
- for (int iDim=0; iDim < locDim; ++iDim)
- pDataCoords[iDim] = pCoords[locDim*iLoc+iDim];
- } // for
- return (void*) pData;
- #}embed
-
- cdef void* pCoordsObj
- pCoordsObj = PyCObject_AsVoidPtr(coords)
-
- return PyCObject_FromVoidPtr(
- GenSimpleDB_create(pCoordsObj,
- locCount, locDim, numValues, spaceDim, dataDim),
- GenSimpleDB_tearDownData)
-
-
-def createValue(count):
- """Create array of values, initialized to 0."""
- cdef double* pVals
- if count < 1:
- raise ValueError, "Argument 'count' must be positive."
- pVals = <double*> malloc(count*sizeof(double))
- for i from 0 <= i < count:
- pVals[i] = 0.0
- return PyCObject_FromVoidPtr(pVals, deleteArray)
-
-
-def setValue(data, dataIndex, value, locCount, name, units):
- """Set database value using array of values."""
- # create C++ shim
- #embed{ void GenSimpleDB_setValue(void* pDataObj, int dataIndex, void* pValueObj, int locCount, char* name, char* units)
- spatialdata::spatialdb::SimpleDB::DataStruct* pData =
- (spatialdata::spatialdb::SimpleDB::DataStruct*) pDataObj;
- double* pValue = (double*) pValueObj;
-
- for (int iLoc=0; iLoc < locCount; ++iLoc) {
- double* pDataVals =
- spatialdata::spatialdb::SimpleDBTypes::dataVals(*pData, iLoc);
- pDataVals[dataIndex] = pValue[iLoc];
- } // for
- pData->valNames[dataIndex] = name;
- pData->valUnits[dataIndex] = units;
- #}embed
-
- cdef void* pDataObj
- cdef void* pValueObj
-
- pDataObj = PyCObject_AsVoidPtr(data)
- pValueObj = PyCObject_AsVoidPtr(value)
-
- GenSimpleDB_setValue(pDataObj, dataIndex, pValueObj, locCount, name, units)
- return
-
-
-def applyFilter(value, valueCount, locs, locCount, cs, db,
- operand, defaultValue):
- """Apply filter to value."""
- # create C++ shim
- #embed{ void GenSimpleDB_applyFilter(void* pValueObj, int valueCount, void* pLocsObj, int locCount, void* pCSObj, void* pDBObj, char* operand, double defaultValue)
-
- double* pValue = (double*) pValueObj;
- double* pLocs = (double*) pLocsObj;
- spatialdata::spatialdb::SpatialDB* pDB =
- (spatialdata::spatialdb::SpatialDB*) pDBObj;
- spatialdata::geocoords::CoordSys* pCS =
- (spatialdata::geocoords::CoordSys*) pCSObj;
-
- double* pFilterData = (locCount > 0) ? new double[locCount] : 0;
- double val = 0;
- int err = 0;
- for (int iLoc=0, index=0; iLoc < locCount; ++iLoc, index += 3) {
- err = pDB->query(&val, 1, &pLocs[index], 3, pCS);
- if (0 != err)
- val = defaultValue;
- pFilterData[iLoc] = val;
- } // for
- if (0 == strcasecmp("add", operand))
- for (int iLoc=0; iLoc < locCount; ++iLoc)
- pValue[iLoc] += pFilterData[iLoc];
- else if (0 == strcasecmp("subtract", operand))
- for (int iLoc=0; iLoc < locCount; ++iLoc)
- pValue[iLoc] -= pFilterData[iLoc];
- else if (0 == strcasecmp("multiply", operand))
- for (int iLoc=0; iLoc < locCount; ++iLoc)
- pValue[iLoc] *= pFilterData[iLoc];
- else if (0 == strcasecmp("divide", operand))
- for (int iLoc=0; iLoc < locCount; ++iLoc)
- pValue[iLoc] /= pFilterData[iLoc];
- delete[] pFilterData; pFilterData = 0;
- #}embed
-
- if not cs.name == "spatialdata_geocoords_CoordSys":
- raise TypeError, \
- "Arguement 'cs' must be an extensional module type 'CoordSys'."
- if not db.name == "spatialdata_spatialdb_SpatialDB":
- raise TypeError, \
- "Argument 'db' must be an extension module type 'SpatialDB'."
- if not (operand == "add" or
- operand == "subtract" or
- operand == "multiply" or
- operand == "divide"):
- raise ValueError, "Arguement operand must be 'add', 'subtract', " \
- "'multiply', or 'divide'."
-
- cdef void* pValueObj
- cdef void* pLocsObj
-
- pValueObj = PyCObject_AsVoidPtr(value)
- pLocsObj = PyCObject_AsVoidPtr(locs)
- GenSimpleDB_applyFilter(pValueObj, valueCount, pLocsObj, locCount,
- ptrFromHandle(cs), ptrFromHandle(db),
- operand, defaultValue)
- return
-
-
-# version
-__id__ = "$Id$"
-
-# End of file
Copied: cs/spatialdata-0.1/trunk/modulesrc/spatialdb/generator/generator.pyxe.src (from rev 5948, cs/spatialdata-0.1/trunk/modulesrc/spatialdb/generator/generator.pyxe)
Deleted: cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe 2007-02-01 20:26:35 UTC (rev 5948)
+++ cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe 2007-02-01 21:25:44 UTC (rev 5949)
@@ -1,315 +0,0 @@
-#!/usr/bin/env python
-#
-# ======================================================================
-#
-# Brad T. Aagaard
-# U.S. Geological Survey
-#
-# {LicenseText}
-#
-# ======================================================================
-#
-
-#header{
-#include "spatialdata/spatialdb/SpatialDB.hh"
-#include "spatialdata/spatialdb/SimpleDB.hh"
-#include "spatialdata/spatialdb/SimpleIO.hh"
-#include "spatialdata/spatialdb/SimpleIOAscii.hh"
-
-#include "spatialdata/geocoords/CoordSys.hh"
-#}header
-
-# ----------------------------------------------------------------------
-cdef extern from "Python.h":
- object PyCObject_FromVoidPtr(void*, void (*destruct)(void*))
- void* PyCObject_AsVoidPtr(object)
-
-
-cdef void* ptrFromHandle(obj):
- """Extract pointer from PyCObject."""
- return PyCObject_AsVoidPtr(obj.handle)
-
-
-cdef extern from "stdlib.h":
- ctypedef unsigned long size_t
- void* malloc(size_t size)
- void free(void* mem)
- void strcpy(char*, char*)
-
-# ----------------------------------------------------------------------
-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)
- ((spatialdata::spatialdb::SpatialDB*) pObj)->label(name);
- #}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)
- return (char*) ((spatialdata::spatialdb::SpatialDB*) pObj)->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)
- ((spatialdata::spatialdb::SpatialDB*) pObj)->open();
- #}embed
-
- SpatialDB_open(self.thisptr)
- return
-
-
- def close(self):
- """Close the database."""
- # create shim for method 'close'
- #embed{ void SpatialDB_close(void* pObj)
- ((spatialdata::spatialdb::SpatialDB*) pObj)->close();
- #}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)
- ((spatialdata::spatialdb::SpatialDB*) pObj)->queryVals((const char**) names, numVals);
- #}embed
-
- cdef char** pNames
- numVals = len(names)
- 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{ void SpatialDB_query(void* pObj, double* vals, int nvals, double* coords, int spaceDim, void* csObj)
- spatialdata::geocoords::CoordSys* pCS =
- (spatialdata::geocoords::CoordSys*) csObj;
- ((spatialdata::spatialdb::SpatialDB*) pObj)->query(vals, nvals,
- coords, spaceDim,
- pCS);
- #}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 = <double*> malloc(nlocs*nvals*sizeof(double))
-
- cdef double* valbuffer
- valbuffer = <double*> malloc(nvals*sizeof(double))
-
- for iloc from 0 <= iloc < nlocs:
- 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);
- return spatialdata.utils.simplearray.SimpleCppArray(pValsObj,
- dims, "double")
-
-
- def _createHandle(self):
- """Wrap pointer to C++ object in PyCObject."""
- # create shim for destructor
- #embed{ void SpatialDB_destructor(void* pObj)
- spatialdata::spatialdb::SpatialDB* pDB =
- (spatialdata::spatialdb::SpatialDB*) pObj;
- delete pDB;
- #}embed
- return PyCObject_FromVoidPtr(self.thisptr, SpatialDB_destructor)
-
-
-# ----------------------------------------------------------------------
-cdef class SimpleDB(SpatialDB):
-
- def __init__(self):
- """Constructor."""
- # create shim for constructor
- #embed{ void* SimpleDB_constructor()
- return (void*)(new spatialdata::spatialdb::SimpleDB);
- #}embed
-
- SpatialDB.__init__(self)
- self.thisptr = SimpleDB_constructor()
- self.handle = self._createHandle()
- return
-
-
- def queryType(self, name):
- """Set query type"""
- # create shim for method 'queryType'
- #embed{ void SimpleDB_queryType(void* pObj, char* name)
- spatialdata::spatialdb::SimpleDB::QueryEnum queryType =
- spatialdata::spatialdb::SimpleDB::NEAREST;
- if (0 == strcasecmp(name, "nearest"))
- queryType = spatialdata::spatialdb::SimpleDB::NEAREST;
- else if (0 == strcasecmp(name, "linear"))
- queryType = spatialdata::spatialdb::SimpleDB::LINEAR;
- ((spatialdata::spatialdb::SimpleDB*) pObj)->queryType(queryType);
- #}embed
-
- if not (name.lower() == "nearest" or name.lower() == "linear"):
- raise ValueError, "Couldn't parse query type '%s' into a known type" \
- "type of query. Accepted values are 'nearest' and 'linear'." \
- % name
-
- SimpleDB_queryType(self.thisptr, name)
- return
-
-
- def ioHandler(self, handle):
- """Set the I/O handler."""
- # create shim for method 'ioHandler'
- #embed{ void SimpleDB_ioHandler(void* pObj, void* pHandlerObj)
- spatialdata::spatialdb::SimpleIO* pHandler =
- (spatialdata::spatialdb::SimpleIO*) pHandlerObj;
- ((spatialdata::spatialdb::SimpleDB*) pObj)->ioHandler(pHandler);
- #}embed
-
- if not handle.name == "spatialdata_spatialdb_SimpleIO":
- raise TypeError, \
- "Argument 'handle' must be extension module type 'SimpleIO'."
-
- SimpleDB_ioHandler(self.thisptr, ptrFromHandle(handle))
- return
-
-
-# ----------------------------------------------------------------------
-cdef class SimpleIO:
-
- 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_SimpleIO"
- return
-
-
- def filename(self, name):
- """Set filename for database"""
- # create shim for method 'filename'
- #embed{ void SimpleIO_filename(void* pObj, char* name)
- ((spatialdata::spatialdb::SimpleIO*) pObj)->filename(name);
- #}embed
-
- SimpleIO_filename(self.thisptr, name)
- return
-
-
- def _createHandle(self):
- """Wrap pointer to C++ object in PyCObject."""
- # create shim for destructor
- #embed{ void SimpleIO_destructor(void* pObj)
- spatialdata::spatialdb::SimpleIO* pIO =
- (spatialdata::spatialdb::SimpleIO*) pObj;
- delete pIO;
- #}embed
- return PyCObject_FromVoidPtr(self.thisptr, SimpleIO_destructor)
-
-
-# ----------------------------------------------------------------------
-cdef class SimpleIOAscii(SimpleIO):
-
- def __init__(self):
- """Constructor."""
- # create shim for constructor
- #embed{ void* SimpleIOAscii_constructor()
- return (void*)(new spatialdata::spatialdb::SimpleIOAscii);
- #}embed
-
- SimpleIO.__init__(self)
- self.thisptr = SimpleIOAscii_constructor()
- self.handle = self._createHandle()
- return
-
-
- def write(self, data, cs):
- """Write the database."""
- # create shim for method 'write'
- #embed{ void SimpleIOAscii_write(void* pObj, void* pDataObj, void* pCSObj)
- spatialdata::spatialdb::SimpleDB::DataStruct* pData =
- (spatialdata::spatialdb::SimpleDB::DataStruct*) pDataObj;
- spatialdata::geocoords::CoordSys* pCS =
- (spatialdata::geocoords::CoordSys*) pCSObj;
- ((spatialdata::spatialdb::SimpleIOAscii*) pObj)->write(*pData, pCS);
- #}embed
-
- cdef void* pDataObj
- pDataObj = PyCObject_AsVoidPtr(data)
-
- SimpleIOAscii_write(self.thisptr, pDataObj, ptrFromHandle(cs))
- return
-
-
-# version
-__id__ = "$Id$"
-
-# End of file
Copied: cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe.src (from rev 5948, cs/spatialdata-0.1/trunk/modulesrc/spatialdb/spatialdb.pyxe)
Modified: cs/spatialdata-0.1/trunk/modulesrc/utils/Makefile.am
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/utils/Makefile.am 2007-02-01 20:26:35 UTC (rev 5948)
+++ cs/spatialdata-0.1/trunk/modulesrc/utils/Makefile.am 2007-02-01 21:25:44 UTC (rev 5949)
@@ -36,16 +36,16 @@
# simple array targets
simplearray.pyx simplearray_embed.cpp simplearray_embed.h: simplearray.pyxe
pyrexembed simplearray.pyxe
-simplearray.pyxe: $(srcdir)/simplearray.pyxe
- cp $(srcdir)/simplearray.pyxe $@
+simplearray.pyxe: $(srcdir)/simplearray.pyxe.src
+ cp $(srcdir)/simplearray.pyxe.src $@
simplearray_embed.cpp: simplearray_embed.h
simplearray_embed.h: simplearray.pyx
# utils targets
utils.pyx utils_embed.cpp utils_embed.h: utils.pyxe
pyrexembed utils.pyxe
-utils.pyxe: $(srcdir)/utils.pyxe
- cp $(srcdir)/utils.pyxe $@
+utils.pyxe: $(srcdir)/utils.pyxe.src
+ cp $(srcdir)/utils.pyxe.src $@
utils_embed.cpp: utils_embed.h
utils_embed.h: utils.pyx
Deleted: cs/spatialdata-0.1/trunk/modulesrc/utils/simplearray.pyxe
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/utils/simplearray.pyxe 2007-02-01 20:26:35 UTC (rev 5948)
+++ cs/spatialdata-0.1/trunk/modulesrc/utils/simplearray.pyxe 2007-02-01 21:25:44 UTC (rev 5949)
@@ -1,414 +0,0 @@
-#!/usr/bin/env python
-#
-# ======================================================================
-#
-# Brad T. Aagaard
-# U.S. Geological Survey
-#
-# {LicenseText}
-#
-# ======================================================================
-
-
-# ----------------------------------------------------------------------
-cdef extern from "Python.h":
- ctypedef int Py_intptr_t
- void Py_INCREF(object)
- void Py_DECREF(object)
- long PyInt_AsLong(object)
- object PyCObject_FromVoidPtr(void*, void (*func)(void*))
- object PyCObject_FromVoidPtrAndDesc(void* cobj, void* desc,
- void (*func)(void*, void*))
- void* PyCObject_AsVoidPtr(object)
-
-cdef extern from "stdlib.h":
- ctypedef int size_t
- ctypedef long intptr_t
- void* malloc(size_t size)
- void free(void* ptr)
-
-ctypedef struct PyArrayInterface:
- int version
- int nd
- char typekind
- int itemsize
- int flags
- Py_intptr_t* shape
- Py_intptr_t* strides
- void* data
-
-CONTIGUOUS = 0x01
-FORTRAN = 0x02
-ALIGNED = 0x100
-NOTSWAPPED = 0x200
-WRITEABLE = 0x400
-
-# Byte order used in PyArrayInterface
-byteorder = {'<': "little",
- '>': "big"}
-import sys
-
-# ----------------------------------------------------------------------
-cdef void interface_destructor(void* ptr, void* array):
- Py_DECREF(<object> array)
-
-# ----------------------------------------------------------------------
-cdef int _sanitylevel
-_sanitylevel = 2
-def sanitylevel(int level):
- global _sanitylevel
- _sanitylevel = level
- return
-
-
-cdef int _debuglevel
-_debuglevel = 1
-def debuglevel(int level):
- global _debuglevel
- _debuglevel = level
- return
-
-
-# ----------------------------------------------------------------------
-cdef class SimpleArray:
- """Abstract base class for generic multi-dimensional array holding
- simple C/C++ datatypes that is compatible with NumPy, Numeric, and
- numarray."""
-
- cdef readonly object name # Identifier for type of object
- cdef readonly int nd # Number of dimensions in array
- cdef readonly object shape # Dimensions of array
- cdef readonly object strides # Strides for array
- cdef readonly object data # PyCObject holding pointer to data
-
- cdef object _typeinfo # Dictionary containing information about type in array
- cdef PyArrayInterface* _interface # Array interface
- cdef Py_intptr_t* _cshape # C array for shape information
- cdef Py_intptr_t* _cstrides # C array for strides information
-
- def __init__(self):
- """Constructor."""
- self.name = "spatialdata_utils_SimpleArray"
- self.nd = 0
- self.shape = None
- self.strides = None
- self._typeinfo = None
- self._interface = NULL
- self._cshape = NULL
- self._cstrides = NULL
- return
-
-
- def __dealloc__(self):
- """Destructor."""
- free(self._interface)
- free(self._cshape)
- free(self._cstrides)
- return
-
-
- def isCompatible(self, nd=None, simpletype=None,
- writeable=None, contiguous=None, notswapped=None):
- """Check compatibility with requested traits. Return True if
- compatible, False if not."""
- global _sanitylevel
- global _debuglevel
-
- # Skip checks if sanity level < 1
- if _sanitylevel < 1:
- return True
-
- if not nd is None:
- if not nd == self.nd:
- if _debuglevel > 0:
- print "Expected nd '%d' but have nd '%d'." % \
- (nd, self.nd)
- return False
- if not simpletype is None:
- if not simpletype == self._typeinfo['type']:
- if _debuglevel > 0:
- print "Expected type '%s' but have type '%s'." % \
- (simpletype, self._typeinfo['type'])
- return False
- flags = 0
- if not writeable is None:
- flags = flags | WRITEABLE
- if not contiguous is None:
- flags = flags | CONTIGUOUS
- if not notswapped is None:
- flags = flags | NOTSWAPPED
- if not self._interface.flags & flags:
- if _debuglevel > 0:
- print "Incorrect attribute flags."
- return False
-
- if _sanitylevel > 1:
- # make sure strides are compatible
- ndims = len(self.strides)
- stride = self._typeinfo['size']
- for i from 0 <= i < ndims:
- j = ndims-i-1
- if not self.strides[j] == stride:
- if _debuglevel > 0:
- print "Expected stride '%d' but have stride '%d'." % \
- (stride, self.strides[j])
- return False
- stride = stride * self.shape[j]
-
- return True
-
-
- cdef _setupInterface(self, void* data, int flags):
- """Create array interface."""
- self._syncCShape()
- self._syncCStrides()
-
- cdef PyArrayInterface* interface
- interface = <PyArrayInterface*> malloc(sizeof(PyArrayInterface))
- if interface is NULL:
- raise MemoryError("Could not allocate array interface.")
- interface.version = 2
- interface.nd = self.nd
- interface.typekind = ord(self._typeinfo['kind'])
- interface.itemsize = self._typeinfo['size']
- interface.flags = flags
- interface.strides = self._cstrides
- interface.shape = self._cshape
- interface.data = data
- self._interface = interface
- self.data = PyCObject_FromVoidPtr(data, NULL)
- return
-
-
- cdef _calcStrides(self):
- """Calculate strides for contiguous storage in row major (C/C++) order."""
- nd = self.nd
- self.strides = [0]*nd
- stride = self._typeinfo['size']
- for i from 0 <= i < nd:
- j = nd-i-1
- self.strides[j] = stride
- stride = stride * self.shape[j]
- return
-
-
- cdef _syncCShape(self):
- """Synchronize C shape array with Python shape array."""
- free(self._cshape)
- self._cshape = NULL
- nd = len(self.shape)
- if nd > 0:
- self._cshape = <Py_intptr_t*> malloc(nd*sizeof(Py_intptr_t))
- if self._cshape is NULL:
- raise MemoryError("Could not allocate shape array.")
- for i from 0 <= i < nd:
- self._cshape[i] = self.shape[i]
- return
-
-
- cdef _syncCStrides(self):
- """Synchronize C strides array with Python strides array."""
- free(self._cstrides)
- self._cstrides = NULL
- nd = len(self.strides)
- if nd > 0:
- self._cstrides = <Py_intptr_t*> malloc(nd*sizeof(Py_intptr_t))
- if self._cstrides is NULL:
- raise MemoryError("Could not allocate strides array.")
- for i from 0 <= i < nd:
- self._cstrides[i] = self.strides[i]
- return
-
-
-# ----------------------------------------------------------------------
-cdef class SimpleCppArray(SimpleArray):
- """Implementation of generic multi-dimensional array created from C++
- array."""
-
- cdef void* arrayptr # Pointer to head of array
-
- def __init__(self, data, shape, valuetype):
- """Constructor."""
- SimpleArray.__init__(self)
-
- nd = len(shape)
- self.arrayptr = PyCObject_AsVoidPtr(data)
- self.nd = nd
- self._typeinfo = self._sizeandtype(valuetype)
-
- self.shape = [0]*nd
- for i in range(nd):
- self.shape[i] = shape[i]
-
- self._calcStrides()
-
- flags = NOTSWAPPED | ALIGNED | CONTIGUOUS | WRITEABLE
- self._setupInterface(self.arrayptr, flags)
- return
-
-
- def __dealloc__(self):
- """Destructor."""
- # create shim for 'delete'
- #embed{ void PyCppArray_deletedouble(void* pData)
- double* pArray = (double*) pData;
- delete[] pArray;
- #}embed
- #embed{ void PyCppArray_deletefloat(void* pData)
- float* pArray = (float*) pData;
- delete[] pArray;
- #}embed
- #embed{ void PyCppArray_deleteint(void* pData)
- int* pArray = (int*) pData;
- delete[] pArray;
- #}embed
- if self._typeinfo['type'] == "double":
- PyCppArray_deletedouble(self.arrayptr)
- elif self._typeinfo['type'] == "float":
- PyCppArray_deletefloat(self.arrayptr)
- elif self._typeinfo['type'] == "int":
- PyCppArray_deleteint(self.arrayptr)
- return
-
-
- property __array_struct__:
- """Generic array structure property compatible with NumPy, Numeric,
- and numarray."""
- def __get__(self):
- Py_INCREF(self)
- obj = PyCObject_FromVoidPtrAndDesc(<void*> self._interface, <void*> self,
- interface_destructor)
- return obj
-
-
- cdef _sizeandtype(self, valuetype):
- """
- Get size and type information associated with C++ datatype.
- """
- info = {'double': {'size': sizeof(double),
- 'kind': 'f',
- 'type': "double"},
- 'float': {'size': sizeof(float),
- 'kind': 'f',
- 'type': "float"},
- 'int': {'size': sizeof(int),
- 'kind': 'i',
- 'type': "int"}}
- if not valuetype in info.keys():
- raise ValueError("Unknown C type in setting up SimpleArray.")
- return info[valuetype]
-
-
-# ----------------------------------------------------------------------
-cdef class SimplePyArray(SimpleArray):
- """Implementation of generic multi-dimensional array created from Python
- object with __array_struct__ property."""
-
- cdef object _pyarray # Python object holding array data
-
- def __init__(self, pyarray):
- """Constuctor."""
- SimpleArray.__init__(self)
-
- # Array interface version 2 (numpy < 1.0?)
- #shape = pyarray.__array_shape__ # Array interface version 2
- #typestring = pyarray.__array_typestr__
- #strides = pyarray.__array_strides__
- #address = int(pyarray.__array_data__[0], 16)
- #readonly = pyarray.__array_data__[1]
-
- # Array interface version ? (numpy >= 1.0)
- pyarrayInfo = pyarray.__array_interface__
- shape = pyarrayInfo['shape']
- typestring = pyarrayInfo['typestr']
- strides = pyarrayInfo['strides']
- address = int(pyarrayInfo['data'][0])
- readonly = pyarrayInfo['data'][1]
-
- nd = len(shape)
- self.nd = nd
-
- self.shape = [0]*nd
- for i in range(nd):
- self.shape[i] = shape[i]
-
- self._typeinfo = self._sizeandtype(typestring[1:])
-
- if strides:
- self.strides = [0]*nd
- for i from 0 <= i < nd:
- self.strides[i] = strides[i]
- else:
- self._calcStrides()
-
- cdef void* data
- data = <void*> PyInt_AsLong(address)
-
- flags = 0
- if '|' == typestring[0]:
- flags = flags | NOTSWAPPED
- elif byteorder[typestring[0]] == sys.byteorder:
- flags = flags | NOTSWAPPED
- if not readonly:
- flags = flags | WRITEABLE
- self._setupInterface(data, flags)
- self._pyarray = pyarray
- return
-
-
- def __dealloc__(self):
- """Destructor."""
- return
-
-
- property __array_struct__:
- """Generic array structure property compatible with NumPy, Numeric,
- and numarray."""
- def __get__(self):
- if hasattr(self._pyarray, '__array_struct__'):
- return self._pyarray.__array_struct__
- else:
- Py_INCREF(self)
- obj = PyCObject_FromVoidPtrAndDesc(<void*> self._interface,
- <void*> self,
- interface_destructor)
- return obj
-
-
- def _sizeandtype(self, typestring):
- """Parse typestring into size and type information."""
- assert(8 == sizeof(double))
- assert(4 == sizeof(float))
- assert(4 == sizeof(int))
- info = {'f8': {'size': sizeof(double),
- 'kind': 'f',
- 'type': "double"},
- 'f4': {'size': sizeof(float),
- 'kind': 'f',
- 'type': "float"},
- 'i4': {'size': sizeof(int),
- 'kind': 'i',
- 'type': "int"}}
- if not typestring in info.keys():
- raise ValueError("Unknown C type '%s' in setting up SimplePyArray." \
- % typestring)
- return info[typestring]
-
-# ----------------------------------------------------------------------
-def objAsSimpleArray(obj):
- """
- Test if object is a SimpleArray. If not try to convert it to a
- SimpleArray. If can't convert throw ValueError exception.
- """
- try:
- if not obj.name == "spatialdata_utils_SimpleArray":
- obj = SimplePyArray(obj)
- except AttributeError:
- obj = SimplePyArray(obj)
- return obj
-
-
-# version
-__id__ = "$Id$"
-
-# End of file
Copied: cs/spatialdata-0.1/trunk/modulesrc/utils/simplearray.pyxe.src (from rev 5948, cs/spatialdata-0.1/trunk/modulesrc/utils/simplearray.pyxe)
Deleted: cs/spatialdata-0.1/trunk/modulesrc/utils/utils.pyxe
===================================================================
--- cs/spatialdata-0.1/trunk/modulesrc/utils/utils.pyxe 2007-02-01 20:26:35 UTC (rev 5948)
+++ cs/spatialdata-0.1/trunk/modulesrc/utils/utils.pyxe 2007-02-01 21:25:44 UTC (rev 5949)
@@ -1,198 +0,0 @@
-#!/usr/bin/env python
-#
-# ======================================================================
-#
-# Brad T. Aagaard
-# U.S. Geological Survey
-#
-# {LicenseText}
-#
-# ======================================================================
-
-#header{
-#include "spatialdata/utils/PointsStream.hh"
-#}header
-
-# ----------------------------------------------------------------------
-cdef extern from "Python.h":
- object PyCObject_FromVoidPtr(void*, void (*destruct)(void*))
- void* PyCObject_AsVoidPtr(object)
-
-cdef void* ptrFromHandle(obj):
- """Extract pointer from PyCObject."""
- return PyCObject_AsVoidPtr(obj.handle)
-
-cdef extern from "stdlib.h":
- ctypedef unsigned long size_t
-
-# ----------------------------------------------------------------------
-cdef class PointsStream:
- """
- Wrapper for C++ PointsStream object.
- """
-
- cdef void* thisptr # Pointer to C++ object
- cdef readonly object handle # PyCObject holding pointer to C++ object
- cdef readonly object name # Identifier for object base type
-
- def __init__(self):
- """
- Constructor.
- """
- # create shim for constructor
- #embed{ void* PointsStream_constructor()
- return (void*)(new spatialdata::utils::PointsStream);
- #}embed
- self.thisptr = PointsStream_constructor()
- self.handle = self._createHandle()
- self.name = "spatialdata_utils_PointsStream"
- return
-
- property filename:
- def __set__(self, filename):
- """
- Set name of file.
- """
- # create shim for method 'filename'
- #embed{ void PointsStream_filename_set(void* pObj, char* filename)
- ((spatialdata::utils::PointsStream*) pObj)->filename(filename);
- #}embed
- PointsStream_filename_set(self.thisptr, filename)
-
- def __get__(self):
- """
- Get name of file.
- """
- # create shim for method 'filename'
- #embed{ char* PointsStream_filename_get(void* pObj)
- return (char*) ((spatialdata::utils::PointsStream*) pObj)->filename();
- #}embed
- return PointsStream_filename_get(self.thisptr)
-
-
- property commentFlag:
- def __set__(self, flag):
- """
- Set flag for comment lines.
- """
- # create shim for method 'commentFlag'
- #embed{ void PointsStream_commentFlag_set(void* pObj, char* flag)
- ((spatialdata::utils::PointsStream*) pObj)->commentFlag(flag);
- #}embed
- PointsStream_commentFlag_set(self.thisptr, flag)
-
- def __get__(self):
- """
- Get flag for comment lines.
- """
- # create shim for method 'commentFlag'
- #embed{ char* PointsStream_commentFlag_get(void* pObj)
- return (char*) ((spatialdata::utils::PointsStream*) pObj)->commentFlag();
- #}embed
- return PointsStream_commentFlag_get(self.thisptr)
-
-
- property fieldWidth:
- def __set__(self, width):
- """
- Set field width.
- """
- # create shim for method 'fieldWidth'
- #embed{ void PointsStream_fieldWidth_set(void* pObj, int width)
- ((spatialdata::utils::PointsStream*) pObj)->fieldWidth(width);
- #}embed
- PointsStream_fieldWidth_set(self.thisptr, width)
-
- def __get__(self):
- """
- Get field width.
- """
- # create shim for method 'fieldWidth'
- #embed{ int PointsStream_fieldWidth_get(void* pObj)
- return ((spatialdata::utils::PointsStream*) pObj)->fieldWidth();
- #}embed
- return PointsStream_fieldWidth_get(self.thisptr)
-
-
- property precision:
- def __set__(self, precision):
- """
- Set precision.
- """
- # create shim for method 'precision'
- #embed{ void PointsStream_precision_set(void* pObj, int precision)
- ((spatialdata::utils::PointsStream*) pObj)->precision(precision);
- #}embed
- PointsStream_precision_set(self.thisptr, precision)
-
- def __get__(self):
- """
- Get flag for comment lines.
- """
- # create shim for method 'precision'
- #embed{ int PointsStream_precision_get(void* pObj)
- return ((spatialdata::utils::PointsStream*) pObj)->precision();
- #}embed
- return PointsStream_precision_get(self.thisptr)
-
-
- def read(self):
- """
- Read points from stdin.
- """
- # create shim for method 'read'
- #embed{ void PointsStream_read(void* pObj, double** ppVals, int* pNumPts, int* pNumDims)
- ((spatialdata::utils::PointsStream*) pObj)->read(ppVals,
- pNumPts, pNumDims);
- #}embed
- cdef double* pVals
- cdef int numPts
- cdef int numDims
- pVals = NULL
- numPts = 0
- numDims = 0
- PointsStream_read(self.thisptr, &pVals, &numPts, &numDims)
- dims = [numPts, numDims]
- import spatialdata.utils.simplearray
- pValsObj = PyCObject_FromVoidPtr(pVals, NULL);
- return spatialdata.utils.simplearray.SimpleCppArray(pValsObj,
- dims, "double")
-
-
- def write(self, points):
- """
- Write points to stdout.
- """
- # create shim for method 'write'
- #embed{ void PointsStream_write(void* pObj, double* pVals, int numPts, int numDims)
- ((spatialdata::utils::PointsStream*) pObj)->write(pVals, numPts, numDims);
- #}embed
-
- import spatialdata.utils.simplearray
- points = spatialdata.utils.simplearray.objAsSimpleArray(points)
- if not points.isCompatible(nd=2,
- simpletype="double",
- contiguous=True,
- notswapped=True):
- raise TypeError, \
- "Argument 'points' must be a contiguous, 2-D array of type double."
-
- (numPts, numDims) = points.shape
- cdef double* pVals
- pVals = <double*> PyCObject_AsVoidPtr(points.data)
- PointsStream_write(self.thisptr, pVals, numPts, numDims)
- return
-
-
- def _createHandle(self):
- """Wrap pointer to C++ object in PyCObject."""
- # create shim for destructor
- #embed{ void PointsStream_destructor(void* pObj)
- spatialdata::utils::PointsStream* pStream =
- (spatialdata::utils::PointsStream*) pObj;
- delete pStream;
- #}embed
- return PyCObject_FromVoidPtr(self.thisptr, PointsStream_destructor)
-
-
-# End of file
Copied: cs/spatialdata-0.1/trunk/modulesrc/utils/utils.pyxe.src (from rev 5948, cs/spatialdata-0.1/trunk/modulesrc/utils/utils.pyxe)
More information about the cig-commits
mailing list