Changeset: 7baea15c592a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7baea15c592a
Added Files:
geom/monetdb5/geom.h
geom/monetdb5/geomBulk.c
geom/monetdb5/geomPoints.c
Modified Files:
geom/monetdb5/Makefile.ag
geom/monetdb5/geom.c
Branch: geo
Log Message:
Separate files for bulk and point-secific functions + header file
diffs (truncated from 3146 to 300 lines):
diff --git a/geom/monetdb5/Makefile.ag b/geom/monetdb5/Makefile.ag
--- a/geom/monetdb5/Makefile.ag
+++ b/geom/monetdb5/Makefile.ag
@@ -26,7 +26,7 @@ INCLUDES = ../lib \
lib__geom = {
MODULE
DIR = libdir/monetdb5
- SOURCES = geom.c
+ SOURCES = geom.h geom.c geomBulk.c geomPoints.c
LIBS = ../lib/libgeom \
../../gdk/libbat \
../../common/stream/libstream \
diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -18,38 +18,13 @@
*/
/*
- * @a Wouter Scherphof, Niels Nes
+ * @a Wouter Scherphof, Niels Nes, Foteini Alvanaki
* @* The simple geom module
*/
-
-#include <monetdb_config.h>
-#include "libgeom.h"
-
-
-#include <mal.h>
-#include <mal_atom.h>
-#include <mal_exception.h>
-#include <mal_client.h>
-#include <stream.h>
-
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <time.h>
-
-#ifdef WIN32
-#ifndef LIBGEOM
-#define geom_export extern __declspec(dllimport)
-#else
-#define geom_export extern __declspec(dllexport)
-#endif
-#else
-#define geom_export extern
-#endif
-
+#include "geom.h"
+
+int TYPE_mbr;
static inline int geometryHasZ(int info){return (info & 0x02);}
static inline int geometryHasM(int info){return (info & 0x01);}
@@ -57,213 +32,6 @@ const double pi=3.14159265358979323846;
/* the first argument in the functions is the return variable */
-int TYPE_mbr;
-
-/* 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 bat *geom_prelude(void);
-geom_export void geom_epilogue(void);
-
-/* the len argument is needed for correct storage and retrieval */
-geom_export int wkbTOSTR(char **geomWKT, int *len, wkb *geomWKB);
-geom_export int mbrTOSTR(char **dst, int *len, mbr *atom);
-geom_export size_t wkbaTOSTR(char **toStr, int* len, wkba *fromArray);
-
-geom_export size_t wkbFROMSTR(char* geomWKT, int *len, wkb** geomWKB, int
srid);
-geom_export size_t mbrFROMSTR(char *src, int *len, mbr **atom);
-geom_export size_t wkbaFROMSTR(char *fromStr, int* len, wkba **toArray, int
srid);
-
-geom_export wkb *wkbNULL(void);
-geom_export mbr *mbrNULL(void);
-geom_export wkba *wkbaNULL(void);
-
-geom_export BUN wkbHASH(wkb *w);
-geom_export BUN mbrHASH(mbr *atom);
-geom_export BUN wkbaHASH(wkba *w);
-
-geom_export int wkbCOMP(wkb *l, wkb *r);
-geom_export int mbrCOMP(mbr *l, mbr *r);
-geom_export int wkbaCOMP(wkba *l, wkba *r);
-
-/* read/write to/from log */
-geom_export wkb *wkbREAD(wkb *a, stream *s, size_t cnt);
-geom_export mbr *mbrREAD(mbr *a, stream *s, size_t cnt);
-geom_export wkba* wkbaREAD(wkba *a, stream *s, size_t cnt);
-
-geom_export int wkbWRITE(wkb *a, stream *s, size_t cnt);
-geom_export int mbrWRITE(mbr *c, stream *s, size_t cnt);
-geom_export int wkbaWRITE(wkba *c, stream *s, size_t cnt);
-
-geom_export var_t wkbPUT(Heap *h, var_t *bun, wkb *val);
-geom_export var_t wkbaPUT(Heap *h, var_t *bun, wkba *val);
-
-geom_export void wkbDEL(Heap *h, var_t *index);
-geom_export void wkbaDEL(Heap *h, var_t *index);
-
-geom_export int wkbLENGTH(wkb *p);
-geom_export int wkbaLENGTH(wkba *p);
-
-geom_export void wkbHEAP(Heap *heap, size_t capacity);
-geom_export void wkbaHEAP(Heap *heap, size_t capacity);
-
-//geom_export str mbrFromString(mbr **w, str *src);
-geom_export str wkbIsnil(bit *r, wkb **v);
-
-
-/* functions tha 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);
-
-/* The WKB we use is the EWKB used also in PostGIS
- * because we decided that it is easire to carry around
- * the SRID */
-
-/* gets a GEOSGeometry and creates a WKB */
-geom_export wkb* geos2wkb(const GEOSGeometry* geosGeometry);
-/* gets a GEOSGeometry and returns the mbr of it
- * works only for 2D geometries */
-geom_export mbr* mbrFromGeos(const GEOSGeom geosGeometry);
-
-
-geom_export str wkbFromText(wkb **geomWKB, str *geomWKT, int* srid, int *tpe);
-geom_export str wkbMLineStringToPolygon(wkb** geomWKB, str* geomWKT, int*
srid, int* flag);
-
-
-/* Basic Methods on Geometric objects (OGC) */
-geom_export str wkbDimension(int*, wkb**);
-geom_export str wkbGeometryType(char**, wkb**, int*);
-geom_export str wkbGetSRID(int*, wkb**);
-//Envelope
-geom_export str wkbAsText(char**, wkb**, int*);
-geom_export str wkbAsBinary(char**, wkb**);
-geom_export str wkbFromBinary(wkb**, char**);
-geom_export str wkbIsEmpty(bit*, wkb**);
-geom_export str wkbIsSimple(bit*, wkb**);
-//Is3D
-//IsMeasured
-geom_export str wkbBoundary(wkb**, wkb**);
-
-
-/* Methods for testing spatial relatioships between geometris (OGC) */
-geom_export str wkbEquals(bit*, wkb**, wkb**);
-geom_export str wkbDisjoint(bit*, wkb**, wkb**);
-geom_export str wkbIntersects(bit*, wkb**, wkb**);
-geom_export str wkbTouches(bit*, wkb**, wkb**);
-geom_export str wkbCrosses(bit*, wkb**, wkb**);
-geom_export str wkbWithin(bit*, wkb**, wkb**);
-geom_export str wkbContains(bit*, wkb**, wkb**);
-geom_export str wkbContains_bat(int* outBAT_id, bat*, bat*);
-geom_export str wkbContains_geom_bat(int* outBAT_id, wkb** geomWKB, int*
inBAT_id);
-geom_export str wkbPointsContains_geom_bat(bat* outBAT_id, wkb** geomWKB, bat*
xBAT_id, bat* yBAT_id, int* srid);
-geom_export str wkbFilteredPointsContains_geom_bat(bat* outBAT_id, wkb**
geomWKB, bat* xBAT_id, bat* yBAT_id, bat* OIDsBAT_id, int* srid);
-geom_export str wkbContains_bat_geom(int* outBAT_id, int* inBAT_id, wkb**
geomWKB);
-geom_export str wkbOverlaps(bit*, wkb**, 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 wkbFilter_bat(int* aBATfiltered_id, int* bBATfiltered_id,
int* aBAT_id, int* bBAT_id);
-geom_export str wkbFilter_geom_bat(int* BATfiltered_id, wkb** geomWKB, int*
BAToriginal_id);
-geom_export str wkbFilter_bat_geom(int* BATfiltered_id, int* BAToriginal_id,
wkb** geomWKB);
-geom_export str wkbFilterWithImprints_geom_bat(bat*, wkb**, bat*, bat*);
-//LocateAlong
-//LocateBetween
-
-//geom_export str wkbFromString(wkb**, str*);
-
-geom_export str geomMakePoint2D(wkb**, double*, double*);
-geom_export str geomMakePoint2D_bat(int* outBAT_id, int* xBAT_id, int*
yBAT_id);
-geom_export str geomMakePoint3D(wkb**, double*, double*, double*);
-geom_export str geomMakePoint3D_bat(int* outBAT_id, int* xBAT_id, int*
yBAT_id, int* zBAT_id);
-geom_export str geomMakePoint4D(wkb**, double*, double*, double*, double*);
-geom_export str geomMakePoint4D_bat(int* outBAT_id, int* xBAT_id, int*
yBAT_id, int* zBAT_id, int* mBAT_id);
-geom_export str geomMakePointM(wkb**, double*, double*, double*);
-geom_export str geomMakePointM_bat(int* outBAT_id, int* xBAT_id, int* yBAT_id,
int* mBAT_id);
-
-geom_export str wkbCoordDim(int* , wkb**);
-geom_export str wkbSetSRID(wkb**, wkb**, int*);
-geom_export str wkbSetSRID_bat(int* outBAT_id, int* inBAT_id, int* srid);
-geom_export str wkbGetCoordX(double*, wkb**);
-geom_export str wkbGetCoordY(double*, wkb**);
-geom_export str wkbGetCoordZ(double*, wkb**);
-geom_export str wkbStartPoint(wkb **out, wkb **geom);
-geom_export str wkbEndPoint(wkb **out, wkb **geom);
-geom_export str wkbNumPoints(int *out, wkb **geom);
-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 wkbExteriorRing(wkb**, wkb**);
-geom_export str wkbInteriorRingN(wkb**, wkb**, short*);
-geom_export str wkbNumRings(int*, wkb**, int*);
-geom_export str wkbInteriorRings(wkba**, wkb**);
-geom_export str wkbIsClosed(bit *out, wkb **geom);
-geom_export str wkbIsRing(bit *out, wkb **geom);
-geom_export str wkbIsValid(bit *out, wkb **geom);
-geom_export str wkbIsValidReason(char** out, wkb **geom);
-geom_export str wkbIsValidDetail(char** out, wkb **geom);
-
-geom_export str wkbArea(dbl *out, wkb **a);
-geom_export str wkbCentroid(wkb **out, wkb **geom);
-geom_export str wkbDistance(dbl *out, wkb **a, wkb **b);
-geom_export str wkbLength(dbl *out, wkb **a);
-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 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);
-
-geom_export str wkbGeometryN(wkb** out, wkb** geom, int* geometryNum);
-geom_export str wkbNumGeometries(int* out, wkb** geom);
-
-geom_export str wkbTransform(wkb**, wkb**, int*, int*, char**, char**);
-geom_export str wkbPointOnSurface(wkb**, wkb**);
-
-geom_export str geom_2_geom(wkb** resWKB, wkb **valueWKB, int* columnType,
int* columnSRID);
-geom_export str geom_2_geom_bat(int* outBAT_id, int* inBAT_id, int*
columnType, int* columnSRID);
-
-geom_export str wkbMBR(mbr **res, wkb **geom);
-geom_export str wkbMBR_bat(int* outBAT_id, int* inBAT_id);
-geom_export str wkbBox2D(mbr** box, wkb** point1, wkb** point2);
-
-geom_export str mbrOverlaps(bit *out, mbr **b1, mbr **b2);
-geom_export str mbrOverlaps_wkb(bit *out, wkb **geom1WKB, wkb **geom2WKB);
-geom_export str mbrAbove(bit *out, mbr **b1, mbr **b2);
-geom_export str mbrAbove_wkb(bit *out, wkb **geom1WKB, wkb **geom2WKB);
-geom_export str mbrBelow(bit *out, mbr **b1, mbr **b2);
-geom_export str mbrBelow_wkb(bit *out, wkb **geom1WKB, wkb **geom2WKB);
-geom_export str mbrLeft(bit *out, mbr **b1, mbr **b2);
-geom_export str mbrLeft_wkb(bit *out, wkb **geom1WKB, wkb **geom2WKB);
-geom_export str mbrRight(bit *out, mbr **b1, mbr **b2);
-geom_export str mbrRight_wkb(bit *out, wkb **geom1WKB, wkb **geom2WKB);
-geom_export str mbrOverlapOrAbove(bit *out, mbr **b1, mbr **b2);
-geom_export str mbrOverlapOrAbove_wkb(bit *out, wkb **geom1WKB, wkb
**geom2WKB);
-geom_export str mbrOverlapOrBelow(bit *out, mbr **b1, mbr **b2);
-geom_export str mbrOverlapOrBelow_wkb(bit *out, wkb **geom1WKB, wkb
**geom2WKB);
-geom_export str mbrOverlapOrLeft(bit *out, mbr **b1, mbr **b2);
-geom_export str mbrOverlapOrLeft_wkb(bit *out, wkb **geom1WKB, wkb **geom2WKB);
-geom_export str mbrOverlapOrRight(bit *out, mbr **b1, mbr **b2);
-geom_export str mbrOverlapOrRight_wkb(bit *out, wkb **geom1WKB, wkb
**geom2WKB);
-geom_export str mbrContains(bit *out, mbr **b1, mbr **b2);
-geom_export str mbrContains_wkb(bit *out, wkb **geom1WKB, wkb **geom2WKB);
-geom_export str mbrContained(bit *out, mbr **b1, mbr **b2);
-geom_export str mbrContained_wkb(bit *out, wkb **geom1WKB, wkb **geom2WKB);
-geom_export str mbrEqual(bit *out, mbr **b1, mbr **b2);
-geom_export str mbrEqual_wkb(bit *out, wkb **geom1WKB, wkb **geom2WKB);
-geom_export str mbrDistance(double *out, mbr **b1, mbr **b2);
-geom_export str mbrDistance_wkb(double *out, wkb **geom1WKB, wkb **geom2WKB);
-
-geom_export str wkbCoordinateFromWKB(dbl*, wkb**, int*);
-geom_export str wkbCoordinateFromWKB_bat(int *outBAT_id, int *inBAT_id, int*
coordinateIdx);
-
-geom_export str wkbCoordinateFromMBR(dbl*, mbr**, int*);
-geom_export str wkbCoordinateFromMBR_bat(int *outBAT_id, int *inBAT_id, int*
coordinateIdx);
-
/** convert degrees to radians */
static void degrees2radians(double *x, double *y, double *z) {
(*x) *= pi/180.0;
@@ -695,61 +463,6 @@ str geom_2_geom(wkb** resWKB, wkb **valu
return MAL_SUCCEED;
}
-str geom_2_geom_bat(int* outBAT_id, int* inBAT_id, int* columnType, int*
columnSRID) {
- BAT *outBAT = NULL, *inBAT = NULL;
- wkb *inWKB = NULL, *outWKB = NULL;
- BUN p =0, q =0;
- BATiter inBAT_iter;
-
- //get the descriptor of the BAT
- if ((inBAT = BATdescriptor(*inBAT_id)) == NULL) {
- throw(MAL, "batcalc.wkb", RUNTIME_OBJECT_MISSING);
- }
-
- if ( inBAT->htype != TYPE_void ) { //header type of BAT not void
- BBPreleaseref(inBAT->batCacheid);
- throw(MAL, "batcalc.wkb", "the arguments must have dense and
aligned heads");
- }
-
- //create a new BAT
- if ((outBAT = BATnew(TYPE_void, ATOMindex("wkb"), BATcount(inBAT),
TRANSIENT)) == NULL) {
- BBPreleaseref(inBAT->batCacheid);
- throw(MAL, "batcalc.wkb", MAL_MALLOC_FAIL);
- }
- //set the first idx of the new BAT equal to that of the input BAT
- BATseqbase(outBAT, inBAT->hseqbase);
-
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list