Changeset: dad755da1196 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dad755da1196
Modified Files:
        geom/monetdb5/grid.c
Branch: grid
Log Message:

The outer cell has more points than the inner cell


diffs (35 lines):

diff --git a/geom/monetdb5/grid.c b/geom/monetdb5/grid.c
--- a/geom/monetdb5/grid.c
+++ b/geom/monetdb5/grid.c
@@ -24,6 +24,7 @@
 #define setbv(bitVector, bitPos, value) set((bitVector)[(bitPos) >> SHIFT], 
(bitPos) & ONES, (value))
 #define unset(bitVector, bitPos) ((bitVector) &= ~((uint64_t)1<<(bitPos)))
 #define common(bitVector, bitPos, value) ((bitVector) &= (0xFFFFFFFFFFFFFFFF ^ 
(((1-value))<<(bitPos))))
+#define GRIDcount(g, c) (g)->dir[(c)+1] - (g)->dir[(c)]
 
 #define maximumNumberOfCells(max, bitsNum, add) \
 do {                                            \
@@ -71,7 +72,6 @@ r2Vals = (lng*)Tloc(r2, BUNfirst(r2));  
 r1b = BATcount(r1);                                                            
   \
 r2b = BATcount(r2);                                                            
   \
 /* compare points of R in cellR with points of S in cellS */                   
   \
-/* TODO: the outer relation should be the one with more points */              
   \
 for (size_t m = (g1)->dir[(cellR)]; m < (g1)->dir[(cellR)+1]; m++) {           
   \
        oid oid1 = m;                                                           
      \
        lng x1v = (x1Vals)[oid1];                                               
      \
@@ -888,8 +888,13 @@ GRIDdistancesubjoin(bat *res1, bat * res
                        size_t min = i + g1->cellsX*j;
                        size_t R[] = {min,            min,              min,   
min, min+1, min+g1->cellsX, min+g1->cellsX+1};
                        size_t S[] = {min+g1->cellsX, min+g1->cellsX+1, min+1, 
min, min,   min,            min             };
-                       for (size_t k = 0; k < 7; k++)
-                               GRIDcmp(x1Vals, y1Vals, g1, x2Vals, y2Vals, g2, 
R[k], S[k], r1, r2, seq1, seq2, msg);
+                       for (size_t k = 0; k < 7; k++) {
+                               if (GRIDcount(g1,R[k]) > GRIDcount(g2,S[k])) {
+                                       GRIDcmp(x1Vals, y1Vals, g1, x2Vals, 
y2Vals, g2, R[k], S[k], r1, r2, seq1, seq2, msg);
+                               } else {
+                                       GRIDcmp(x2Vals, y2Vals, g2, x1Vals, 
y1Vals, g1, S[k], R[k], r2, r1, seq2, seq1, msg);
+                               }
+                       }
                }
        }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to