Changeset: c0d04f616d87 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c0d04f616d87
Modified Files:
        monetdb5/modules/kernel/algebra.mx
Branch: default
Log Message:

Converted a whole bunch of Mx macro uses to functions using function pointers.
In the process, elimiated a whole bunch of CMD* intermediate (M4-era)
functions.


diffs (truncated from 603 to 300 lines):

diff --git a/monetdb5/modules/kernel/algebra.mx 
b/monetdb5/modules/kernel/algebra.mx
--- a/monetdb5/modules/kernel/algebra.mx
+++ b/monetdb5/modules/kernel/algebra.mx
@@ -1486,72 +1486,6 @@ CMDbandjoin(BAT **result, BAT *left, BAT
        return (*result = BATbandjoin(left, right, minus, plus, *li, *hi)) ? 
GDK_SUCCEED : GDK_FAIL;
 }
 
-/*
- * @-
- * Let's cut this text down with some Mx macros
- */
-@= unary
-static int
-CMD@1(BAT **result, BAT *b)
-{
-       return (*result = @2(b))?GDK_SUCCEED:GDK_FAIL;
-}
-@= binary
-static int
-CMD@1(BAT **result, BAT *left, BAT* right)
-{
-       return (*result = @2(left, right))?GDK_SUCCEED:GDK_FAIL;
-}
-@= binaryestimate
-static int
-CMD@1(BAT **result, BAT *left, BAT* right, lng *estimate)
-{
-       return (*result = @2(left, right, *estimate == lng_nil || *estimate < 0 
? BUN_NONE : (*estimate >= (lng) BUN_MAX ? BUN_MAX : (BUN) *estimate))) ? 
GDK_SUCCEED : GDK_FAIL;
-}
-@= binaryint
-static int
-CMD@1(BAT **result, BAT* b, int *param)
-{
-       return (*result = @2(b, *param))?GDK_SUCCEED:GDK_FAIL;
-}
-@
-@h
-#define BATtdiff(l,r) BATmirror(BATkdiff(BATmirror(l),BATmirror(r)))
-#define BATtintersect(l,r) BATmirror(BATkintersect(BATmirror(l),BATmirror(r)))
-#define BATtsort(b) BATmirror(BATsort(BATmirror(b)))
-#define BATtsort_rev(b) BATmirror(BATsort_rev(BATmirror(b)))
-#define BAThistogram_rev(b) BAThistogram(BATmirror(b))
-#define BATmark_default(b) BATmark(b,OIDnew(BATcount(b)))
-#define BATtmark_default(b) 
BATmirror(BATmark(BATmirror(b),OIDnew(BATcount(b))))
-#define BAThmark_default(b) BATmirror(BATmark(b,OIDnew(BATcount(b))))
-#define BATwcopy(b) BATcopy(b, b->htype, b->ttype, 1)
-@c
-@:unary(histogram,BAThistogram)@
-@:unary(sort,BATsort)@
-@:unary(sort_rev,BATsort_rev)@
-@:unary(tsort,BATtsort)@
-@:unary(ssort,BATssort)@
-@:unary(ssort_rev,BATssort_rev)@
-@:unary(number,BATnumber)@
-@:unary(copy,BATwcopy)@
-@:unary(kunique,BATkunique)@
-@:unary(sunique,BATsunique)@
-@:binary(semijoin,BATsemijoin)@
-@:binary(cross,BATcross)@
-@:binary(antijoin,BATantijoin)@
-@:binaryestimate(join,BATjoin)@
-@:binaryestimate(fetchjoin,BATfetchjoin)@
-@:binaryestimate(leftjoin,BATleftjoin)@
-@:binaryestimate(leftfetchjoin,BATleftfetchjoin)@
-@:binaryestimate(outerjoin,BATouterjoin)@
-@:binary(sunion,BATsunion)@
-@:binary(kunion,BATkunion)@
-@:binary(sintersect,BATsintersect)@
-@:binary(kintersect,BATkintersect)@
-@:binary(sdiff,BATsdiff)@
-@:binary(kdiff,BATkdiff)@
-@:binaryint(sample,BATsample)@
-
 static int
 CMDgen_group(BAT **result, BAT *b )
 {
@@ -1858,11 +1792,11 @@ CMDexistBUN(bit *ret, BAT *b, ptr val, p
        return GDK_SUCCEED;
 }
 
-static int
-CMDmerge(BAT **ret, BAT *b)
+static BAT *
+BATmerge(BAT *b)
 {
        BUN n = BATcount(b);
-       BAT *bn = *ret = BATnew(TYPE_lng, TYPE_void, n);
+       BAT *bn = BATnew(TYPE_lng, TYPE_void, n);
        BATiter bni = bat_iterator(bn), bi = bat_iterator(b);
        BUN p, q;
        lng *r = (lng *) BUNhead(bni, BUNfirst(bn));
@@ -1887,15 +1821,15 @@ CMDmerge(BAT **ret, BAT *b)
        BATkey(bn, BAThkey(b) || BATtkey(b)) ;
        BATkey(BATmirror(bn), FALSE) ;
 
-       return GDK_SUCCEED;
+       return bn;
 }
 
-static int
-CMDsplit(BAT **ret, BAT *b)
+static BAT *
+BATsplit(BAT *b)
 {
        BATiter bi = bat_iterator(b);
        BUN n = BATcount(b);
-       BAT *bn = *ret = BATnew(TYPE_oid, TYPE_oid, n);
+       BAT *bn = BATnew(TYPE_oid, TYPE_oid, n);
        BUN i;
        lng *r = (lng *) BUNhead(bi, BUNfirst(b));
 
@@ -1919,11 +1853,11 @@ CMDsplit(BAT **ret, BAT *b)
        BATkey(bn, FALSE) ;
        BATkey(BATmirror(bn), FALSE) ;
 
-       return GDK_SUCCEED;
+       return bn;
 bunins_failed:
        BATaccessEnd(b,USE_HEAD,MMAP_SEQUENTIAL);
        BBPreclaim(bn);
-       return GDK_FAIL;
+       return NULL;
 }
 
 /*
@@ -2650,145 +2584,261 @@ ALGrangejoin(int *result, int *lid, int 
        throw(MAL, "algebra.rangejoin", GDK_EXCEPTION);
 }
 
-/*
- * @-
- * Let cut this text down with some Mx macro's
- */
-@= ALGunary
-str ALG@1(int *result, int *bid) {
+static str
+ALGunary(int *result, int *bid, BAT *(*func)(BAT *), const char *name)
+{
        BAT *b,*bn;
-       if( (b= BATdescriptor(*bid)) == NULL ){
-               throw(MAL, "algebra.@1", RUNTIME_OBJECT_MISSING);
+
+       if ((b= BATdescriptor(*bid)) == NULL) {
+               throw(MAL, name, RUNTIME_OBJECT_MISSING);
        }
-       CMD@1(&bn,b);
-       if( bn ) {
-               if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ);
-               *result = bn->batCacheid;
-               BBPkeepref(*result);
-               BBPreleaseref(b->batCacheid);
-               return MAL_SUCCEED;
-       }
+       bn = (*func)(b);
        BBPreleaseref(b->batCacheid);
-       throw(MAL, "algebra.@1", GDK_EXCEPTION);
-}
-@= ALGunaryint
-str ALG@1(int *result, int *bid) {
-       BAT *b,*bn= NULL;
-       if( (b= BATdescriptor(*bid)) == NULL ){
-               throw(MAL, "algebra.@1", RUNTIME_OBJECT_MISSING);
-       }
-       CMD@1(&bn,b);
-       if( bn ) {
-               if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ);
-               *result = bn->batCacheid;
-               BBPkeepref(*result);
-               BBPreleaseref(b->batCacheid);
-               return MAL_SUCCEED;
-       }
-       BBPreleaseref(b->batCacheid);
+       if (bn == NULL)
+               throw(MAL, "algebra.@1", GDK_EXCEPTION);
+       if (!(bn->batDirty&2))
+               bn = BATsetaccess(bn, BAT_READ);
+       *result = bn->batCacheid;
+       BBPkeepref(*result);
        return MAL_SUCCEED;
 }
-@= ALGbinary
-str ALG@1(int *result, int *lid, int *rid) {
+
+static str
+ALGbinary(int *result, int *lid, int *rid, BAT *(*func)(BAT *, BAT *), const 
char *name)
+{
        BAT *left, *right,*bn= NULL;
-       if( (left= BATdescriptor(*lid)) == NULL ){
-               throw(MAL, "algebra.@1", RUNTIME_OBJECT_MISSING);
+
+       if ((left = BATdescriptor(*lid)) == NULL) {
+               throw(MAL, name, RUNTIME_OBJECT_MISSING);
        }
-       if( (right= BATdescriptor(*rid)) == NULL ){
+       if ((right = BATdescriptor(*rid)) == NULL) {
                BBPreleaseref(left->batCacheid);
-               throw(MAL, "algebra.@1", RUNTIME_OBJECT_MISSING);
+               throw(MAL, name, RUNTIME_OBJECT_MISSING);
        }
-       if( CMD@1(&bn,left, right) == GDK_FAIL){
-               BBPreleaseref(left->batCacheid);
-               BBPreleaseref(right->batCacheid);
-               if( bn) BBPunfix(bn->batCacheid);
-               throw(MAL, "algebra.@1", GDK_EXCEPTION);
-       }
-       if( bn ) {
-               if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ);
-               *result = bn->batCacheid;
-               BBPkeepref(*result);
-               BBPreleaseref(left->batCacheid);
-               BBPreleaseref(right->batCacheid);
-               return MAL_SUCCEED;
-       }
+       bn = (*func)(left, right);
        BBPreleaseref(left->batCacheid);
        BBPreleaseref(right->batCacheid);
-       throw(MAL, "algebra.@1", GDK_EXCEPTION);
+       if (bn == NULL)
+               throw(MAL, name, GDK_EXCEPTION);
+       if (!(bn->batDirty&2))
+               bn = BATsetaccess(bn, BAT_READ);
+       *result = bn->batCacheid;
+       BBPkeepref(*result);
+       return MAL_SUCCEED;
 }
-@= ALGbinaryint
-str ALG@1(int *result, int* bid, int *param) {
-       BAT *b, *bn= NULL;
-       if( (b= BATdescriptor(*bid)) == NULL ){
-               throw(MAL, "algebra.@1", RUNTIME_OBJECT_MISSING);
+
+static str
+ALGbinaryint(bat *result, bat *bid, int *param, BAT *(*func)(BAT *, BUN), 
const char *name)
+{
+       BAT *b, *bn = NULL;
+
+       if ((b = BATdescriptor(*bid)) == NULL) {
+               throw(MAL, name, RUNTIME_OBJECT_MISSING);
        }
-       CMD@1(&bn,b, param);
-       if( bn ) {
-               if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ);
-               *result = bn->batCacheid;
-               BBPkeepref(*result);
-               BBPreleaseref(b->batCacheid);
-               return MAL_SUCCEED;
+       bn = (*func)(b, *param);
+       BBPreleaseref(b->batCacheid);
+       if (bn == NULL)
+               throw(MAL, name, GDK_EXCEPTION);
+       if (!(bn->batDirty & 2))
+               bn = BATsetaccess(bn, BAT_READ);
+       *result = bn->batCacheid;
+       BBPkeepref(*result);
+       return MAL_SUCCEED;
+}
+
+static str
+ALGbinaryestimate(int *result, int *lid, int *rid, lng *estimate,
+                                 BAT *(*func)(BAT *, BAT *, BUN), const char 
*name)
+{
+       BAT *left, *right, *bn = NULL;
+
+       if ((left = BATdescriptor(*lid)) == NULL) {
+               throw(MAL, name, RUNTIME_OBJECT_MISSING);
        }
-       BBPreleaseref(b->batCacheid);
-       throw(MAL, "algebra.@1", GDK_EXCEPTION);
-}
-@= ALGbinaryestimate
-str ALG@1estimate(int *result, int *lid, int *rid, lng *estimate) {
-       BAT *left, *right,*bn=NULL;
-       if( (left= BATdescriptor(*lid)) == NULL ){
-               throw(MAL, "algebra.@1", RUNTIME_OBJECT_MISSING);
+       if ((right = BATdescriptor(*rid)) == NULL) {
+               BBPreleaseref(left->batCacheid);
+               throw(MAL, name, RUNTIME_OBJECT_MISSING);
        }
-       if( (right= BATdescriptor(*rid)) == NULL ){
-               BBPreleaseref(left->batCacheid);
-               throw(MAL, "algebra.@1", RUNTIME_OBJECT_MISSING);
-       }
-       if( CMD@1(&bn,left, right, estimate) == GDK_FAIL){
-               BBPreleaseref(left->batCacheid);
-               BBPreleaseref(right->batCacheid);
-               if( bn) BBPunfix(bn->batCacheid);
-               throw(MAL, "algebra.@1", GDK_EXCEPTION);
-       }
-       if( bn ) {
-               if (!(bn->batDirty&2)) bn = BATsetaccess(bn, BAT_READ);
-               *result = bn->batCacheid;
-               BBPkeepref(*result);
-               BBPreleaseref(left->batCacheid);
-               BBPreleaseref(right->batCacheid);
-               return MAL_SUCCEED;
-       }
+       bn = (*func)(left, right, estimate ? (BUN) *estimate : BUN_NONE);
        BBPreleaseref(left->batCacheid);
        BBPreleaseref(right->batCacheid);
-       throw(MAL, "algebra.@1", GDK_EXCEPTION);
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to