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 -- [email protected]
To unsubscribe send an email to [email protected]