Changeset: ba7fe8cd0d72 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ba7fe8cd0d72
Modified Files:
        gdk/gdk.h
        gdk/gdk_cand.c
Branch: candidate-exceptions
Log Message:

Use linear scan.
The weird binary search didn't work so great.


diffs (60 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1254,26 +1254,10 @@ BUNtoid(BAT *b, BUN p)
                return o;
        }
        const oid *exc = (oid *) b->tvheap->base;
-       if (o < exc[0]) {
-               /* before first exception */
-               return o;
-       }
-       BUN hi = nexc - 1;
-       if (o + hi >= exc[hi]) {
-               /* after last exception */
-               return o + nexc;
-       }
-       BUN lo = 0;
-       /* perform binary search on exception list
-        * loop invariant: o + lo <= exc[lo] && o + hi > exc[hi] */
-       while (lo + 1 < hi) {
-               BUN mid = (lo + hi) / 2;
-               if (o + mid <= exc[mid])
-                       lo = mid;
-               else
-                       hi = mid;
-       }
-       return o + hi;
+       for (BUN i = 0; i < nexc; i++)
+               if (o + i < exc[i])
+                       return o + i;
+       return o + nexc;
 }
 
 static inline BATiter
diff --git a/gdk/gdk_cand.c b/gdk/gdk_cand.c
--- a/gdk/gdk_cand.c
+++ b/gdk/gdk_cand.c
@@ -667,18 +667,10 @@ canditer_idx(struct canditer *ci, BUN p)
                return o;
        if (o + ci->noids > ci->oids[ci->noids - 1])
                return o + ci->noids;
-       /* perform binary search on exception list
-        * loop invariant:
-        * o + lo <= ci->oids[lo] && o + hi > ci->oids[hi] */
-       BUN lo = 0, hi = ci->noids - 1;
-       while (lo + 1 < hi) {
-               BUN mid = (lo + hi) / 2;
-               if (o + mid <= ci->oids[mid])
-                       lo = mid;
-               else
-                       hi = mid;
-       }
-       return o + hi;
+       for (BUN i = 0; i < ci->noids; i++)
+               if (o + i < ci->oids[i])
+                       return o + i;
+       return o + ci->noids;
 }
 
 void
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to