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

Reply via email to