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

Reply via email to