Changeset: 4905e134e9ee for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4905e134e9ee
Modified Files:
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_calc.c
        gdk/gdk_calc_private.h
Branch: nilmask
Log Message:

Checkpoint: implementing operations on unsigned types.


diffs (truncated from 2512 to 300 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -2001,14 +2001,17 @@ BUNfnd(BAT *b, const void *v)
                }
                switch (ATOMbasetype(bi.type)) {
                case TYPE_bte:
+               case TYPE_ubte:
                        HASHloop_bte(bi, b->thash, r, v)
                                break;
                        break;
                case TYPE_sht:
+               case TYPE_usht:
                        HASHloop_sht(bi, b->thash, r, v)
                                break;
                        break;
                case TYPE_int:
+               case TYPE_uint:
                        HASHloop_int(bi, b->thash, r, v)
                                break;
                        break;
@@ -2021,11 +2024,13 @@ BUNfnd(BAT *b, const void *v)
                                break;
                        break;
                case TYPE_lng:
+               case TYPE_ulng:
                        HASHloop_lng(bi, b->thash, r, v)
                                break;
                        break;
 #ifdef HAVE_HGE
                case TYPE_hge:
+               case TYPE_uhge:
                        HASHloop_hge(bi, b->thash, r, v)
                                break;
                        break;
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -2031,19 +2031,34 @@ BATordered(BAT *b)
                case TYPE_bte:
                        BAT_ORDERED(bte);
                        break;
+               case TYPE_ubte:
+                       BAT_ORDERED(ubte);
+                       break;
                case TYPE_sht:
                        BAT_ORDERED(sht);
                        break;
+               case TYPE_usht:
+                       BAT_ORDERED(usht);
+                       break;
                case TYPE_int:
                        BAT_ORDERED(int);
                        break;
+               case TYPE_uint:
+                       BAT_ORDERED(uint);
+                       break;
                case TYPE_lng:
                        BAT_ORDERED(lng);
                        break;
+               case TYPE_ulng:
+                       BAT_ORDERED(ulng);
+                       break;
 #ifdef HAVE_HGE
                case TYPE_hge:
                        BAT_ORDERED(hge);
                        break;
+               case TYPE_uhge:
+                       BAT_ORDERED(uhge);
+                       break;
 #endif
                case TYPE_flt:
                        BAT_ORDERED_FP(flt);
@@ -2207,19 +2222,34 @@ BATordered_rev(BAT *b)
                case TYPE_bte:
                        BAT_REVORDERED(bte);
                        break;
+               case TYPE_ubte:
+                       BAT_REVORDERED(ubte);
+                       break;
                case TYPE_sht:
                        BAT_REVORDERED(sht);
                        break;
+               case TYPE_usht:
+                       BAT_REVORDERED(usht);
+                       break;
                case TYPE_int:
                        BAT_REVORDERED(int);
                        break;
+               case TYPE_uint:
+                       BAT_REVORDERED(uint);
+                       break;
                case TYPE_lng:
                        BAT_REVORDERED(lng);
                        break;
+               case TYPE_ulng:
+                       BAT_REVORDERED(ulng);
+                       break;
 #ifdef HAVE_HGE
                case TYPE_hge:
                        BAT_REVORDERED(hge);
                        break;
+               case TYPE_uhge:
+                       BAT_REVORDERED(uhge);
+                       break;
 #endif
                case TYPE_flt:
                        BAT_REVORDERED_FP(flt);
@@ -2838,19 +2868,23 @@ BATconstant(oid hseq, int tailtype, cons
                                memset(p, 0x00, 4 * ((n + 31) / 32));
                        break;
                case TYPE_bte:
+               case TYPE_ubte:
                        memset(p, *(bte*)v, n);
                        break;
                case TYPE_sht:
+               case TYPE_usht:
                        for (i = 0; i < n; i++)
                                ((sht *) p)[i] = *(sht *) v;
                        break;
                case TYPE_int:
+               case TYPE_uint:
                case TYPE_flt:
                        assert(sizeof(int) == sizeof(flt));
                        for (i = 0; i < n; i++)
                                ((int *) p)[i] = *(int *) v;
                        break;
                case TYPE_lng:
+               case TYPE_ulng:
                case TYPE_dbl:
                        assert(sizeof(lng) == sizeof(dbl));
                        for (i = 0; i < n; i++)
@@ -2858,6 +2892,7 @@ BATconstant(oid hseq, int tailtype, cons
                        break;
 #ifdef HAVE_HGE
                case TYPE_hge:
+               case TYPE_uhge:
                        for (i = 0; i < n; i++)
                                ((hge *) p)[i] = *(hge *) v;
                        break;
diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -55,13 +55,11 @@ BATcalcnot(BAT *b, BAT *s)
 
        bhseqbase = b->hseqbase;
        canditer_init(&ci, b, s);
-       if (ci.ncand == 0)
-               return BATconstant(ci.hseq, b->ttype,
-                                  ATOMnilptr(b->ttype), ci.ncand, TRANSIENT);
-
        bn = COLnew(ci.hseq, b->ttype, ci.ncand, TRANSIENT);
        if (bn == NULL)
                return NULL;
+       if (ci.ncand == 0)
+               return bn;
 
        BATiter bi = bat_iterator(b);
        switch (ATOMbasetype(bi.type)) {
@@ -102,19 +100,34 @@ BATcalcnot(BAT *b, BAT *s)
                        UNARY_2TYPE_FUNC_nilcheck(bte, bte, NOT, 
ON_OVERFLOW1(bte, "NOT"));
                }
                break;
+       case TYPE_ubte:
+               UNARY_2TYPE_FUNC_nonil(ubte, ubte, NOT);
+               break;
        case TYPE_sht:
                UNARY_2TYPE_FUNC_nilcheck(sht, sht, NOT, ON_OVERFLOW1(sht, 
"NOT"));
                break;
+       case TYPE_usht:
+               UNARY_2TYPE_FUNC_nonil(usht, usht, NOT);
+               break;
        case TYPE_int:
                UNARY_2TYPE_FUNC_nilcheck(int, int, NOT, ON_OVERFLOW1(int, 
"NOT"));
                break;
+       case TYPE_uint:
+               UNARY_2TYPE_FUNC_nonil(uint, uint, NOT);
+               break;
        case TYPE_lng:
                UNARY_2TYPE_FUNC_nilcheck(lng, lng, NOT, ON_OVERFLOW1(lng, 
"NOT"));
                break;
+       case TYPE_ulng:
+               UNARY_2TYPE_FUNC_nonil(ulng, ulng, NOT);
+               break;
 #ifdef HAVE_HGE
        case TYPE_hge:
                UNARY_2TYPE_FUNC_nilcheck(hge, hge, NOT, ON_OVERFLOW1(hge, 
"NOT"));
                break;
+       case TYPE_uhge:
+               UNARY_2TYPE_FUNC_nonil(uhge, uhge, NOT);
+               break;
 #endif
        default:
                GDKerror("type %s not supported.\n", ATOMname(bi.type));
@@ -166,6 +179,9 @@ VARcalcnot(ValPtr ret, const ValRecord *
                        }
                }
                break;
+       case TYPE_ubte:
+               ret->val.ubtval = ~v->val.ubtval;
+               break;
        case TYPE_sht:
                if (is_sht_nil(v->val.shval))
                        ret->val.shval = sht_nil;
@@ -178,6 +194,9 @@ VARcalcnot(ValPtr ret, const ValRecord *
                        }
                }
                break;
+       case TYPE_usht:
+               ret->val.ushval = ~v->val.ushval;
+               break;
        case TYPE_int:
                if (is_int_nil(v->val.ival))
                        ret->val.ival = int_nil;
@@ -190,6 +209,9 @@ VARcalcnot(ValPtr ret, const ValRecord *
                        }
                }
                break;
+       case TYPE_uint:
+               ret->val.uival = ~v->val.uival;
+               break;
        case TYPE_lng:
                if (is_lng_nil(v->val.lval))
                        ret->val.lval = lng_nil;
@@ -202,6 +224,9 @@ VARcalcnot(ValPtr ret, const ValRecord *
                        }
                }
                break;
+       case TYPE_ulng:
+               ret->val.ulval = ~v->val.ulval;
+               break;
 #ifdef HAVE_HGE
        case TYPE_hge:
                if (is_hge_nil(v->val.hval))
@@ -216,6 +241,9 @@ VARcalcnot(ValPtr ret, const ValRecord *
                        }
                }
                break;
+       case TYPE_uhge:
+               ret->val.uhval = ~v->val.uhval;
+               break;
 #endif
        default:
                GDKerror("bad input type %s.\n", ATOMname(v->vtype));
@@ -248,13 +276,11 @@ BATcalcnegate(BAT *b, BAT *s)
 
        bhseqbase = b->hseqbase;
        canditer_init(&ci, b, s);
-       if (ci.ncand == 0)
-               return BATconstant(ci.hseq, b->ttype,
-                                  ATOMnilptr(b->ttype), ci.ncand, TRANSIENT);
-
        bn = COLnew(ci.hseq, b->ttype, ci.ncand, TRANSIENT);
        if (bn == NULL)
                return NULL;
+       if (ci.ncand)
+               return bn;
 
        BATiter bi = bat_iterator(b);
        switch (ATOMbasetype(bi.type)) {
@@ -386,13 +412,11 @@ BATcalcabsolute(BAT *b, BAT *s)
 
        bhseqbase = b->hseqbase;
        canditer_init(&ci, b, s);
-       if (ci.ncand == 0)
-               return BATconstant(ci.hseq, b->ttype,
-                                  ATOMnilptr(b->ttype), ci.ncand, TRANSIENT);
-
        bn = COLnew(ci.hseq, b->ttype, ci.ncand, TRANSIENT);
        if (bn == NULL)
                return NULL;
+       if (ci.ncand == 0)
+               return bn;
 
        BATiter bi = bat_iterator(b);
        switch (ATOMbasetype(bi.type)) {
@@ -419,6 +443,16 @@ BATcalcabsolute(BAT *b, BAT *s)
        case TYPE_dbl:
                UNARY_2TYPE_FUNC(dbl, dbl, fabs);
                break;
+       case TYPE_ubte:
+       case TYPE_usht:
+       case TYPE_uint:
+       case TYPE_ulng:
+#ifdef HAVE_HGE
+       case TYPE_uhge:
+#endif
+               if (BATappend(bn, b, s, false) != GDK_SUCCEED)
+                       goto bailout;
+               break;
        default:
                GDKerror("bad input type %s.\n", ATOMname(bi.type));
                goto bailout;
@@ -497,6 +531,15 @@ VARcalcabsolute(ValPtr ret, const ValRec
                else
                        ret->val.dval = fabs(v->val.dval);
                break;
+       case TYPE_ubte:
+       case TYPE_usht:
+       case TYPE_uint:
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to