Changeset: 654eb7761c3f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=654eb7761c3f
Modified Files:
        gdk/gdk_cand.c
Branch: linear-hashing
Log Message:

Rearrange code to avoid goto.


diffs (71 lines):

diff --git a/gdk/gdk_cand.c b/gdk/gdk_cand.c
--- a/gdk/gdk_cand.c
+++ b/gdk/gdk_cand.c
@@ -404,23 +404,6 @@ canditer_init(struct canditer *ci, BAT *
                ci->tpe = cand_dense;
        }
        switch (ci->tpe) {
-       case cand_dense:
-       case_cand_dense:
-               if (b != NULL) {
-                       if (ci->seq + cnt <= b->hseqbase ||
-                           ci->seq >= b->hseqbase + BATcount(b)) {
-                               ci->ncand = 0;
-                               return 0;
-                       }
-                       if (b->hseqbase > ci->seq) {
-                               cnt -= b->hseqbase - ci->seq;
-                               ci->offset += b->hseqbase - ci->seq;
-                               ci->seq = b->hseqbase;
-                       }
-                       if (ci->seq + cnt > b->hseqbase + BATcount(b))
-                               cnt = b->hseqbase + BATcount(b) - ci->seq;
-               }
-               break;
        case cand_materialized:
                if (b != NULL) {
                        if (ci->oids[ci->noids - 1] < b->hseqbase) {
@@ -491,11 +474,9 @@ canditer_init(struct canditer *ci, BAT *
                /* WARNING: don't reset ci->oids to NULL when setting
                 * ci->tpe to cand_dense below: BATprojectchain will
                 * fail */
-               if (ci->noids == 0) {
-                       ci->tpe = cand_dense;
-                       goto case_cand_dense;
-               }
-               if (b != NULL) {
+               if (ci->noids > 0) {
+                       if (b == NULL)
+                               break;
                        BUN p;
                        p = binsearchcand(ci->oids, ci->noids - 1, b->hseqbase);
                        if (p == ci->noids) {
@@ -532,10 +513,25 @@ canditer_init(struct canditer *ci, BAT *
                        while (ci->noids > 0 &&
                               ci->oids[ci->noids - 1] == ci->seq + cnt + 
ci->noids - 1)
                                ci->noids--;
-                       if (ci->noids == 0) {
-                               ci->tpe = cand_dense;
-                               goto case_cand_dense;
+                       if (ci->noids > 0)
+                               break;
+               }
+               ci->tpe = cand_dense;
+               /* fall through */
+       case cand_dense:
+               if (b != NULL) {
+                       if (ci->seq + cnt <= b->hseqbase ||
+                           ci->seq >= b->hseqbase + BATcount(b)) {
+                               ci->ncand = 0;
+                               return 0;
                        }
+                       if (b->hseqbase > ci->seq) {
+                               cnt -= b->hseqbase - ci->seq;
+                               ci->offset += b->hseqbase - ci->seq;
+                               ci->seq = b->hseqbase;
+                       }
+                       if (ci->seq + cnt > b->hseqbase + BATcount(b))
+                               cnt = b->hseqbase + BATcount(b) - ci->seq;
                }
                break;
        }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to