Changeset: ca7227f9ceee for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ca7227f9ceee Modified Files: gdk/gdk_batop.mx Branch: default Log Message:
Steps toward de-mx-ing gdk_batop: hash select.
diffs (137 lines):
diff --git a/gdk/gdk_batop.mx b/gdk/gdk_batop.mx
--- a/gdk/gdk_batop.mx
+++ b/gdk/gdk_batop.mx
@@ -934,64 +934,64 @@ BATslice2(BAT *b, BUN l1, BUN h1, BUN l2
* need an implementation for selecting nil (in MIL, this is done
* through is the "isnil" predicate). So we implement it here.
*/
-@= valselect
- HASHloop@2(bi, b->H->hash, i, tl) {
- if (q < r)
- bunfastins_nocheck(bn, q, BUNt@1(bi, i), tl, Hsize(bn),
Tsize(bn));
- q++;
- }
-@= stringselect
- if (strElimDoubles(b->H->vheap)) {
- BUN p;
- size_t j;
+#define hashselectloop(EXT, BUNtail) \
+ do { \
+ HASHloop##EXT(bi, b->H->hash, i, tl) { \
+ if (q < r) { \
+ bunfastins_nocheck(bn, q, BUNtail(bi, i), \
+ tl, Hsize(bn), Tsize(bn)); \
+ } \
+ q++; \
+ } \
+ } while (0)
+#define hashselect(BUNtail) \
+ do { \
+ switch (ATOMstorage(b->htype)) { \
+ case TYPE_bte: \
+ hashselectloop(_bte, BUNtail); \
+ break; \
+ case TYPE_sht: \
+ hashselectloop(_sht, BUNtail); \
+ break; \
+ case TYPE_int: \
+ hashselectloop(_int, BUNtail); \
+ break; \
+ case TYPE_flt: \
+ hashselectloop(_flt, BUNtail); \
+ break; \
+ case TYPE_dbl: \
+ hashselectloop(_dbl, BUNtail); \
+ break; \
+ case TYPE_lng: \
+ hashselectloop(_lng, BUNtail); \
+ break; \
+ case TYPE_str: \
+ if (strElimDoubles(b->H->vheap)) { \
+ size_t j; \
+ \
+ HASHloop_fstr(bi, b->H->hash, i, j, tl) { \
+ if (q < r) \
+ bunfastins_nocheck(bn, q, \
+ BUNtail(bi,
i), \
+ tl, \
+ Hsize(bn), \
+ Tsize(bn)); \
+ q++; \
+ } \
+ } else { \
+ hashselectloop(_str, BUNtail); \
+ } \
+ break; \
+ default: \
+ if (b->hvarsized) { \
+ hashselectloop(var, BUNtail); \
+ } else { \
+ hashselectloop(loc, BUNtail); \
+ } \
+ break; \
+ } \
+ } while (0)
- HASHloop_fstr(bi, b->H->hash, p, j, tl) {
- if (q < r)
- bunfastins_nocheck(bn, q, BUNt@1(bi, p), tl,
Hsize(bn), Tsize(bn));
- q++;
- }
- } else {
- BUN p;
-
- HASHloop_str(bi, b->H->hash, p, tl) {
- if (q < r)
- bunfastins_nocheck(bn, q, BUNt@1(bi, p), tl,
Hsize(bn), Tsize(bn));
- q++;
- }
- }
-@= hashselect
- switch(ATOMstorage(b->htype)) {
- case TYPE_bte:
- @:valselect(@1,_bte)@
- break;
- case TYPE_sht:
- @:valselect(@1,_sht)@
- break;
- case TYPE_int:
- @:valselect(@1,_int)@
- break;
- case TYPE_flt:
- @:valselect(@1,_flt)@
- break;
- case TYPE_dbl:
- @:valselect(@1,_dbl)@
- break;
- case TYPE_lng:
- @:valselect(@1,_lng)@
- break;
- case TYPE_str:
- @:stringselect(@1)@
- break;
- default:
- if (b->hvarsized) {
- @:valselect(@1,var)@
- } else {
- @:valselect(@1,loc)@
- }
- break;
- }
-@
-@c
static BAT *
BAT_hashselect(BAT *b, BAT *bn, const void *tl)
{
@@ -1015,9 +1015,9 @@ BAT_hashselect(BAT *b, BAT *bn, const vo
r = (BUN) BATcapacity(bn);
if (b->tvarsized) {
- @:hashselect(var)@
+ hashselect(BUNtvar);
} else {
- @:hashselect(loc)@
+ hashselect(BUNtloc);
}
if (q <= r)
break;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list
