Changeset: 4a3f3dc183d7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4a3f3dc183d7
Modified Files:
        geom/monetdb5/geom.c
        geom/monetdb5/geom.h
        geom/monetdb5/gpu.c
        geom/monetdb5/gpu.h
Branch: sfcgal
Log Message:

Have a different getVertex for contains and gcontains


diffs (truncated from 476 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
@@ -7806,14 +7806,14 @@ pnpoly_(bit *out, int nvert, dbl *vx, db
 
 /*TODO: better conversion from WKB*/
 /*TODO: Check if the allocations are working*/
-str
-getVerts(wkb *geom, vertexWKB **res)
+static str
+getVerts(wkb *geom, vertexWKBD **res)
 {
        str err = NULL;
        str geom_str = NULL, str_pt = NULL;
        char *str2, *token, *subtoken;
        char *saveptr1 = NULL, *saveptr2 = NULL;
-    vertexWKB *verts = NULL;
+    vertexWKBD *verts = NULL;
 
     /*Check if it is a Polygon*/
 
@@ -7822,7 +7822,7 @@ getVerts(wkb *geom, vertexWKB **res)
        }
 
     str_pt = geom_str;
-    if ( (verts = (vertexWKB*) GDKzalloc(sizeof(vertexWKB))) == NULL) {
+    if ( (verts = (vertexWKBD*) GDKzalloc(sizeof(vertexWKBD))) == NULL) {
         throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
     }
 
@@ -7831,11 +7831,11 @@ getVerts(wkb *geom, vertexWKB **res)
 
        /*Lets get the polygon */
        token = strtok_r(geom_str, ")", &saveptr1);
-    if ( (verts->vert_x = GDKmalloc(POLY_NUM_VERT * sizeof(float))) == NULL) {
+    if ( (verts->vert_x = GDKmalloc(POLY_NUM_VERT * sizeof(double))) == NULL) {
         GDKfree(verts);
         throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
     }
-       if ( (verts->vert_y = GDKmalloc(POLY_NUM_VERT * sizeof(float))) == 
NULL) {
+       if ( (verts->vert_y = GDKmalloc(POLY_NUM_VERT * sizeof(double))) == 
NULL) {
         GDKfree(verts->vert_x);
         GDKfree(verts);
         throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
@@ -7845,17 +7845,16 @@ getVerts(wkb *geom, vertexWKB **res)
                subtoken = strtok_r(str2, ",", &saveptr2);
                if (subtoken == NULL)
                        break;
-               //sscanf(subtoken, "%lf %lf", &(verts->vert_x[verts->nvert]), 
&(verts->vert_y[verts->nvert]));
-               sscanf(subtoken, "%f %f", &(verts->vert_x[verts->nvert]), 
&(verts->vert_y[verts->nvert]));
+               sscanf(subtoken, "%lf %lf", &(verts->vert_x[verts->nvert]), 
&(verts->vert_y[verts->nvert]));
                verts->nvert++;
                if ((verts->nvert % POLY_NUM_VERT) == 0) {
-                       if ( (verts->vert_x = GDKrealloc(verts->vert_x, 
verts->nvert * 2 * sizeof(float))) == NULL) {
+                       if ( (verts->vert_x = GDKrealloc(verts->vert_x, 
verts->nvert * 2 * sizeof(double))) == NULL) {
                 GDKfree(verts->vert_x);
                 GDKfree(verts->vert_y);
                 GDKfree(verts);
                 throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
             }
-                       if ( (verts->vert_y = GDKrealloc(verts->vert_y, 
verts->nvert * 2 * sizeof(float))) == NULL) {
+                       if ( (verts->vert_y = GDKrealloc(verts->vert_y, 
verts->nvert * 2 * sizeof(double))) == NULL) {
                 GDKfree(verts->vert_x);
                 GDKfree(verts->vert_y);
                 GDKfree(verts);
@@ -7866,13 +7865,13 @@ getVerts(wkb *geom, vertexWKB **res)
 
        token = strtok_r(NULL, ")", &saveptr1);
        if (token) {
-               if ( (verts->holes_x = GDKzalloc(POLY_NUM_HOLE * sizeof(float 
*))) == NULL) {
+               if ( (verts->holes_x = GDKzalloc(POLY_NUM_HOLE * sizeof(double 
*))) == NULL) {
             GDKfree(verts->vert_x);
             GDKfree(verts->vert_y);
             GDKfree(verts);
             throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
         }
-               if ( (verts->holes_y = GDKzalloc(POLY_NUM_HOLE * sizeof(float 
*))) == NULL) {
+               if ( (verts->holes_y = GDKzalloc(POLY_NUM_HOLE * sizeof(double 
*))) == NULL) {
             GDKfree(verts->holes_x);
             GDKfree(verts->vert_x);
             GDKfree(verts->vert_y);
@@ -7897,7 +7896,7 @@ getVerts(wkb *geom, vertexWKB **res)
                token++;
 
                if (!verts->holes_x[verts->nholes])
-                       if ( (verts->holes_x[verts->nholes] = 
GDKzalloc(POLY_NUM_VERT * sizeof(float))) == NULL) {
+                       if ( (verts->holes_x[verts->nholes] = 
GDKzalloc(POLY_NUM_VERT * sizeof(double))) == NULL) {
                 GDKfree(verts->holes_x);
                 GDKfree(verts->holes_y);
                 GDKfree(verts->holes_n);
@@ -7907,7 +7906,7 @@ getVerts(wkb *geom, vertexWKB **res)
                 throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
             }
                if (!verts->holes_y[verts->nholes])
-                       if ( (verts->holes_y[verts->nholes] = 
GDKzalloc(POLY_NUM_VERT * sizeof(float))) == NULL) {
+                       if ( (verts->holes_y[verts->nholes] = 
GDKzalloc(POLY_NUM_VERT * sizeof(double))) == NULL) {
                 GDKfree(verts->holes_x[verts->nholes]);
                 GDKfree(verts->holes_x);
                 GDKfree(verts->holes_y);
@@ -7922,11 +7921,10 @@ getVerts(wkb *geom, vertexWKB **res)
                        subtoken = strtok_r(str2, ",", &saveptr2);
                        if (subtoken == NULL)
                                break;
-                       //sscanf(subtoken, "%lf %lf", 
&(verts->holes_x[verts->nholes][nhole]), 
&(verts->holes_y[verts->nholes][nhole]));
-                       sscanf(subtoken, "%f %f", 
&(verts->holes_x[verts->nholes][nhole]), 
&(verts->holes_y[verts->nholes][nhole]));
+                       sscanf(subtoken, "%lf %lf", 
&(verts->holes_x[verts->nholes][nhole]), 
&(verts->holes_y[verts->nholes][nhole]));
                        nhole++;
                        if ((nhole % POLY_NUM_VERT) == 0) {
-                if ( (verts->holes_x[verts->nholes] = 
GDKrealloc(verts->holes_x[verts->nholes], nhole * 2 * sizeof(float))) == NULL) {
+                if ( (verts->holes_x[verts->nholes] = 
GDKrealloc(verts->holes_x[verts->nholes], nhole * 2 * sizeof(double))) == NULL) 
{
                     GDKfree(verts->holes_x[verts->nholes]);
                     GDKfree(verts->holes_y[verts->nholes]);
                     GDKfree(verts->holes_x);
@@ -7937,7 +7935,7 @@ getVerts(wkb *geom, vertexWKB **res)
                     GDKfree(verts);
                     throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
                 }
-                if ( (verts->holes_y[verts->nholes] = 
GDKrealloc(verts->holes_y[verts->nholes], nhole * 2 * sizeof(float))) == NULL) {
+                if ( (verts->holes_y[verts->nholes] = 
GDKrealloc(verts->holes_y[verts->nholes], nhole * 2 * sizeof(double))) == NULL) 
{
                     GDKfree(verts->holes_x[verts->nholes]);
                     GDKfree(verts->holes_y[verts->nholes]);
                     GDKfree(verts->holes_x);
@@ -7954,7 +7952,7 @@ getVerts(wkb *geom, vertexWKB **res)
                verts->holes_n[verts->nholes] = nhole;
         verts->nholes++;
         if ((verts->nholes % POLY_NUM_HOLE) == 0) {
-            if ( (verts->holes_x = GDKrealloc(verts->holes_x, verts->nholes * 
2 * sizeof(float *))) == NULL) {
+            if ( (verts->holes_x = GDKrealloc(verts->holes_x, verts->nholes * 
2 * sizeof(double *))) == NULL) {
                 GDKfree(verts->holes_x[verts->nholes]);
                 GDKfree(verts->holes_y[verts->nholes]);
                 GDKfree(verts->holes_x);
@@ -7965,7 +7963,7 @@ getVerts(wkb *geom, vertexWKB **res)
                 GDKfree(verts);
                 throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
             }
-            if ( (verts->holes_y = GDKrealloc(verts->holes_y, verts->nholes * 
2 * sizeof(float *))) == NULL) {
+            if ( (verts->holes_y = GDKrealloc(verts->holes_y, verts->nholes * 
2 * sizeof(double *))) == NULL) {
                 GDKfree(verts->holes_x[verts->nholes]);
                 GDKfree(verts->holes_y[verts->nholes]);
                 GDKfree(verts->holes_x);
@@ -7998,8 +7996,8 @@ getVerts(wkb *geom, vertexWKB **res)
     return MAL_SUCCEED;
 }
 
-void
-freeVerts(vertexWKB *verts)
+static void
+freeVerts(vertexWKBD *verts)
 {
     int j = 0;
 
@@ -8021,7 +8019,7 @@ freeVerts(vertexWKB *verts)
 str
 wkbContains_point_bat(bat *out, wkb **a, bat *point_x, bat *point_y)
 {
-    vertexWKB *verts = NULL;
+    vertexWKBD *verts = NULL;
        wkb *geom = NULL;
        str msg = NULL;
 
@@ -8041,7 +8039,7 @@ wkbContains_point_bat(bat *out, wkb **a,
 str
 wkbContainsXYZ(bit *out, wkb **a, dbl *px, dbl *py, dbl *pz, int *srid)
 {
-    vertexWKB *verts = NULL;
+    vertexWKBD *verts = NULL;
        wkb *geom = NULL;
        str msg = NULL;
        (void) pz;
@@ -11124,7 +11122,7 @@ ContainsXYZsubjoin_intern(bat *lres, bat
     BATloop(bl, pl, ql) {
         str err = NULL;
         wkb *lWKB = NULL;
-        vertexWKB *verts = NULL;
+        vertexWKBD *verts = NULL;
         GEOSGeom lGeometry = NULL;
         ro = bx->hseqbase;
 
diff --git a/geom/monetdb5/geom.h b/geom/monetdb5/geom.h
--- a/geom/monetdb5/geom.h
+++ b/geom/monetdb5/geom.h
@@ -39,8 +39,8 @@
 #endif
 
 #define OPENCL_DYNAMIC 1
-#define OPENCL_THREADS 8
-#define OPENMP  1
+#define OPENCL_THREADS 16
+#define OPENMP 1
 
 #ifdef OPENMP
 #include <omp.h>
@@ -184,15 +184,13 @@ geom_export str wkbDWithinXYZ_bat(bat *o
 typedef struct {
        int nvert;
     int nholes;
-       float *vert_x;
-    float *vert_y;
-    float **holes_x;
-    float **holes_y;
+       double *vert_x;
+    double *vert_y;
+    double **holes_x;
+    double **holes_y;
     int *holes_n;
-} vertexWKB;
+} vertexWKBD;
 
-geom_export str getVerts(wkb *geom, vertexWKB **res);
-geom_export void freeVerts(vertexWKB *verts);
 //LocateAlong
 //LocateBetween
 
diff --git a/geom/monetdb5/gpu.c b/geom/monetdb5/gpu.c
--- a/geom/monetdb5/gpu.c
+++ b/geom/monetdb5/gpu.c
@@ -13,6 +13,221 @@
 
 #include "gpu.h"
 #define GEOMBULK_DEBUG
+
+/*TODO: better conversion from WKB*/
+/*TODO: Check if the allocations are working*/
+static str
+getVerts(wkb *geom, vertexWKBF **res)
+{
+       str err = NULL;
+       str geom_str = NULL, str_pt = NULL;
+       char *str2, *token, *subtoken;
+       char *saveptr1 = NULL, *saveptr2 = NULL;
+    vertexWKBF *verts = NULL;
+
+    /*Check if it is a Polygon*/
+
+       if ((err = wkbAsText(&geom_str, &geom, NULL)) != MAL_SUCCEED) {
+               return err;
+       }
+
+    str_pt = geom_str;
+    if ( (verts = (vertexWKBF*) GDKzalloc(sizeof(vertexWKBF))) == NULL) {
+        throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
+    }
+
+       geom_str = strchr(geom_str, '(');
+       geom_str += 2;
+
+       /*Lets get the polygon */
+       token = strtok_r(geom_str, ")", &saveptr1);
+    if ( (verts->vert_x = GDKmalloc(POLY_NUM_VERT * sizeof(float))) == NULL) {
+        GDKfree(verts);
+        throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
+    }
+       if ( (verts->vert_y = GDKmalloc(POLY_NUM_VERT * sizeof(float))) == 
NULL) {
+        GDKfree(verts->vert_x);
+        GDKfree(verts);
+        throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
+    }
+
+       for (str2 = token;; str2 = NULL) {
+               subtoken = strtok_r(str2, ",", &saveptr2);
+               if (subtoken == NULL)
+                       break;
+               //sscanf(subtoken, "%lf %lf", &(verts->vert_x[verts->nvert]), 
&(verts->vert_y[verts->nvert]));
+               sscanf(subtoken, "%f %f", &(verts->vert_x[verts->nvert]), 
&(verts->vert_y[verts->nvert]));
+               verts->nvert++;
+               if ((verts->nvert % POLY_NUM_VERT) == 0) {
+                       if ( (verts->vert_x = GDKrealloc(verts->vert_x, 
verts->nvert * 2 * sizeof(float))) == NULL) {
+                GDKfree(verts->vert_x);
+                GDKfree(verts->vert_y);
+                GDKfree(verts);
+                throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
+            }
+                       if ( (verts->vert_y = GDKrealloc(verts->vert_y, 
verts->nvert * 2 * sizeof(float))) == NULL) {
+                GDKfree(verts->vert_x);
+                GDKfree(verts->vert_y);
+                GDKfree(verts);
+                throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
+            }
+               }
+       }
+
+       token = strtok_r(NULL, ")", &saveptr1);
+       if (token) {
+               if ( (verts->holes_x = GDKzalloc(POLY_NUM_HOLE * sizeof(float 
*))) == NULL) {
+            GDKfree(verts->vert_x);
+            GDKfree(verts->vert_y);
+            GDKfree(verts);
+            throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
+        }
+               if ( (verts->holes_y = GDKzalloc(POLY_NUM_HOLE * sizeof(float 
*))) == NULL) {
+            GDKfree(verts->holes_x);
+            GDKfree(verts->vert_x);
+            GDKfree(verts->vert_y);
+            GDKfree(verts);
+            throw(MAL, "geom.getVerts", MAL_MALLOC_FAIL);
+        }
+               if ( (verts->holes_n = GDKzalloc(POLY_NUM_HOLE * sizeof(int 
*))) == NULL) {
+            GDKfree(verts->holes_x);
+            GDKfree(verts->holes_y);
+            GDKfree(verts->vert_x);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to