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

incorrectly checked int


diffs (truncated from 345 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
@@ -81,10 +81,6 @@ geom_export str wkbgetcoordX(dbl *out, w
 geom_export str wkbgetcoordY(dbl *out, wkb **geom);
 geom_export str wkbcreatepoint(wkb **out, const dbl *x, const dbl *y);
 geom_export str wkbcreatepoint_bat(bat *out, const bat *x, const bat *y);
-geom_export str pnpoly_(int *out, int nvert, dbl *vx, dbl *vy, int *point_x, 
int *point_y);
-geom_export double isLeft( double P0x, double P0y, double P1x, double P1y, 
double P2x, double P2y);
-geom_export str pnpolyWithHoles_(int *out, int nvert, dbl *vx, dbl *vy, int 
nholes, dbl **hx, dbl **hy, int *hn, int *point_x, int *point_y);
-geom_export str wkbContains_bat(int *out, wkb **a, int *point_x, int *point_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);
@@ -832,293 +828,6 @@ wkbcreatepoint_bat(bat *out, const bat *
        return MAL_SUCCEED;
 }
 
-       inline double
-isLeft( double P0x, double P0y, double P1x, double P1y, double P2x, double P2y)
-{
-       return ( (P1x - P0x) * (P2y - P0y)
-                       - (P2x -  P0x) * (P1y - P0y) );
-}
-
-str
-pnpoly_(int *out, int nvert, dbl *vx, dbl *vy, int *point_x, int *point_y)
-{
-       BAT *bo = NULL, *bpx = NULL, *bpy;
-       dbl *px = NULL, *py = NULL;
-       BUN i = 0, cnt;
-       int j = 0, nv;
-       struct timeval stop, start;
-       unsigned long long t;
-       bte *cs = NULL;
-
-       /*Get the BATs*/
-       if ((bpx = BATdescriptor(*point_x)) == NULL) {
-               throw(MAL, "geom.point", RUNTIME_OBJECT_MISSING);
-       }
-
-       if ((bpy = BATdescriptor(*point_y)) == NULL) {
-               BBPreleaseref(bpx->batCacheid);
-               throw(MAL, "geom.point", RUNTIME_OBJECT_MISSING);
-       }
-
-       /*Check BATs alignment*/
-       if ( bpx->htype != TYPE_void ||
-                       bpy->htype != TYPE_void ||
-                       bpx->hseqbase != bpy->hseqbase ||
-                       BATcount(bpx) != BATcount(bpy)) {
-               BBPreleaseref(bpx->batCacheid);
-               BBPreleaseref(bpy->batCacheid);
-               throw(MAL, "geom.point", "both point bats must have dense and 
aligned heads");
-       }
-
-       /*Create output BAT*/
-       if ((bo = BATnew(TYPE_void, ATOMindex("bte"), BATcount(bpx), 
TRANSIENT)) == NULL) {
-               BBPreleaseref(bpx->batCacheid);
-               BBPreleaseref(bpy->batCacheid);
-               throw(MAL, "geom.point", MAL_MALLOC_FAIL);
-       }
-       BATseqbase(bo, bpx->hseqbase);
-
-       /*Iterate over the Point BATs and determine if they are in Polygon 
represented by vertex BATs*/
-       px = (dbl *) Tloc(bpx, BUNfirst(bpx));
-       py = (dbl *) Tloc(bpy, BUNfirst(bpx));
-
-       gettimeofday(&start, NULL);
-       nv = nvert -1;
-       cnt = BATcount(bpx);
-       cs = (bte*) Tloc(bo,BUNfirst(bo));
-       for (i = 0; i < cnt; i++) {
-               int wn = 0;
-               for (j = 0; j < nv; j++) {
-                       if (vy[j] <= py[i]) {
-                               if (vy[j+1] > py[i])
-                                       if (isLeft( vx[j], vy[j], vx[j+1], 
vy[j+1], px[i], py[i]) > 0)
-                                               ++wn;
-                       }
-                       else {
-                               if (vy[j+1]  <= py[i])
-                                       if (isLeft( vx[j], vy[j], vx[j+1], 
vy[j+1], px[i], py[i]) < 0)
-                                               --wn;
-                       }
-               }
-               *cs++ = wn & 1;
-       }
-       gettimeofday(&stop, NULL);
-       t = 1000 * (stop.tv_sec - start.tv_sec) + (stop.tv_usec - 
start.tv_usec) / 1000;
-       printf("took %llu ms\n", t);
-
-       gettimeofday(&start, NULL);
-       BATsetcount(bo,cnt);
-       BATderiveProps(bo,FALSE);
-       gettimeofday(&stop, NULL);
-       t = 1000 * (stop.tv_sec - start.tv_sec) + (stop.tv_usec - 
start.tv_usec) / 1000;
-       printf("Append took %llu ms\n", t);
-
-       BBPreleaseref(bpx->batCacheid);
-       BBPreleaseref(bpy->batCacheid);
-       BBPkeepref(*out = bo->batCacheid);
-       return MAL_SUCCEED;
-}
-
-str
-pnpolyWithHoles_(int *out, int nvert, dbl *vx, dbl *vy, int nholes, dbl **hx, 
dbl **hy, int *hn, int *point_x, int *point_y)
-{
-       BAT *bo = NULL, *bpx = NULL, *bpy;
-       dbl *px = NULL, *py = NULL;
-       BUN i = 0, cnt = 0;
-       int j = 0, h = 0;
-       bte *cs = NULL;
-
-       /*Get the BATs*/
-       if ((bpx = BATdescriptor(*point_x)) == NULL) {
-               throw(MAL, "geom.point", RUNTIME_OBJECT_MISSING);
-       }
-       if ((bpy = BATdescriptor(*point_y)) == NULL) {
-               BBPreleaseref(bpx->batCacheid);
-               throw(MAL, "geom.point", RUNTIME_OBJECT_MISSING);
-       }
-
-       /*Check BATs alignment*/
-       if ( bpx->htype != TYPE_void ||
-                       bpy->htype != TYPE_void ||
-                       bpx->hseqbase != bpy->hseqbase ||
-                       BATcount(bpx) != BATcount(bpy)) {
-               BBPreleaseref(bpx->batCacheid);
-               BBPreleaseref(bpy->batCacheid);
-               throw(MAL, "geom.point", "both point bats must have dense and 
aligned heads");
-       }
-
-       /*Create output BAT*/
-       if ((bo = BATnew(TYPE_void, ATOMindex("bte"), BATcount(bpx), 
TRANSIENT)) == NULL) {
-               BBPreleaseref(bpx->batCacheid);
-               BBPreleaseref(bpy->batCacheid);
-               throw(MAL, "geom.point", MAL_MALLOC_FAIL);
-       }
-       BATseqbase(bo, bpx->hseqbase);
-
-       /*Iterate over the Point BATs and determine if they are in Polygon 
represented by vertex BATs*/
-       px = (dbl *) Tloc(bpx, BUNfirst(bpx));
-       py = (dbl *) Tloc(bpy, BUNfirst(bpx));
-       cnt = BATcount(bpx);
-       cs = (bte*) Tloc(bo,BUNfirst(bo));
-       for (i = 0; i < cnt; i++) {
-               int wn = 0;
-
-               /*First check the holes*/
-               for (h = 0; h < nholes; h++) {
-                       int nv = hn[h]-1;
-                       wn = 0;
-                       for (j = 0; j < nv; j++) {
-                               if (hy[h][j] <= py[i]) {
-                                       if (hy[h][j+1] > py[i])
-                                               if (isLeft( hx[h][j], hy[h][j], 
hx[h][j+1], hy[h][j+1], px[i], py[i]) > 0)
-                                                       ++wn;
-                               }
-                               else {
-                                       if (hy[h][j+1]  <= py[i])
-                                               if (isLeft( hx[h][j], hy[h][j], 
hx[h][j+1], hy[h][j+1], px[i], py[i]) < 0)
-                                                       --wn;
-                               }
-                       }
-
-                       /*It is in one of the holes*/
-                       if (wn) {
-                               break;
-                       }
-               }
-
-               if (wn)
-                       continue;
-
-               /*If not in any of the holes, check inside the Polygon*/
-               for (j = 0; j < nvert-1; j++) {
-                       if (vy[j] <= py[i]) {
-                               if (vy[j+1] > py[i])
-                                       if (isLeft( vx[j], vy[j], vx[j+1], 
vy[j+1], px[i], py[i]) > 0)
-                                               ++wn;
-                       }
-                       else {
-                               if (vy[j+1]  <= py[i])
-                                       if (isLeft( vx[j], vy[j], vx[j+1], 
vy[j+1], px[i], py[i]) < 0)
-                                               --wn;
-                       }
-               }
-               *cs++ = wn&1;
-       }
-       BATsetcount(bo,cnt);
-       BATderiveProps(bo,FALSE);
-       BBPreleaseref(bpx->batCacheid);
-       BBPreleaseref(bpy->batCacheid);
-       BBPkeepref(*out = bo->batCacheid);
-       return MAL_SUCCEED;
-}
-
-#define POLY_NUM_VERT 120
-#define POLY_NUM_HOLE 10
-
-str
-wkbContains_bat(int *out, wkb **a, int *point_x, int *point_y) {
-       double *vert_x, *vert_y, **holes_x = NULL, **holes_y= NULL;
-       int *holes_n= NULL, j;
-       wkb *geom = NULL;
-       str msg = NULL;
-
-
-       str err = NULL;
-       str geom_str = NULL;
-       char *str2, *token, *subtoken;
-       char *saveptr1 = NULL, *saveptr2 = NULL;
-       int nvert = 0, nholes = 0;
-
-       geom = (wkb*) *a;
-
-       if ((err = wkbAsText(&geom_str, &geom)) != MAL_SUCCEED) {
-               msg = createException(MAL, "geom.Contain_bat", "%s", err);
-               GDKfree(err);
-               return msg;
-       }
-       geom_str = strchr(geom_str, '(');
-       geom_str+=2;
-
-       /*Lets get the polygon*/
-       token = strtok_r(geom_str, ")", &saveptr1);
-       vert_x = GDKmalloc(POLY_NUM_VERT*sizeof(double));
-       vert_y = GDKmalloc(POLY_NUM_VERT*sizeof(double));
-
-       for (str2 = token; ; str2 = NULL) {
-               subtoken = strtok_r(str2, ",", &saveptr2);
-               if (subtoken == NULL)
-                       break;
-               sscanf(subtoken, "%lf %lf", &vert_x[nvert], &vert_y[nvert]);
-               nvert++;
-               if ((nvert%POLY_NUM_VERT) == 0) {
-                       vert_x = GDKrealloc(vert_x, nvert*2*sizeof(double));
-                       vert_y = GDKrealloc(vert_y, nvert*2*sizeof(double));
-               }
-       }
-
-       token = strtok_r(NULL, ")", &saveptr1);
-       if (token) {
-               holes_x = GDKzalloc(POLY_NUM_HOLE*sizeof(double*));
-               holes_y = GDKzalloc(POLY_NUM_HOLE*sizeof(double*));
-               holes_n = GDKzalloc(POLY_NUM_HOLE*sizeof(double*));
-       }
-       /*Lets get all the holes*/
-       while (token) {
-               int nhole = 0;
-               token = strchr(token, '(');
-               if (!token)
-                       break;
-               token++;
-
-               if (!holes_x[nholes])
-                       holes_x[nholes] = 
GDKzalloc(POLY_NUM_VERT*sizeof(double));
-               if (!holes_y[nholes])
-                       holes_y[nholes] = 
GDKzalloc(POLY_NUM_VERT*sizeof(double));
-
-               for (str2 = token; ; str2 = NULL) {
-                       subtoken = strtok_r(str2, ",", &saveptr2);
-                       if (subtoken == NULL)
-                               break;
-                       sscanf(subtoken, "%lf %lf", &holes_x[nholes][nhole], 
&holes_y[nholes][nhole]);
-                       nhole++;
-                       if ((nhole%POLY_NUM_VERT) == 0) {
-                               holes_x[nholes] = GDKrealloc(holes_x[nholes], 
nhole*2*sizeof(double));
-                               holes_y[nholes] = GDKrealloc(holes_y[nholes], 
nhole*2*sizeof(double));
-                       }
-               }
-
-               holes_n[nholes] = nhole;
-               nholes++;
-               if ((nholes%POLY_NUM_HOLE) == 0) {
-                       holes_x = GDKrealloc(holes_x, nholes*2*sizeof(double*));
-                       holes_y = GDKrealloc(holes_y, nholes*2*sizeof(double*));
-                       holes_n = GDKrealloc(holes_n, nholes*2*sizeof(int));
-               }
-               token = strtok_r(NULL, ")", &saveptr1);
-       }
-
-       if (nholes)
-               msg = pnpolyWithHoles_(out, (int) nvert, vert_x, vert_y, 
nholes, holes_x, holes_y, holes_n, point_x, point_y);
-       else {
-               msg = pnpoly_(out, (int) nvert, vert_x, vert_y, point_x, 
point_y);
-       }
-
-       GDKfree(vert_x);
-       GDKfree(vert_y);
-       if (holes_x && holes_y && holes_n) {
-               for (j = 0; j < nholes; j ++) {
-                       GDKfree(holes_x[j]);
-                       GDKfree(holes_y[j]);
-               }
-               GDKfree(holes_x);
-               GDKfree(holes_y);
-               GDKfree(holes_n);
-       }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to