Changeset: 635434172391 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/635434172391
Modified Files:
        gdk/gdk_calc.c
        gdk/gdk_calc_compare.h
        gdk/gdk_cand.c
        gdk/gdk_firstn.c
        gdk/gdk_group.c
        gdk/gdk_imprints.c
        gdk/gdk_interprocess.c
        gdk/gdk_join.c
Branch: Jul2021
Log Message:

Use more bat iterators to access data.


diffs (truncated from 2832 to 300 lines):

diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -72,6 +72,7 @@ checkbats(BAT *b1, BAT *b2, const char *
                         OP "(" FMT##TYPE ").\n",               \
                         CST##TYPE src[x]);                     \
                BBPreclaim(bn);                                 \
+               bat_iterator_end(&bi);                          \
                return NULL;                                    \
        } while (0)
 
@@ -85,7 +86,7 @@ checkbats(BAT *b1, BAT *b2, const char *
 
 #define UNARY_2TYPE_FUNC(TYPE1, TYPE2, FUNC)                           \
        do {                                                            \
-               const TYPE1 *restrict src = (const TYPE1 *) Tloc(b, 0); \
+               const TYPE1 *restrict src = (const TYPE1 *) bi.base;    \
                TYPE2 *restrict dst = (TYPE2 *) Tloc(bn, 0);            \
                for (i = 0; i < ncand; i++) {                           \
                        x = canditer_next(&ci) - bhseqbase;             \
@@ -100,7 +101,7 @@ checkbats(BAT *b1, BAT *b2, const char *
 
 #define UNARY_2TYPE_FUNC_nilcheck(TYPE1, TYPE2, FUNC, on_overflow)     \
        do {                                                            \
-               const TYPE1 *restrict src = (const TYPE1 *) Tloc(b, 0); \
+               const TYPE1 *restrict src = (const TYPE1 *) bi.base;    \
                TYPE2 *restrict dst = (TYPE2 *) Tloc(bn, 0);            \
                for (i = 0; i < ncand; i++) {                           \
                        x = canditer_next(&ci) - bhseqbase;             \
@@ -370,10 +371,11 @@ BATcalcnot(BAT *b, BAT *s)
        if (bn == NULL)
                return NULL;
 
+       BATiter bi = bat_iterator(b);
        switch (ATOMbasetype(b->ttype)) {
        case TYPE_msk:
                if (ci.tpe == cand_dense) {
-                       const uint32_t *restrict src = Tloc(b, (ci.seq - 
b->hseqbase) / 32);
+                       const uint32_t *restrict src = (const uint32_t *) 
bi.base + (ci.seq - b->hseqbase) / 32;
                        uint32_t *restrict dst = Tloc(bn, 0);
                        int bits = (ci.seq - b->hseqbase) % 32;
                        ncand = (ncand + 31) / 32;
@@ -389,7 +391,7 @@ BATcalcnot(BAT *b, BAT *s)
                } else {
                        for (i = 0; i < ncand; i++) {
                                x = canditer_next(&ci) - bhseqbase;
-                               mskSetVal(bn, i, !mskGetVal(b, x));
+                               mskSetVal(bn, i, !Tmskval(&bi, x));
                        }
                }
                break;
@@ -415,10 +417,12 @@ BATcalcnot(BAT *b, BAT *s)
                break;
 #endif
        default:
+               bat_iterator_end(&bi);
                BBPunfix(bn->batCacheid);
                GDKerror("type %s not supported.\n", ATOMname(b->ttype));
                return NULL;
        }
+       bat_iterator_end(&bi);
 
        BATsetcount(bn, ci.ncand);
 
@@ -544,6 +548,7 @@ BATcalcnegate(BAT *b, BAT *s)
        if (bn == NULL)
                return NULL;
 
+       BATiter bi = bat_iterator(b);
        switch (ATOMbasetype(b->ttype)) {
        case TYPE_bte:
                UNARY_2TYPE_FUNC(bte, bte, NEGATE);
@@ -569,10 +574,12 @@ BATcalcnegate(BAT *b, BAT *s)
                UNARY_2TYPE_FUNC(dbl, dbl, NEGATE);
                break;
        default:
+               bat_iterator_end(&bi);
                BBPunfix(bn->batCacheid);
                GDKerror("type %s not supported.\n", ATOMname(b->ttype));
                return NULL;
        }
+       bat_iterator_end(&bi);
 
        BATsetcount(bn, ncand);
 
@@ -672,6 +679,7 @@ BATcalcabsolute(BAT *b, BAT *s)
        if (bn == NULL)
                return NULL;
 
+       BATiter bi = bat_iterator(b);
        switch (ATOMbasetype(b->ttype)) {
        case TYPE_bte:
                UNARY_2TYPE_FUNC(bte, bte, (bte) abs);
@@ -697,10 +705,12 @@ BATcalcabsolute(BAT *b, BAT *s)
                UNARY_2TYPE_FUNC(dbl, dbl, fabs);
                break;
        default:
+               bat_iterator_end(&bi);
                BBPunfix(bn->batCacheid);
                GDKerror("bad input type %s.\n", ATOMname(b->ttype));
                return NULL;
        }
+       bat_iterator_end(&bi);
 
        BATsetcount(bn, ncand);
 
@@ -804,6 +814,7 @@ BATcalciszero(BAT *b, BAT *s)
        if (bn == NULL)
                return NULL;
 
+       BATiter bi = bat_iterator(b);
        switch (ATOMbasetype(b->ttype)) {
        case TYPE_bte:
                UNARY_2TYPE_FUNC(bte, bit, ISZERO);
@@ -829,10 +840,12 @@ BATcalciszero(BAT *b, BAT *s)
                UNARY_2TYPE_FUNC(dbl, bit, ISZERO);
                break;
        default:
+               bat_iterator_end(&bi);
                BBPunfix(bn->batCacheid);
                GDKerror("bad input type %s.\n", ATOMname(b->ttype));
                return NULL;
        }
+       bat_iterator_end(&bi);
 
        BATsetcount(bn, ncand);
 
@@ -934,6 +947,7 @@ BATcalcsign(BAT *b, BAT *s)
        if (bn == NULL)
                return NULL;
 
+       BATiter bi = bat_iterator(b);
        switch (ATOMbasetype(b->ttype)) {
        case TYPE_bte:
                UNARY_2TYPE_FUNC(bte, bte, SIGN);
@@ -959,10 +973,12 @@ BATcalcsign(BAT *b, BAT *s)
                UNARY_2TYPE_FUNC(dbl, bte, SIGN);
                break;
        default:
+               bat_iterator_end(&bi);
                BBPunfix(bn->batCacheid);
                GDKerror("bad input type %s.\n", ATOMname(b->ttype));
                return NULL;
        }
+       bat_iterator_end(&bi);
 
        BATsetcount(bn, ncand);
 
@@ -1045,7 +1061,7 @@ VARcalcsign(ValPtr ret, const ValRecord 
 
 #define ISNIL_TYPE(TYPE, NOTNIL)                                       \
        do {                                                            \
-               const TYPE *restrict src = (const TYPE *) Tloc(b, 0);   \
+               const TYPE *restrict src = (const TYPE *) bi.base;      \
                for (i = 0; i < ncand; i++) {                           \
                        x = canditer_next(&ci) - bhseqbase;             \
                        dst[i] = (bit) (is_##TYPE##_nil(src[x]) ^ NOTNIL); \
@@ -1086,6 +1102,7 @@ BATcalcisnil_implementation(BAT *b, BAT 
 
        dst = (bit *) Tloc(bn, 0);
 
+       BATiter bi = bat_iterator(b);
        switch (ATOMbasetype(b->ttype)) {
        case TYPE_bte:
                ISNIL_TYPE(bte, notnil);
@@ -1115,7 +1132,6 @@ BATcalcisnil_implementation(BAT *b, BAT 
                break;
        default:
        {
-               BATiter bi = bat_iterator(b);
                int (*atomcmp)(const void *, const void *) = 
ATOMcompare(b->ttype);
                const void *nil = ATOMnilptr(b->ttype);
 
@@ -1123,10 +1139,10 @@ BATcalcisnil_implementation(BAT *b, BAT 
                        x = canditer_next(&ci) - bhseqbase;
                        dst[i] = (bit) (((*atomcmp)(BUNtail(bi, x), nil) == 0) 
^ notnil);
                }
-               bat_iterator_end(&bi);
-               break;
-       }
-       }
+               break;
+       }
+       }
+       bat_iterator_end(&bi);
 
        BATsetcount(bn, ncand);
 
@@ -1182,7 +1198,7 @@ VARcalcisnotnil(ValPtr ret, const ValRec
 
 #define MINMAX_TYPE(TYPE, OP)                                          \
        do {                                                            \
-               TYPE *tb1 = Tloc(b1, 0), *tb2 = Tloc(b2, 0), *restrict tbn = 
Tloc(bn, 0); \
+               TYPE *tb1 = b1i.base, *tb2 = b2i.base, *restrict tbn = Tloc(bn, 
0); \
                if (ci1.tpe == cand_dense && ci2.tpe == cand_dense) {   \
                        for (BUN i = 0; i < ncand; i++) {               \
                                oid x1 = canditer_next_dense(&ci1) - 
b1hseqbase; \
@@ -1240,6 +1256,8 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA
        if (bn == NULL)
                return NULL;
 
+       BATiter b1i = bat_iterator(b1);
+       BATiter b2i = bat_iterator(b2);
        switch (ATOMbasetype(b1->ttype)) {
        case TYPE_bte:
                MINMAX_TYPE(bte, <);
@@ -1266,7 +1284,6 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA
                break;
        default: {
                const void *restrict nil = ATOMnilptr(b1->ttype);
-               BATiter b1i = bat_iterator(b1), b2i = bat_iterator(b2);
                int (*cmp)(const void *, const void *) = ATOMcompare(b1->ttype);
 
                if (ATOMvarsized(b1->ttype)) {
@@ -1283,8 +1300,6 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA
                                                p1 = cmp(p1, p2) < 0 ? p1 : p2;
                                        }
                                        if (tfastins_nocheckVAR(bn, i, p1, 
Tsize(bn)) != GDK_SUCCEED) {
-                                               bat_iterator_end(&b1i);
-                                               bat_iterator_end(&b2i);
                                                goto bunins_failed;
                                        }
                                }
@@ -1301,8 +1316,6 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA
                                                p1 = cmp(p1, p2) < 0 ? p1 : p2;
                                        }
                                        if (tfastins_nocheckVAR(bn, i, p1, 
Tsize(bn)) != GDK_SUCCEED) {
-                                               bat_iterator_end(&b1i);
-                                               bat_iterator_end(&b2i);
                                                goto bunins_failed;
                                        }
                                }
@@ -1342,10 +1355,10 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA
                                }
                        }
                }
-               bat_iterator_end(&b1i);
-               bat_iterator_end(&b2i);
-       }
-       }
+       }
+       }
+       bat_iterator_end(&b1i);
+       bat_iterator_end(&b2i);
 
        bn->tnil = nils;
        bn->tnonil = !nils;
@@ -1371,13 +1384,15 @@ BATcalcmin(BAT *b1, BAT *b2, BAT *s1, BA
 
        return bn;
   bunins_failed:
+       bat_iterator_end(&b1i);
+       bat_iterator_end(&b2i);
        BBPreclaim(bn);
        return NULL;
 }
 
 #define MINMAX_NONIL_TYPE(TYPE, OP)                                    \
        do {                                                            \
-               TYPE *tb1 = Tloc(b1, 0), *tb2 = Tloc(b2, 0), *restrict tbn = 
Tloc(bn, 0); \
+               TYPE *tb1 = b1i.base, *tb2 = b2i.base, *restrict tbn = Tloc(bn, 
0); \
                if (ci1.tpe == cand_dense && ci2.tpe == cand_dense) {   \
                        for (BUN i = 0; i < ncand; i++) {               \
                                oid x1 = canditer_next_dense(&ci1) - 
b1hseqbase; \
@@ -1443,6 +1458,8 @@ BATcalcmin_no_nil(BAT *b1, BAT *b2, BAT 
        if (bn == NULL)
                return NULL;
 
+       BATiter b1i = bat_iterator(b1);
+       BATiter b2i = bat_iterator(b2);
        switch (ATOMbasetype(b1->ttype)) {
        case TYPE_bte:
                MINMAX_NONIL_TYPE(bte, <);
@@ -1469,7 +1486,6 @@ BATcalcmin_no_nil(BAT *b1, BAT *b2, BAT 
                break;
        default: {
                const void *restrict nil = ATOMnilptr(b1->ttype);
-               BATiter b1i = bat_iterator(b1), b2i = bat_iterator(b2);
                int (*cmp)(const void *, const void *) = ATOMcompare(b1->ttype);
 
                if (ATOMvarsized(b1->ttype)) {
@@ -1490,8 +1506,6 @@ BATcalcmin_no_nil(BAT *b1, BAT *b2, BAT 
                                                p1 = cmp(p2, nil) != 0 && 
cmp(p2, p1) < 0 ? p2 : p1;
                                        }
                                        if (tfastins_nocheckVAR(bn, i, p1, 
Tsize(bn)) != GDK_SUCCEED) {
-                                               bat_iterator_end(&b1i);
-                                               bat_iterator_end(&b2i);
                                                goto bunins_failed;
                                        }
                                }
@@ -1512,8 +1526,6 @@ BATcalcmin_no_nil(BAT *b1, BAT *b2, BAT 
                                                p1 = cmp(p2, nil) != 0 && 
cmp(p2, p1) < 0 ? p2 : p1;
                                        }
                                        if (tfastins_nocheckVAR(bn, i, p1, 
Tsize(bn)) != GDK_SUCCEED) {
-                                               bat_iterator_end(&b1i);
-                                               bat_iterator_end(&b2i);
                                                goto bunins_failed;
                                        }
                                }
@@ -1561,10 +1573,10 @@ BATcalcmin_no_nil(BAT *b1, BAT *b2, BAT 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to