Changeset: 11d01d5f39ce for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=11d01d5f39ce
Modified Files:
        geom/monetdb5/geom.c
        geom/monetdb5/geom.mal
        geom/sql/40_geom.sql
Branch: geo
Log Message:

The following function created
ST_PointFromText(wkt string, srid SMALLINT)
ST_LineFromText(wkt string, srid SMALLINT)
ST_PolygonFromText(wkt string, srid SMALLINT)
ST_MPointFromText(wkt string, srid SMALLINT)
ST_MLineFromText(wkt string, srid SMALLINT)
ST_MPolyFromText(wkt string, srid SMALLINT)


diffs (truncated from 2206 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
@@ -46,107 +46,117 @@
 
 int TYPE_mbr;
 
-geom_export wkb *wkbNULL(void);
 geom_export bat *geom_prelude(void);
 geom_export void geom_epilogue(void);
+
+geom_export wkb *wkbNULL(void);
 geom_export mbr *mbrNULL(void);
-geom_export int mbrFROMSTR(char *src, int *len, mbr **atom);
-geom_export int mbrTOSTR(char **dst, int *len, mbr *atom);
-geom_export BUN mbrHASH(mbr *atom);
-geom_export int mbrCOMP(mbr *l, mbr *r);
-geom_export mbr *mbrREAD(mbr *a, stream *s, size_t cnt);
-geom_export int mbrWRITE(mbr *c, stream *s, size_t cnt);
-geom_export str mbrFromString(mbr **w, str *src);
-geom_export str mbrFromMBR(mbr **w, mbr **src);
-geom_export int wkbTOSTR(char **dst, int *len, wkb *atom);
+
 geom_export int wkbFROMSTR(char *src, int *len, wkb **atom);
-geom_export str wkbFromString(wkb **w, str *wkt);
-geom_export str wkbFromWKB(wkb **w, wkb **src);
 geom_export str wkbFromText(wkb **w, str *wkt, int *tpe);
-geom_export BUN wkbHASH(wkb *w);
-geom_export int wkbCOMP(wkb *l, wkb *r);
-geom_export wkb *wkbNULL(void);
-geom_export str wkbIsnil(bit *r, wkb **v);
-geom_export str wkbAsText(str *r, wkb **w);
-geom_export void wkbDEL(Heap *h, var_t *index);
-geom_export wkb *wkbREAD(wkb *a, stream *s, size_t cnt);
-geom_export int wkbWRITE(wkb *a, stream *s, size_t cnt);
-geom_export int wkbLENGTH(wkb *p);
-geom_export void wkbHEAP(Heap *heap, size_t capacity);
-geom_export var_t wkbPUT(Heap *h, var_t *bun, wkb *val);
-geom_export str ordinatesMBR(mbr **res, flt *minX, flt *minY, flt *maxX, flt 
*maxY);
-geom_export str wkbMBR(mbr **res, wkb **geom);
-geom_export wkb *geos2wkb(GEOSGeom geosGeometry);
-geom_export str wkbgetcoordX(double *out, wkb **geom);
-geom_export str wkbgetcoordY(double *out, wkb **geom);
-geom_export str wkbcreatepoint(wkb **out, dbl *x, dbl *y);
-geom_export str wkbcreatepoint_bat(int *out, int *x, int *y);
-geom_export str mbroverlaps(bit *out, mbr **b1, mbr **b2);
-geom_export str wkbDimension(int *out, wkb **geom);
-geom_export str wkbGeometryTypeId(int *out, wkb **geom);
-geom_export str wkbSRID(int *out, wkb **geom);
-geom_export str wkbIsEmpty(bit *out, wkb **geom);
-geom_export str wkbIsSimple(bit *out, wkb **geom);
-geom_export str wkbEnvelope(wkb **out, wkb **geom);
-geom_export str wkbBoundary(wkb **out, wkb **geom);
-geom_export str wkbConvexHull(wkb **out, wkb **geom);
-geom_export str wkbEquals(bit *out, wkb **a, wkb **b);
-geom_export str wkbDisjoint(bit *out, wkb **a, wkb **b);
-geom_export str wkbIntersect(bit *out, wkb **a, wkb **b);
-geom_export str wkbTouches(bit *out, wkb **a, wkb **b);
-geom_export str wkbCrosses(bit *out, wkb **a, wkb **b);
-geom_export str wkbWithin(bit *out, wkb **a, wkb **b);
-geom_export str wkbContains(bit *out, wkb **a, wkb **b);
-geom_export str wkbOverlaps(bit *out, wkb **a, wkb **b);
-geom_export str wkbRelate(bit *out, wkb **a, wkb **b, str *pattern);
-geom_export str wkbArea(dbl *out, wkb **a);
-geom_export str wkbLength(dbl *out, wkb **a);
-geom_export str wkbDistance(dbl *out, wkb **a, wkb **b);
-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 wkbCentroid(wkb **out, wkb **geom);
-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, short *n);
 
-bat *
-geom_prelude(void)
-{
+
+//geom_export int mbrFROMSTR(char *src, int *len, mbr **atom);
+//geom_export int mbrTOSTR(char **dst, int *len, mbr *atom);
+//geom_export BUN mbrHASH(mbr *atom);
+//geom_export int mbrCOMP(mbr *l, mbr *r);
+//geom_export mbr *mbrREAD(mbr *a, stream *s, size_t cnt);
+//geom_export int mbrWRITE(mbr *c, stream *s, size_t cnt);
+//geom_export str mbrFromString(mbr **w, str *src);
+//geom_export str mbrFromMBR(mbr **w, mbr **src);
+//geom_export int wkbTOSTR(char **dst, int *len, wkb *atom);
+//geom_export str wkbFromString(wkb **w, str *wkt);
+//geom_export str wkbFromWKB(wkb **w, wkb **src);
+///geom_export BUN wkbHASH(wkb *w);
+//geom_export int wkbCOMP(wkb *l, wkb *r);
+//geom_export str wkbIsnil(bit *r, wkb **v);
+//geom_export str wkbAsText(str *r, wkb **w);
+//geom_export void wkbDEL(Heap *h, var_t *index);
+//geom_export wkb *wkbREAD(wkb *a, stream *s, size_t cnt);
+//geom_export int wkbWRITE(wkb *a, stream *s, size_t cnt);
+//geom_export int wkbLENGTH(wkb *p);
+//geom_export void wkbHEAP(Heap *heap, size_t capacity);
+//geom_export var_t wkbPUT(Heap *h, var_t *bun, wkb *val);
+//geom_export str ordinatesMBR(mbr **res, flt *minX, flt *minY, flt *maxX, flt 
*maxY);
+//geom_export str wkbMBR(mbr **res, wkb **geom);
+//geom_export wkb *geos2wkb(GEOSGeom geosGeometry);
+//geom_export str wkbgetcoordX(double *out, wkb **geom);
+//geom_export str wkbgetcoordY(double *out, wkb **geom);
+//geom_export str wkbcreatepoint(wkb **out, dbl *x, dbl *y);
+//geom_export str wkbcreatepoint_bat(int *out, int *x, int *y);
+//geom_export str mbroverlaps(bit *out, mbr **b1, mbr **b2);
+//geom_export str wkbDimension(int *out, wkb **geom);
+//geom_export str wkbGeometryTypeId(int *out, wkb **geom);
+//geom_export str wkbSRID(int *out, wkb **geom);
+//geom_export str wkbIsEmpty(bit *out, wkb **geom);
+//geom_export str wkbIsSimple(bit *out, wkb **geom);
+//geom_export str wkbEnvelope(wkb **out, wkb **geom);
+//geom_export str wkbBoundary(wkb **out, wkb **geom);
+//geom_export str wkbConvexHull(wkb **out, wkb **geom);
+//geom_export str wkbEquals(bit *out, wkb **a, wkb **b);
+//geom_export str wkbDisjoint(bit *out, wkb **a, wkb **b);
+//geom_export str wkbIntersect(bit *out, wkb **a, wkb **b);
+//geom_export str wkbTouches(bit *out, wkb **a, wkb **b);
+//geom_export str wkbCrosses(bit *out, wkb **a, wkb **b);
+//geom_export str wkbWithin(bit *out, wkb **a, wkb **b);
+//geom_export str wkbContains(bit *out, wkb **a, wkb **b);
+//geom_export str wkbOverlaps(bit *out, wkb **a, wkb **b);
+//geom_export str wkbRelate(bit *out, wkb **a, wkb **b, str *pattern);
+//geom_export str wkbArea(dbl *out, wkb **a);
+//geom_export str wkbLength(dbl *out, wkb **a);
+//geom_export str wkbDistance(dbl *out, wkb **a, wkb **b);
+//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 wkbCentroid(wkb **out, wkb **geom);
+//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, short *n);
+
+
+/* initialise the geos library */
+bat* geom_prelude(void) {
        libgeom_init();
        TYPE_mbr = malAtomSize(sizeof(mbr), sizeof(oid), "mbr");
        return NULL;
 }
 
-void
-geom_epilogue(void)
-{
+/* close the geos library */
+void geom_epilogue(void) {
        libgeom_exit();
 }
 
 /*
  * Implementation of fixed-sized atom mbr.
  */
-static int
-mbr_isnil(mbr *m)
+/* check if given mbr is null 
+ * it is null if any of its coordinates is null */
+//static int mbr_isnil(mbr *m) {
+//     if (!m || m->xmin == flt_nil || m->ymin == flt_nil ||
+//         m->xmax == flt_nil || m->ymax == flt_nil)
+//             return 1;
+//     return 0;
+//}
+
+/*
+ * Implementation of variable-sized atom wkb.
+ */
+static var_t wkb_size(size_t len)
 {
-       if (!m || m->xmin == flt_nil || m->ymin == flt_nil ||
-           m->xmax == flt_nil || m->ymax == flt_nil)
-               return 1;
-       return 0;
+       if (len == ~(size_t) 0)
+               len = 0;
+       assert(sizeof(wkb) - 1 + len <= VAR_MAX);
+       return (var_t) (sizeof(wkb) - 1 + len);
 }
 
 /* NULL: generic nil mbr. */
 /* returns a pointer to a nil-mbr. */
-
-mbr *
-mbrNULL(void)
-{
+mbr* mbrNULL(void) {
        static mbr mbrNIL;
        mbrNIL.xmin = flt_nil;
        mbrNIL.ymin = flt_nil;
@@ -155,228 +165,18 @@ mbrNULL(void)
        return (&mbrNIL);
 }
 
-/* FROMSTR: parse string to mbr. */
-/* return number of parsed characters. */
+/* returns pointer to a null wkb */
+wkb* wkbNULL(void) {
+       static wkb nullval;
 
-int
-mbrFROMSTR(char *src, int *len, mbr **atom)
-{
-       int nil = 0;
-       int nchars = 0; /* The number of characters parsed; the return value. */
-       GEOSGeom geosMbr = NULL; /* The geometry object that is parsed from the 
src string. */
-
-       if (strcmp(src, str_nil) == 0)
-               nil = 1;
-
-       if (!nil && (geosMbr = GEOSGeomFromWKT(src)) == NULL)
-               return 0;
-
-       if (*len < (int) sizeof(mbr)) {
-               if (*atom)
-                       GDKfree(*atom);
-               *atom = GDKmalloc(*len = sizeof(mbr));
-       }
-       if (nil) {
-               nchars = 3;
-               **atom = *mbrNULL();
-       } else if (getMbrGeos(*atom, geosMbr)) {
-               size_t l = strlen(src);
-               assert(l <= GDK_int_max);
-               nchars = (int) l;
-       }
-       if (geosMbr)
-               GEOSGeom_destroy(geosMbr);
-       return nchars;
+       nullval.len = ~(int) 0;
+       return (&nullval);
 }
 
-#define MBR_WKTLEN 256
-
-/* TOSTR: print atom in a string. */
-/* return length of resulting string. */
-
-int
-mbrTOSTR(char **dst, int *len, mbr *atom)
-{
-       static char tempWkt[MBR_WKTLEN];
-       size_t dstStrLen = 3;
-
-       if (!mbr_isnil(atom)) {
-               snprintf(tempWkt, MBR_WKTLEN, "BOX (%f %f, %f %f)",
-                        atom->xmin, atom->ymin, atom->xmax, atom->ymax);
-               dstStrLen = strlen(tempWkt) + 2;
-               assert(dstStrLen < GDK_int_max);
-       }
-
-       if (*len < (int) dstStrLen + 1) {
-               if (*dst)
-                       GDKfree(*dst);
-               *dst = GDKmalloc(*len = (int) dstStrLen + 1);
-       }
-
-       if (dstStrLen > 3)
-               snprintf(*dst, *len, "\"%s\"", tempWkt);
-       else
-               strcpy(*dst, "nil");
-       return (int) dstStrLen;
-}
-
-/* HASH: compute a hash value. */
-/* returns a positive integer hash value */
-
-BUN
-mbrHASH(mbr *atom)
-{
-       return (BUN) (((int) atom->xmin * (int)atom->ymin) *((int) atom->xmax * 
(int)atom->ymax));
-}
-
-/* COMP: compare two mbrs. */
-/* returns int <0 if l<r, 0 if l==r, >0 else */
-
-int
-mbrCOMP(mbr *l, mbr *r)
-{
-       /* simple lexicographical ordering on (x,y) */
-       int res;
-       if (l->xmin == r->xmin)
-               res = (l->ymin < r->ymin) ? -1 : (l->ymin == r->ymin) ? 0 : 1;
-       else
-               res = (l->xmin < r->xmin) ? -1 : 1;
-       if (res == 0) {
-               if (l->xmax == r->xmax)
-                       res = (l->ymax < r->ymax) ? -1 : (l->ymax == r->ymax) ? 
0 : 1;
-               else
-                       res = (l->xmax < r->xmax) ? -1 : 1;
-       }
-       return res;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to