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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list