Changeset: da346ec77865 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=da346ec77865
Modified Files:
geom/monetdb5/geom.c
geom/monetdb5/geom.h
geom/monetdb5/geom.mal
geom/monetdb5/geomBulk.c
Branch: geo
Log Message:
Fix interfaces so that MAL and C agree.
diffs (truncated from 527 to 300 lines):
diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -988,7 +988,7 @@ static str segmentizeGeometry(GEOSGeomet
return MAL_SUCCEED;
}
-str wkbSegmentize(wkb** outWKB, wkb** geomWKB, double *sz) {
+str wkbSegmentize(wkb** outWKB, wkb** geomWKB, dbl *sz) {
GEOSGeometry* outGeometry;
GEOSGeom geosGeometry;
str err;
@@ -1278,7 +1278,7 @@ static str translateGeometry(GEOSGeometr
-str wkbTranslate(wkb** outWKB, wkb** geomWKB, double* dx, double* dy, double*
dz) {
+str wkbTranslate(wkb** outWKB, wkb** geomWKB, dbl* dx, dbl* dy, dbl* dz) {
GEOSGeometry* outGeometry;
GEOSGeom geosGeometry;
str err;
@@ -1316,7 +1316,7 @@ str wkbTranslate(wkb** outWKB, wkb** geo
//It creates a Delaunay triangulation
//flag = 0 => returns a collection of polygons
//flag = 1 => returns a multilinestring
-str wkbDelaunayTriangles(wkb** outWKB, wkb** geomWKB, double* tolerance, int*
flag){
+str wkbDelaunayTriangles(wkb** outWKB, wkb** geomWKB, dbl* tolerance, int*
flag){
GEOSGeometry* outGeometry;
GEOSGeom geosGeometry;
@@ -1477,7 +1477,7 @@ static str dumpGeometriesGeometry(BAT* i
return MAL_SUCCEED;
}
-str wkbDump(int* idBAT_id, int* geomBAT_id, wkb** geomWKB) {
+str wkbDump(bat* idBAT_id, bat* geomBAT_id, wkb** geomWKB) {
BAT *idBAT = NULL, *geomBAT = NULL;
GEOSGeom geosGeometry;
unsigned int geometriesNum;
@@ -1743,7 +1743,7 @@ static str dumpPointsGeometry(BAT* idBAT
return MAL_SUCCEED;
}
-str wkbDumpPoints(int* idBAT_id, int* geomBAT_id, wkb** geomWKB) {
+str wkbDumpPoints(bat* idBAT_id, bat* geomBAT_id, wkb** geomWKB) {
BAT *idBAT = NULL, *geomBAT = NULL;
GEOSGeom geosGeometry;
int check =0;
@@ -1839,36 +1839,44 @@ str geom_2_geom(wkb** resWKB, wkb **valu
}
/*check if the geometry has z coordinate*/
-void geoHasZ(int* res, int* info) {
+str geoHasZ(int* res, int* info) {
if(geometryHasZ(*info)) *res=1;
else *res=0;
+ return MAL_SUCCEED;
}
/*check if the geometry has m coordinate*/
-void geoHasM(int* res, int* info) {
+str geoHasM(int* res, int* info) {
if(geometryHasM(*info)) *res=1;
else *res=0;
+ return MAL_SUCCEED;
}
/*check the geometry subtype*/
/*returns the length of the resulting string*/
-void geoGetType(char** res, int* info, int* flag) {
+str geoGetType(char** res, int* info, int* flag) {
int type = (*info >> 2);
const char* typeStr=geom_type2str(type, *flag) ;
*res=GDKmalloc(strlen(typeStr));
+ if (*res == NULL)
+ throw(MAL, "geo.getType", MAL_MALLOC_FAIL);
strcpy(*res, typeStr);
+ return MAL_SUCCEED;
}
/* initialise geos */
-bat *geom_prelude(void) {
+str geom_prelude(void *ret) {
+ (void) ret;
libgeom_init();
TYPE_mbr = malAtomSize(sizeof(mbr), sizeof(oid), "mbr");
- return NULL;
+ return MAL_SUCCEED;
}
/* clean geos */
-void geom_epilogue(void) {
+str geom_epilogue(void *ret) {
+ (void) ret;
libgeom_exit();
+ return MAL_SUCCEED;
}
/* Check if fixed-sized atom mbr is null */
@@ -2432,7 +2440,7 @@ str wkbMLineStringToPolygon(wkb** geomWK
return MAL_SUCCEED;
}
-str wkbMakePoint(wkb** out, double *x, double *y, double *z, double *m, int
*zmFlag) {
+str wkbMakePoint(wkb** out, dbl *x, dbl *y, dbl *z, dbl *m, int *zmFlag) {
GEOSGeom geosGeometry = NULL;
GEOSCoordSequence *seq = NULL;
@@ -2562,7 +2570,7 @@ str wkbSetSRID(wkb** resultGeomWKB, wkb
}
/* depending on the specific function it returns the X,Y or Z coordinate of a
point */
-str wkbGetCoordinate(double *out, wkb **geom, int *dimNum) {
+str wkbGetCoordinate(dbl *out, wkb **geom, int *dimNum) {
GEOSGeom geosGeometry = wkb2geos(*geom);
const GEOSCoordSequence* gcs;
@@ -2628,7 +2636,7 @@ str wkbEnvelope(wkb **out, wkb **geom) {
return wkbBasic(out, geom, GEOSEnvelope, "geom.Envelope");
}
-str wkbEnvelopeFromCoordinates(wkb** out, double* xmin, double* ymin, double*
xmax, double* ymax, int* srid) {
+str wkbEnvelopeFromCoordinates(wkb** out, dbl* xmin, dbl* ymin, dbl* xmax,
dbl* ymax, int* srid) {
GEOSGeom geosGeometry, linearRingGeometry;
//create the coordinates sequence
@@ -2664,7 +2672,7 @@ str wkbEnvelopeFromCoordinates(wkb** out
return MAL_SUCCEED;
}
-str wkbMakePolygon(wkb** out, wkb** external, int* internalBAT_id, int* srid) {
+str wkbMakePolygon(wkb** out, wkb** external, bat* internalBAT_id, int* srid) {
GEOSGeom geosGeometry, externalGeometry, linearRingGeometry;
bit closed = 0;
GEOSCoordSeq coordSeq_copy;
@@ -2858,7 +2866,7 @@ str wkbMakeLine(wkb** out, wkb** geom1WK
}
//Gets a BAT with geometries and returns a single LineString
-str wkbMakeLineAggr(wkb** outWKB, int* inBAT_id) {
+str wkbMakeLineAggr(wkb** outWKB, bat* inBAT_id) {
BAT *inBAT = NULL;
BATiter inBAT_iter;
BUN i;
@@ -3179,7 +3187,7 @@ str wkbExteriorRing(wkb **exteriorRingWK
}
/* Returns the n-th interior ring of a polygon */
-str wkbInteriorRingN(wkb **interiorRingWKB, wkb **geom, short* ringNum) {
+str wkbInteriorRingN(wkb **interiorRingWKB, wkb **geom, int* ringNum) {
GEOSGeom geosGeometry = NULL;
const GEOSGeometry* interiorRingGeometry;
int rN = -1;
@@ -3752,7 +3760,7 @@ str wkbUnion(wkb **out, wkb **a, wkb **b
}
//Gets a BAT with geometries and returns a single LineString
-str wkbUnionAggr(wkb** outWKB, int* inBAT_id) {
+str wkbUnionAggr(wkb** outWKB, bat* inBAT_id) {
BAT *inBAT = NULL;
BATiter inBAT_iter;
BUN i;
@@ -4082,7 +4090,7 @@ str wkbCoveredBy(bit *out, wkb **geomWKB
return MAL_SUCCEED;
}
-str wkbDWithin(bit* out, wkb** geomWKB_a, wkb** geomWKB_b, double* distance) {
+str wkbDWithin(bit* out, wkb** geomWKB_a, wkb** geomWKB_b, dbl* distance) {
double distanceComputed;
str err;
@@ -4635,7 +4643,7 @@ str mbrEqual_wkb(bit *out, wkb **geom1WK
}
/* returns the Euclidean distance of the centroids of the boxes */
-str mbrDistance(double *out, mbr **b1, mbr **b2) {
+str mbrDistance(dbl *out, mbr **b1, mbr **b2) {
double b1_Cx = 0.0, b1_Cy = 0.0, b2_Cx =0.0, b2_Cy=0.0;
if (mbr_isnil(*b1) || mbr_isnil(*b2)) {
@@ -4656,7 +4664,7 @@ str mbrDistance(double *out, mbr **b1, m
}
/*returns the Euclidean distance of the centroids of the mbrs of the two
geometries */
-str mbrDistance_wkb(double *out, wkb **geom1WKB, wkb **geom2WKB) {
+str mbrDistance_wkb(dbl *out, wkb **geom1WKB, wkb **geom2WKB) {
mbr *geom1MBR = NULL, *geom2MBR = NULL;
str ret = MAL_SUCCEED;
diff --git a/geom/monetdb5/geom.h b/geom/monetdb5/geom.h
--- a/geom/monetdb5/geom.h
+++ b/geom/monetdb5/geom.h
@@ -48,12 +48,12 @@
/* general functions */
-geom_export void geoHasZ(int* res, int* info);
-geom_export void geoHasM(int* res, int* info);
-geom_export void geoGetType(char** res, int* info, int* flag);
+geom_export str geoHasZ(int* res, int* info);
+geom_export str geoHasM(int* res, int* info);
+geom_export str geoGetType(char** res, int* info, int* flag);
-geom_export bat *geom_prelude(void);
-geom_export void geom_epilogue(void);
+geom_export str geom_prelude(void *ret);
+geom_export str geom_epilogue(void *ret);
/* the len argument is needed for correct storage and retrieval */
geom_export size_t wkbTOSTR(char **geomWKT, size_t *len, wkb *geomWKB);
@@ -103,7 +103,7 @@ geom_export str wkbIsnil(bit *r, wkb **v
/* functions that are used when a column is added to an existing table */
geom_export str mbrFromMBR(mbr **w, mbr **src);
geom_export str wkbFromWKB(wkb **w, wkb **src);
-//Is it needed?? geom_export str wkbFromWKB_bat(int* outBAT_id, int* inBAT_id);
+//Is it needed?? geom_export str wkbFromWKB_bat(bat* outBAT_id, bat* inBAT_id);
/* The WKB we use is the EWKB used also in PostGIS
* because we decided that it is easire to carry around
@@ -160,20 +160,20 @@ geom_export str wkbOverlaps(bit*, wkb**,
geom_export str wkbRelate(bit*, wkb**, wkb**, str*);
geom_export str wkbCovers(bit *out, wkb **geomWKB_a, wkb **geomWKB_b);
geom_export str wkbCoveredBy(bit *out, wkb **geomWKB_a, wkb **geomWKB_b);
-geom_export str wkbDWithin(bit*, wkb**, wkb**, double*);
+geom_export str wkbDWithin(bit*, wkb**, wkb**, dbl*);
//LocateAlong
//LocateBetween
//geom_export str wkbFromString(wkb**, str*);
-geom_export str wkbMakePoint(wkb**, double*, double*, double*, double*, int*);
+geom_export str wkbMakePoint(wkb**, dbl*, dbl*, dbl*, dbl*, int*);
geom_export str wkbMakePoint_bat(bat*, bat*, bat*, bat*, bat*, int*);
geom_export str wkbCoordDim(int* , wkb**);
geom_export str wkbSetSRID(wkb**, wkb**, int*);
-geom_export str wkbGetCoordinate(double *out, wkb **geom, int *dimNum);
+geom_export str wkbGetCoordinate(dbl *out, wkb **geom, int *dimNum);
geom_export str wkbGetCoordinate_bat(bat *outBAT_id, bat *inBAT_id, int* flag);
geom_export str wkbStartPoint(wkb **out, wkb **geom);
@@ -184,12 +184,12 @@ geom_export str wkbNumPoints_bat(bat *ou
geom_export str wkbPointN(wkb **out, wkb **geom, int *n);
geom_export str wkbEnvelope(wkb **out, wkb **geom);
-geom_export str wkbEnvelopeFromCoordinates(wkb** out, double* xmin, double*
ymin, double* xmax, double* ymax, int* srid);
-geom_export str wkbMakePolygon(wkb** out, wkb** external, int* internalBAT_id,
int* srid);
+geom_export str wkbEnvelopeFromCoordinates(wkb** out, dbl* xmin, dbl* ymin,
dbl* xmax, dbl* ymax, int* srid);
+geom_export str wkbMakePolygon(wkb** out, wkb** external, bat* internalBAT_id,
int* srid);
geom_export str wkbMakeLine(wkb**, wkb**, wkb**);
-geom_export str wkbMakeLineAggr(wkb** outWKB, int* inBAT_id);
+geom_export str wkbMakeLineAggr(wkb** outWKB, bat* inBAT_id);
geom_export str wkbExteriorRing(wkb**, wkb**);
-geom_export str wkbInteriorRingN(wkb**, wkb**, short*);
+geom_export str wkbInteriorRingN(wkb**, wkb**, int*);
geom_export str wkbNumRings(int*, wkb**, int*);
geom_export str wkbNumRings_bat(bat *outBAT_id, bat *inBAT_id, int* flag);
@@ -215,7 +215,7 @@ geom_export str wkbLength(dbl *out, wkb
geom_export str wkbConvexHull(wkb **out, wkb **geom);
geom_export str wkbIntersection(wkb **out, wkb **a, wkb **b);
geom_export str wkbUnion(wkb **out, wkb **a, wkb **b);
-geom_export str wkbUnionAggr(wkb** outWKB, int* inBAT_id);
+geom_export str wkbUnionAggr(wkb** outWKB, bat* inBAT_id);
geom_export str wkbDifference(wkb **out, wkb **a, wkb **b);
geom_export str wkbSymDifference(wkb **out, wkb **a, wkb **b);
geom_export str wkbBuffer(wkb **out, wkb **geom, dbl *distance);
@@ -227,21 +227,21 @@ geom_export str wkbNumGeometries(int* ou
geom_export str wkbNumGeometries_bat(bat *outBAT_id, bat *inBAT_id);
geom_export str wkbTransform(wkb**, wkb**, int*, int*, char**, char**);
-geom_export str wkbTranslate(wkb**, wkb**, double*, double*, double*);
-geom_export str wkbDelaunayTriangles(wkb**, wkb**, double*, int*);
+geom_export str wkbTranslate(wkb**, wkb**, dbl*, dbl*, dbl*);
+geom_export str wkbDelaunayTriangles(wkb**, wkb**, dbl*, int*);
geom_export str wkbPointOnSurface(wkb**, wkb**);
geom_export str wkbForceDim(wkb**, wkb**, int*);
-geom_export str wkbSegmentize(wkb**, wkb**, double*);
+geom_export str wkbSegmentize(wkb**, wkb**, dbl*);
-geom_export str wkbDump(int* idBAT_id, int* geomBAT_id, wkb**);
-geom_export str wkbDumpPoints(int* idBAT_id, int* geomBAT_id, wkb**);
+geom_export str wkbDump(bat* idBAT_id, bat* geomBAT_id, wkb**);
+geom_export str wkbDumpPoints(bat* idBAT_id, bat* geomBAT_id, wkb**);
geom_export str geom_2_geom(wkb** resWKB, wkb **valueWKB, int* columnType,
int* columnSRID);
geom_export str wkbMBR(mbr **res, wkb **geom);
geom_export str wkbBox2D(mbr** box, wkb** point1, wkb** point2);
-geom_export str wkbBox2D_bat(int* outBAT_id, bat *aBAT_id, bat *bBAT_id);
+geom_export str wkbBox2D_bat(bat* outBAT_id, bat *aBAT_id, bat *bBAT_id);
geom_export str mbrOverlaps(bit *out, mbr **b1, mbr **b2);
geom_export str mbrOverlaps_wkb(bit *out, wkb **geom1WKB, wkb **geom2WKB);
@@ -267,8 +267,8 @@ geom_export str mbrContained(bit *out, m
geom_export str mbrContained_wkb(bit *out, wkb **geom1WKB, wkb **geom2WKB);
geom_export str mbrEqual(bit *out, mbr **b1, mbr **b2);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list