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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list