Changeset: 7180519acca3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7180519acca3
Modified Files:
sql/backends/monet5/dict.c
Branch: Jan2022
Log Message:
Implemented hge decompress case and cleanup
diffs (120 lines):
diff --git a/sql/backends/monet5/dict.c b/sql/backends/monet5/dict.c
--- a/sql/backends/monet5/dict.c
+++ b/sql/backends/monet5/dict.c
@@ -279,7 +279,21 @@ DICTcompress_col(Client cntxt, MalBlkPtr
return msg;
}
-/* improve decompress of hge types */
+#define decompress_loop(TPE) \
+ do { \
+ TPE *up = Tloc(u, 0); \
+ TPE *restrict bp = Tloc(b, 0); \
+ BATloop(o, p, q) { \
+ TPE v = up[op[p]]; \
+ nils |= is_##TPE##_nil(v); \
+ bp[p] = v; \
+ } \
+ BATsetcount(b, BATcount(o)); \
+ BATnegateprops(b); \
+ b->tnil = nils; \
+ b->tnonil = !nils; \
+ } while (0)
+
BAT *
DICTdecompress_(BAT *o, BAT *u, role_t role)
{
@@ -294,33 +308,19 @@ DICTdecompress_(BAT *o, BAT *u, role_t r
if (o->ttype == TYPE_bte) {
unsigned char *op = Tloc(o, 0);
- if (ATOMbasetype(u->ttype) == TYPE_int) {
- int *up = Tloc(u, 0);
- int *bp = Tloc(b, 0);
-
- BATloop(o, p, q) {
- int v = up[op[p]];
- nils |= is_int_nil(v);
- bp[p] = v;
- }
- BATsetcount(b, BATcount(o));
- BATnegateprops(b);
- b->tnil = nils;
- b->tnonil = !nils;
- } else if (ATOMbasetype(u->ttype) == TYPE_lng) {
- lng *up = Tloc(u, 0);
- lng *bp = Tloc(b, 0);
-
- BATloop(o, p, q) {
- lng v = up[op[p]];
- nils |= is_lng_nil(v);
- bp[p] = v;
- }
- BATsetcount(b, BATcount(o));
- BATnegateprops(b);
- b->tnil = nils;
- b->tnonil = !nils;
- } else {
+ switch (ATOMbasetype(u->ttype)) {
+ case TYPE_int:
+ decompress_loop(int);
+ break;
+ case TYPE_lng:
+ decompress_loop(lng);
+ break;
+#ifdef HAVE_HGE
+ case TYPE_hge:
+ decompress_loop(hge);
+ break;
+#endif
+ default:
BATloop(o, p, q) {
BUN up = op[p];
if (BUNappend(b, BUNtail(ui, up), false) !=
GDK_SUCCEED) {
@@ -334,33 +334,19 @@ DICTdecompress_(BAT *o, BAT *u, role_t r
assert(o->ttype == TYPE_sht);
unsigned short *op = Tloc(o, 0);
- if (ATOMbasetype(u->ttype) == TYPE_int) {
- int *up = Tloc(u, 0);
- int *bp = Tloc(b, 0);
-
- BATloop(o, p, q) {
- int v = up[op[p]];
- nils |= is_int_nil(v);
- bp[p] = v;
- }
- BATsetcount(b, BATcount(o));
- BATnegateprops(b);
- b->tnil = nils;
- b->tnonil = !nils;
- } else if (ATOMbasetype(u->ttype) == TYPE_lng) {
- lng *up = Tloc(u, 0);
- lng *bp = Tloc(b, 0);
-
- BATloop(o, p, q) {
- lng v = up[op[p]];
- nils |= is_lng_nil(v);
- bp[p] = v;
- }
- BATsetcount(b, BATcount(o));
- BATnegateprops(b);
- b->tnil = nils;
- b->tnonil = !nils;
- } else {
+ switch (ATOMbasetype(u->ttype)) {
+ case TYPE_int:
+ decompress_loop(int);
+ break;
+ case TYPE_lng:
+ decompress_loop(lng);
+ break;
+#ifdef HAVE_HGE
+ case TYPE_hge:
+ decompress_loop(hge);
+ break;
+#endif
+ default:
BATloop(o, p, q) {
BUN up = op[p];
if (BUNappend(b, BUNtail(ui, up), false) !=
GDK_SUCCEED) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list