Changeset: 5e3d257b1d5c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5e3d257b1d5c
Modified Files:
        gdk/gdk_select.c
Branch: default
Log Message:

reverting recent scan-select code expansion to prepare for revised solution

As agreed with Martin, reverting his recent scan-select code expansion,
including Sjoerd's clean-up of the code expansion,
excluding Niels' fixes of the original code,
i.e., changesets 6af3633de353 a426dd289343 bb2ec9ffb117 1b0d41526026
ab6931d2a83b 6ad531950fbf 8c22cfc1904e,
to prepare for a revised scan-select code-expansion solution.


diffs (truncated from 338 to 300 lines):

diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -145,7 +145,6 @@ BAT_hashselect(BAT *b, BAT *s, BAT *bn, 
 }
 
 /* scan select loop with candidates */
-
 #define candscanloop(TEST)                                             \
        do {                                                            \
                ALGODEBUG fprintf(stderr,                               \
@@ -179,158 +178,6 @@ BAT_hashselect(BAT *b, BAT *s, BAT *bn, 
                }                                                       \
        } while (0)
 
-#define LT(a, b)       ((a) < (b))
-#define LE(a, b)       ((a) <= (b))
-#define GT(a, b)       ((a) > (b))
-#define GE(a, b)       ((a) >= (b))
-
-#define addresult(I)                                           \
-       do {                                                    \
-               if (cnt == lim) {                               \
-                       BATextend(bn, BATcount(b));             \
-                       lim = BATcapacity(bn);                  \
-                       dst = (oid*) Tloc(bn, bn->U->first);    \
-                }                                              \
-               dst[cnt++] = I;                                 \
-       } while (0)
-
-#define SCANLOOPCAND5(TYPE, OP1, OP2)                                  \
-       do {                                                            \
-               TYPE *src = (TYPE *) Tloc(b, b->U->first);              \
-               oid *dst = (oid *) Tloc(bn, bn->U->first);              \
-               BUN lim = BATcapacity(bn);                              \
-               BUN r;                                                  \
-               if (equi) {                                             \
-                       assert(li && hi);                               \
-                       assert(!anti);                                  \
-                       for (i = p; i < q; i++) {                       \
-                               r = (BUN) (*candlist++ - off);          \
-                               if (src[r] == *(TYPE *) tl)             \
-                                       addresult(r);                   \
-                       }                                               \
-               } else if (anti) {                                      \
-                       if (nil == NULL) {                              \
-                               for (i = p; i < q; i++) {       \
-                                       r = (BUN) (*candlist++ - off) ; \
-                                       if ((lval &&                    \
-                                            OP1(*(TYPE *) tl, src[r])) || \
-                                           (hval &&                    \
-                                            OP2(*(TYPE *) th, src[r]))) \
-                                               addresult(r);           \
-                               }                                       \
-                       } else {                                        \
-                               for (i = p; i < q; i++) {       \
-                                       r = (BUN) (*candlist++ - off) ; \
-                                       if (((lval &&                   \
-                                             OP1(*(TYPE *) tl, src[r])) || \
-                                            (hval &&                   \
-                                             OP2(*(TYPE *) th, src[r]))) && \
-                                           src[r] != TYPE##_nil)       \
-                                               addresult(r);           \
-                               }                                       \
-                       }                                               \
-               } else {                                                \
-                       if (nil == NULL) {                              \
-                               for (i = p; i < q; i++) {               \
-                                       r = (BUN) (*candlist++ - off) ; \
-                                       if ((!lval ||                   \
-                                            !OP1(*(TYPE *) tl, src[r])) && \
-                                           (!hval ||                   \
-                                            !OP2(*(TYPE *) th, src[r]))) \
-                                               addresult(r);           \
-                               }                                       \
-                       } else {                                        \
-                               for (i = p; i < q; i++) {               \
-                                       r = (BUN) (*candlist++ - off) ; \
-                                       if ((!lval ||                   \
-                                            !OP1(*(TYPE *) tl, src[r])) && \
-                                           (!hval ||                   \
-                                            !OP2(*(TYPE *) th, src[r])) && \
-                                           src[r] != TYPE##_nil)       \
-                                               addresult(r);           \
-                               }                                       \
-                       }                                               \
-               }                                                       \
-               BATsetcount(bn,cnt);                                    \
-       } while (0)
-
-#define SCANLOOPCAND(TYPE)                             \
-       do {                                            \
-               if (li && hi)                           \
-                       SCANLOOPCAND5(TYPE, GT, LT);    \
-               else if (li)                            \
-                       SCANLOOPCAND5(TYPE, GT, LE);    \
-               else if (hi)                            \
-                       SCANLOOPCAND5(TYPE, GE, LT);    \
-               else                                    \
-                       SCANLOOPCAND5(TYPE, GE, LE);    \
-       } while (0)
-
-#define SCANLOOP5(TYPE, OP1, OP2)                                      \
-       do {                                                            \
-               TYPE *src = (TYPE *) Tloc(b, b->U->first);              \
-               oid *dst = (oid *) Tloc(bn, bn->U->first);              \
-               BUN lim = BATcapacity(bn);                              \
-               if (equi) {                                             \
-                       assert(li && hi);                               \
-                       assert(!anti);                                  \
-                       for (i = p; i < q; i++)                         \
-                               if (src[i] == *(TYPE *) tl)             \
-                                       addresult(i);                   \
-               } else if (anti) {                                      \
-                       if (nil == NULL) {                              \
-                               for (i = p; i < q; i++) {               \
-                                       if ((lval &&                    \
-                                            OP1(*(TYPE *) tl, src[i])) || \
-                                           (hval &&                    \
-                                            OP2(*(TYPE *) th, src[i]))) \
-                                               addresult(i);           \
-                               }                                       \
-                       } else {                                        \
-                               for (i = p; i < q; i++) {               \
-                                       if (((lval &&                   \
-                                             OP1(*(TYPE *) tl, src[i])) || \
-                                            (hval &&                   \
-                                             OP2(*(TYPE *) th, src[i]))) && \
-                                           src[i] != TYPE##_nil)       \
-                                               addresult(i);           \
-                               }                                       \
-                       }                                               \
-               } else {                                                \
-                       if (nil == NULL) {                              \
-                               for (i = p; i < q; i++) {               \
-                                       if ((!lval ||                   \
-                                            !OP1(*(TYPE *) tl, src[i])) && \
-                                           (!hval ||                   \
-                                            !OP2(*(TYPE *) th, src[i]))) \
-                                               addresult(i);           \
-                               }                                       \
-                       } else {                                        \
-                               for (i = p; i < q; i++) {               \
-                                       if ((!lval ||                   \
-                                            !OP1(*(TYPE *) tl, src[i])) && \
-                                           (!hval ||                   \
-                                            !OP2(*(TYPE *) th, src[i])) && \
-                                           src[i] != TYPE##_nil)       \
-                                               addresult(i);           \
-                               }                                       \
-                       }                                               \
-               }                                                       \
-               BATsetcount(bn,cnt);                                    \
-       } while (0)
-
-#define SCANLOOP(TYPE)                                 \
-       do {                                            \
-               if (li && hi)                           \
-                       SCANLOOP5(TYPE, GT, LT);        \
-               else if (li)                            \
-                       SCANLOOP5(TYPE, GT, LE);        \
-               else if (hi)                            \
-                       SCANLOOP5(TYPE, GE, LT);        \
-               else                                    \
-                       SCANLOOP5(TYPE, GE, LE);        \
-       } while (0)
-
 static BAT *
 BAT_scanselect(BAT *b, BAT *s, BAT *bn, const void *tl, const void *th,
               int li, int hi, int equi, int anti, int lval, int hval)
@@ -338,7 +185,6 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn, 
        BATiter bi = bat_iterator(b);
        int (*cmp)(const void *, const void *);
        BUN p, q;
-       BUN i,cnt =0;
        oid o, off;
        const void *nil, *v;
        int c;
@@ -372,49 +218,26 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn, 
                /* should we return an error if p > BUNfirst(s) || q <
                 * BUNlast(s) (i.e. s not fully used)? */
                candlist = (const oid *) Tloc(s, p);
-               switch (ATOMstorage(b->ttype)) {
-               case TYPE_bte:
-                       SCANLOOPCAND(bte);
-                       break;
-               case TYPE_sht:
-                       SCANLOOPCAND(sht);
-                       break;
-               case TYPE_int:
-                       SCANLOOPCAND(int);
-                       break;
-               case TYPE_flt:
-                       SCANLOOPCAND(flt);
-                       break;
-               case TYPE_dbl:
-                       SCANLOOPCAND(dbl);
-                       break;
-               case TYPE_lng:
-                       SCANLOOPCAND(lng);
-                       break;
-               default:
-                       if (equi) {
-                               assert(li && hi);
-                               assert(!anti);
-                               candscanloop((*cmp)(tl, v) == 0);
-                       } else if (anti) {
-                               candscanloop((nil == NULL ||
-                                             (*cmp)(v, nil) != 0) &&
-                                            ((lval &&
-                                              ((c = (*cmp)(tl, v)) > 0 ||
-                                               (!li && c == 0))) ||
-                                             (hval &&
-                                              ((c = (*cmp)(th, v)) < 0 ||
-                                               (!hi && c == 0)))));
-                       } else {
-                               candscanloop((nil == NULL ||
-                                             (*cmp)(v, nil) != 0) &&
-                                            ((!lval ||
-                                              (c = cmp(tl, v)) < 0 ||
-                                              (li && c == 0)) &&
-                                             (!hval ||
-                                              (c = cmp(th, v)) > 0 ||
-                                              (hi && c == 0))));
-                       }
+               if (equi) {
+                       assert(li && hi);
+                       assert(!anti);
+                       candscanloop((*cmp)(tl, v) == 0);
+               } else if (anti) {
+                       candscanloop((nil == NULL || (*cmp)(v, nil) != 0) &&
+                                    ((lval &&
+                                      ((c = (*cmp)(tl, v)) > 0 ||
+                                       (!li && c == 0))) ||
+                                     (hval &&
+                                      ((c = (*cmp)(th, v)) < 0 ||
+                                       (!hi && c == 0)))));
+               } else {
+                       candscanloop((nil == NULL || (*cmp)(v, nil) != 0) &&
+                                    ((!lval ||
+                                      (c = cmp(tl, v)) < 0 ||
+                                      (li && c == 0)) &&
+                                     (!hval ||
+                                      (c = cmp(th, v)) > 0 ||
+                                      (hi && c == 0))));
                }
        } else {
                if (s) {
@@ -431,49 +254,26 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn, 
                        p = BUNfirst(b) + off;
                        q = BUNlast(b) + off;
                }
-               switch (ATOMstorage(b->ttype)) {
-               case TYPE_bte:
-                       SCANLOOP(bte);
-                       break;
-               case TYPE_sht:
-                       SCANLOOP(sht);
-                       break;
-               case TYPE_int:
-                       SCANLOOP(int);
-                       break;
-               case TYPE_flt:
-                       SCANLOOP(flt);
-                       break;
-               case TYPE_dbl:
-                       SCANLOOP(dbl);
-                       break;
-               case TYPE_lng:
-                       SCANLOOP(lng);
-                       break;
-               default:
-                       if (equi) {
-                               assert(li && hi);
-                               assert(!anti);
-                               scanloop((*cmp)(tl, v) == 0);
-                       } else if (anti) {
-                               scanloop((nil == NULL ||
-                                         (*cmp)(v, nil) != 0) &&
-                                        ((lval &&
-                                          ((c = (*cmp)(tl, v)) > 0 ||
-                                           (!li && c == 0))) ||
-                                         (hval &&
-                                          ((c = (*cmp)(th, v)) < 0 ||
-                                           (!hi && c == 0)))));
-                       } else {
-                               scanloop((nil == NULL ||
-                                         (*cmp)(v, nil) != 0) &&
-                                        ((!lval ||
-                                          (c = cmp(tl, v)) < 0 ||
-                                          (li && c == 0)) &&
-                                         (!hval ||
-                                          (c = cmp(th, v)) > 0 ||
-                                          (hi && c == 0))));
-                       }
+               if (equi) {
+                       assert(li && hi);
+                       assert(!anti);
+                       scanloop((*cmp)(tl, v) == 0);
+               } else if (anti) {
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to