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

Only call comparison function if we need to.


diffs (54 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -2991,23 +2991,42 @@ BATassertHeadProps(BAT *b)
                        /* if sorted (either way), or we don't have to
                         * prove uniqueness, we can do a simple
                         * scan */
+                       /* only call compare function if we have to */
+                       int cmpprv = b->hsorted | b->hrevsorted | b->hkey;
+                       int cmpnil = b->H->nonil | b->H->nil;
+
                        BATaccessBegin(b, USE_HEAD, MMAP_SEQUENTIAL);
                        BATloop(b, p, q) {
                                valp = BUNhead(bi, p);
-                               if (prev) {
+                               if (prev && cmpprv) {
                                        cmp = cmpf(prev, valp);
                                        assert(!b->hsorted || cmp <= 0);
                                        assert(!b->hrevsorted || cmp >= 0);
-                                       assert(!b->hkey || cmp != 0); /* 
necessary, not sufficient */
-                                       if (b->hdense) {
-                                               assert(* (oid *) prev + 1 == * 
(oid *) valp);
+                                       assert(!b->hkey || cmp != 0);
+                                       assert(!b->hdense || * (oid *) prev + 1 
== * (oid *) valp);
+                               }
+                               if (cmpnil) {
+                                       cmp = cmpf(valp, nilp);
+                                       assert(!b->H->nonil || cmp != 0);
+                                       if (cmp == 0) {
+                                               /* we found a nil:
+                                                * we're done checking
+                                                * for them */
+                                               seennil = 1;
+                                               cmpnil = 0;
+                                               if (!cmpprv) {
+                                                       /* we were
+                                                        * only
+                                                        * checking
+                                                        * for nils,
+                                                        * so nothing
+                                                        * more to
+                                                        * do */
+                                                       break;
+                                               }
                                        }
                                }
                                prev = valp;
-                               cmp = cmpf(valp, nilp);
-                               assert(!b->H->nonil || cmp != 0);
-                               if (cmp == 0)
-                                       seennil = 1;
                        }
                        BATaccessEnd(b, USE_HEAD, MMAP_SEQUENTIAL);
                } else {        /* b->hkey && !b->hsorted && !b->hrevsorted */
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to