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