Changeset: 4de9b7bdcc5a for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4de9b7bdcc5a Modified Files: gdk/gdk_rangejoin.c Branch: headless Log Message:
Stick bandjoin type expansion into a macro.
diffs (truncated from 439 to 300 lines):
diff --git a/gdk/gdk_rangejoin.c b/gdk/gdk_rangejoin.c
--- a/gdk/gdk_rangejoin.c
+++ b/gdk/gdk_rangejoin.c
@@ -149,6 +149,52 @@
*
* The hash indexing routines have been extended with a Band argument.
*/
+#define bandjoincase(TYPE) \
+ do { \
+ TYPE x1, x2, cc1 = * (TYPE *) c1, cc2 = * (TYPE *) c2; \
+ \
+ for (p = 0; p < l->count; p++) { \
+ x1 = COLget_TYPE(l, p, TYPE); \
+ if (li && hi) { \
+ for (v = 0; v < r->count; v++) { \
+ x2 = COLget_TYPE(r, v, TYPE); \
+ if (x1 >= x2 - cc1 && \
+ x1 <= x2 + cc2) { \
+ bunfastins_oid(bn1, p); \
+ bunfastins_oid(bn2, v); \
+ } \
+ } \
+ } else if (li && !hi) { \
+ for (v = 0; v < r->count; v++) { \
+ x2 = COLget_TYPE(r, v, TYPE); \
+ if (x1 >= x2 - cc1 && \
+ x1 < x2 + cc2) { \
+ bunfastins_oid(bn1, p); \
+ bunfastins_oid(bn2, v); \
+ } \
+ } \
+ } else if (!li && hi) { \
+ for (v = 0; v < r->count; v++) { \
+ x2 = COLget_TYPE(r, v, TYPE); \
+ if (x1 > x2 - cc1 && \
+ x1 <= x2 + cc2) { \
+ bunfastins_oid(bn1, p); \
+ bunfastins_oid(bn2, v); \
+ } \
+ } \
+ } else { \
+ for (v = 0; v < r->count; v++) { \
+ x2 = COLget_TYPE(r, v, TYPE); \
+ if (x1 > x2 - cc1 && \
+ x1 < x2 + cc2) { \
+ bunfastins_oid(bn1, p); \
+ bunfastins_oid(bn2, v); \
+ } \
+ } \
+ } \
+ } \
+ } while (0)
+
int
COLbandjoin(COL **o1, COL **o2, COL *l, COL *r, ptr c1, ptr c2, bit li, bit hi)
{
@@ -172,366 +218,30 @@
}
switch (ATOMstorage(r->type)) {
- case TYPE_chr: {
- chr x1, x2, cc1 = * (chr *) c1, cc2 = * (chr *) c2;
-
- for (p = 0; p < l->count; p++) {
- x1 = COLget_chr(l, p);
- if (li && hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_chr(r, v);
- if (x1 >= x2 - cc1 &&
- x1 <= x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else if (li && !hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_chr(r, v);
- if (x1 >= x2 - cc1 &&
- x1 < x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else if (!li && hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_chr(r, v);
- if (x1 > x2 - cc1 &&
- x1 <= x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_chr(r, v);
- if (x1 > x2 - cc1 &&
- x1 < x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- }
- }
+ case TYPE_chr:
+ bandjoincase(chr);
break;
- }
- case TYPE_bte: {
- bte x1, x2, cc1 = * (bte *) c1, cc2 = * (bte *) c2;
-
- for (p = 0; p < l->count; p++) {
- x1 = COLget_bte(l, p);
- if (li && hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_bte(r, v);
- if (x1 >= x2 - cc1 &&
- x1 <= x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else if (li && !hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_bte(r, v);
- if (x1 >= x2 - cc1 &&
- x1 < x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else if (!li && hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_bte(r, v);
- if (x1 > x2 - cc1 &&
- x1 <= x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_bte(r, v);
- if (x1 > x2 - cc1 &&
- x1 < x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- }
- }
+ case TYPE_bte:
+ bandjoincase(bte);
break;
- }
- case TYPE_sht: {
- sht x1, x2, cc1 = * (sht *) c1, cc2 = * (sht *) c2;
-
- for (p = 0; p < l->count; p++) {
- x1 = COLget_sht(l, p);
- if (li && hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_sht(r, v);
- if (x1 >= x2 - cc1 &&
- x1 <= x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else if (li && !hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_sht(r, v);
- if (x1 >= x2 - cc1 &&
- x1 < x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else if (!li && hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_sht(r, v);
- if (x1 > x2 - cc1 &&
- x1 <= x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_sht(r, v);
- if (x1 > x2 - cc1 &&
- x1 < x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- }
- }
+ case TYPE_sht:
+ bandjoincase(sht);
break;
- }
- case TYPE_int: {
- int x1, x2, cc1 = * (int *) c1, cc2 = * (int *) c2;
-
- for (p = 0; p < l->count; p++) {
- x1 = COLget_int(l, p);
- if (li && hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_int(r, v);
- if (x1 >= x2 - cc1 &&
- x1 <= x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else if (li && !hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_int(r, v);
- if (x1 >= x2 - cc1 &&
- x1 < x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else if (!li && hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_int(r, v);
- if (x1 > x2 - cc1 &&
- x1 <= x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_int(r, v);
- if (x1 > x2 - cc1 &&
- x1 < x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- }
- }
+ case TYPE_int:
+ bandjoincase(int);
break;
- }
- case TYPE_wrd: {
- wrd x1, x2, cc1 = * (wrd *) c1, cc2 = * (wrd *) c2;
-
- for (p = 0; p < l->count; p++) {
- x1 = COLget_wrd(l, p);
- if (li && hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_wrd(r, v);
- if (x1 >= x2 - cc1 &&
- x1 <= x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else if (li && !hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_wrd(r, v);
- if (x1 >= x2 - cc1 &&
- x1 < x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else if (!li && hi) {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_wrd(r, v);
- if (x1 > x2 - cc1 &&
- x1 <= x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- } else {
- for (v = 0; v < r->count; v++) {
- x2 = COLget_wrd(r, v);
- if (x1 > x2 - cc1 &&
- x1 < x2 + cc2) {
- bunfastins_oid(bn1, p);
- bunfastins_oid(bn2, v);
- }
- }
- }
- }
+ case TYPE_wrd:
+ bandjoincase(wrd);
break;
- }
- case TYPE_lng: {
- lng x1, x2, cc1 = * (lng *) c1, cc2 = * (lng *) c2;
-
- for (p = 0; p < l->count; p++) {
- x1 = COLget_lng(l, p);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list
