Changeset: e4acf27fe145 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/e4acf27fe145 Modified Files: gdk/gdk.h gdk/gdk_analytic_func.c gdk/gdk_bat.c gdk/gdk_batop.c Branch: default Log Message:
Don't use BUNtloc for TYPE_msk and introduce BUNtmsk for TYPE_msk.
diffs (243 lines):
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1173,10 +1173,11 @@ typedef var_t stridx_t;
#define BUNtvaroff(bi,p) VarHeapVal((bi).base, (p), (bi).width)
-#define BUNtloc(bi,p) (ATOMstorage((bi).type) == TYPE_msk ? Tmsk(&(bi), p) :
(void *) ((char *) (bi).base + ((p) << (bi).shift)))
+#define BUNtmsk(bi,p) Tmsk(&(bi), (p))
+#define BUNtloc(bi,p) (assert((bi).type != TYPE_msk), ((void *) ((char *)
(bi).base + ((p) << (bi).shift))))
#define BUNtpos(bi,p) Tpos(&(bi),p)
#define BUNtvar(bi,p) (assert((bi).type && (bi).b->tvarsized), (void *)
((bi).vh->base+BUNtvaroff(bi,p)))
-#define BUNtail(bi,p)
((bi).type?(bi).b->tvarsized?BUNtvar(bi,p):BUNtloc(bi,p):BUNtpos(bi,p))
+#define BUNtail(bi,p)
((bi).type?(bi).b->tvarsized?BUNtvar(bi,p):(bi).type==TYPE_msk?BUNtmsk(bi,p):BUNtloc(bi,p):BUNtpos(bi,p))
#define BUNlast(b) (assert((b)->batCount <= BUN_MAX), (b)->batCount)
@@ -1982,6 +1983,7 @@ Tpos(BATiter *bi, BUN p)
static inline bool
Tmskval(BATiter *bi, BUN p)
{
+ assert(ATOMstorage(bi->type) == TYPE_msk);
return ((uint32_t *) bi->base)[p / 32] & (1U << (p % 32));
}
diff --git a/gdk/gdk_analytic_func.c b/gdk/gdk_analytic_func.c
--- a/gdk/gdk_analytic_func.c
+++ b/gdk/gdk_analytic_func.c
@@ -1003,7 +1003,7 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
for (; k < i;) { \
j = k; \
do { \
- const void *next = BUNtvar(bi, k);
\
+ const void *next = BUNtvar(bi, k); \
if (atomcmp(next, nil) != 0) { \
if (atomcmp(curval, nil) == 0) \
curval = next; \
@@ -1021,7 +1021,7 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
for (; k < i;) { \
j = k; \
do { \
- const void *next = BUNtloc(bi, k);
\
+ const void *next = BUNtloc(bi, k); \
if (atomcmp(next, nil) != 0) { \
if (atomcmp(curval, nil) == 0) \
curval = next; \
@@ -1045,7 +1045,7 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
l = i - 1; \
if (ATOMvarsized(tpe)) { \
for (j = l; ; j--) { \
- const void *next = BUNtvar(bi, j);
\
+ const void *next = BUNtvar(bi, j); \
if (atomcmp(next, nil) != 0) { \
if (atomcmp(curval, nil) == 0) \
curval = next; \
@@ -1067,7 +1067,7 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
} \
} else { \
for (j = l; ; j--) { \
- const void *next = BUNtloc(bi, j);
\
+ const void *next = BUNtloc(bi, j); \
if (atomcmp(next, nil) != 0) { \
if (atomcmp(curval, nil) == 0) \
curval = next; \
@@ -1094,10 +1094,10 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
#define ANALYTICAL_MIN_MAX_CALC_OTHERS_ALL_ROWS(GT_LT) \
do { \
- const void *curval = (void*) nil;
\
+ const void *curval = (void*) nil; \
if (ATOMvarsized(tpe)) { \
for (j = k; j < i; j++) { \
- const void *next = BUNtvar(bi, j);
\
+ const void *next = BUNtvar(bi, j); \
if (atomcmp(next, nil) != 0) { \
if (atomcmp(curval, nil) == 0) \
curval = next; \
@@ -1110,7 +1110,7 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
goto cleanup; \
} else { \
for (j = k; j < i; j++) { \
- const void *next = BUNtloc(bi, j);
\
+ const void *next = BUNtloc(bi, j); \
if (atomcmp(next, nil) != 0) { \
if (atomcmp(curval, nil) == 0) \
curval = next; \
@@ -1130,14 +1130,14 @@ GDKanalyticallead(BAT *r, BAT *b, BAT *p
do { \
if (ATOMvarsized(tpe)) { \
for (; k < i; k++) { \
- const void *next = BUNtvar(bi, k);
\
+ const void *next = BUNtvar(bi, k); \
if ((res = tfastins_nocheckVAR(r, k, next)) !=
GDK_SUCCEED) \
goto cleanup; \
has_nils |= atomcmp(next, nil) == 0; \
} \
} else { \
for (; k < i; k++) { \
- const void *next = BUNtloc(bi, k);
\
+ const void *next = BUNtloc(bi, k); \
memcpy(rcast, next, width); \
rcast += width; \
has_nils |= atomcmp(next, nil) == 0; \
@@ -1266,7 +1266,7 @@ GDKanalytical##OP(BAT *r, BAT *p, BAT *o
BATiter ei = bat_iterator(e); \
bool has_nils = false, last = false; \
oid i = 0, j = 0, k = 0, l = 0, cnt = BATcount(b), *restrict start =
si.base, *restrict end = ei.base, \
- *levels_offset = NULL, nlevels = 0; \
+ *levels_offset = NULL, nlevels = 0; \
bit *np = pi.base, *op = oi.base; \
const void *nil = ATOMnilptr(tpe); \
int (*atomcmp)(const void *, const void *) = ATOMcompare(tpe); \
@@ -1274,7 +1274,7 @@ GDKanalytical##OP(BAT *r, BAT *p, BAT *o
gdk_return res = GDK_SUCCEED; \
uint16_t width = r->twidth; \
uint8_t *restrict rcast = (uint8_t *) Tloc(r, 0); \
- BAT *st = NULL; \
+ BAT *st = NULL; \
\
if (cnt > 0) { \
switch (frame_type) { \
@@ -1292,9 +1292,9 @@ GDKanalytical##OP(BAT *r, BAT *p, BAT *o
} break; \
default: { \
if (!(st = GDKinitialize_segment_tree())) { \
- res = GDK_FAIL; \
- goto cleanup; \
- } \
+ res = GDK_FAIL; \
+ goto cleanup; \
+ } \
ANALYTICAL_MIN_MAX_BRANCHES(MIN_MAX, GT_LT, OTHERS); \
} \
} \
@@ -1309,7 +1309,7 @@ cleanup:
\
bat_iterator_end(&bi); \
bat_iterator_end(&si); \
bat_iterator_end(&ei); \
- BBPreclaim(st); \
+ BBPreclaim(st); \
return res; \
}
@@ -3424,13 +3424,13 @@ GDKanalytical_##NAME(BAT *r, BAT *p, BAT
BATiter ei = bat_iterator(e); \
bool has_nils = false, last = false; \
oid i = 0, j = 0, k = 0, l = 0, cnt = BATcount(b), *restrict start =
si.base, *restrict end = ei.base, \
- *levels_offset = NULL, nlevels = 0; \
+ *levels_offset = NULL, nlevels = 0; \
lng n = 0; \
bit *np = pi.base, *op = oi.base; \
dbl *rb = (dbl *) Tloc(r, 0), mean = 0, m2 = 0, delta; \
void *segment_tree = NULL; \
gdk_return res = GDK_SUCCEED; \
- BAT *st = NULL; \
+ BAT *st = NULL; \
\
if (cnt > 0) { \
switch (frame_type) { \
@@ -3448,9 +3448,9 @@ GDKanalytical_##NAME(BAT *r, BAT *p, BAT
} break; \
default: { \
if (!(st = GDKinitialize_segment_tree())) { \
- res = GDK_FAIL; \
- goto cleanup; \
- } \
+ res = GDK_FAIL; \
+ goto cleanup; \
+ } \
ANALYTICAL_STATISTICS_BRANCHES(STDEV_VARIANCE_OTHERS,
SAMPLE, OP); \
} \
} \
@@ -3469,7 +3469,7 @@ cleanup:
\
bat_iterator_end(&bi); \
bat_iterator_end(&si); \
bat_iterator_end(&ei); \
- BBPreclaim(st); \
+ BBPreclaim(st); \
return res; \
nosupport: \
GDKerror("42000!%s of type %s unsupported.\n", DESC, ATOMname(tpe)); \
@@ -3647,13 +3647,13 @@ GDKanalytical_##NAME(BAT *r, BAT *p, BAT
BATiter ei = bat_iterator(e); \
bool has_nils = false, last = false; \
oid i = 0, j = 0, k = 0, l = 0, cnt = BATcount(b1), *restrict start =
si.base, *restrict end = ei.base, \
- *levels_offset = NULL, nlevels = 0; \
+ *levels_offset = NULL, nlevels = 0; \
lng n = 0; \
bit *np = pi.base, *op = oi.base; \
dbl *rb = (dbl *) Tloc(r, 0), mean1 = 0, mean2 = 0, m2 = 0, delta1,
delta2; \
void *segment_tree = NULL; \
gdk_return res = GDK_SUCCEED; \
- BAT *st = NULL; \
+ BAT *st = NULL; \
\
if (cnt > 0) { \
switch (frame_type) { \
@@ -3671,9 +3671,9 @@ GDKanalytical_##NAME(BAT *r, BAT *p, BAT
} break; \
default: { \
if (!(st = GDKinitialize_segment_tree())) { \
- res = GDK_FAIL; \
- goto cleanup; \
- } \
+ res = GDK_FAIL; \
+ goto cleanup; \
+ } \
ANALYTICAL_STATISTICS_BRANCHES(COVARIANCE_OTHERS,
SAMPLE, OP); \
} \
} \
@@ -3693,7 +3693,7 @@ cleanup:
\
bat_iterator_end(&b2i); \
bat_iterator_end(&si); \
bat_iterator_end(&ei); \
- BBPreclaim(st); \
+ BBPreclaim(st); \
return res; \
nosupport: \
GDKerror("42000!covariance of type %s unsupported.\n", ATOMname(tpe)); \
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1462,6 +1462,8 @@ BUNinplacemulti(BAT *b, const oid *posit
} else {
val = BUNtpos(bi, p);
}
+ } else if (bi.type == TYPE_msk) {
+ val = BUNtmsk(bi, p);
} else {
val = BUNtloc(bi, p);
}
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -1334,7 +1334,7 @@ BATappend_or_update(BAT *b, BAT *p, cons
bat_iterator_end(&ni);
return GDK_FAIL;
}
- if (BUNappend(b, Tmsk(&ni, i), force) !=
GDK_SUCCEED) {
+ if (BUNappend(b, BUNtmsk(ni, i), force) !=
GDK_SUCCEED) {
bat_iterator_end(&ni);
return GDK_FAIL;
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]
