Changeset: 4b2db9afe7f1 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4b2db9afe7f1
Modified Files:
        monetdb5/modules/mal/calc_arrays.c
        monetdb5/modules/mal/calc_arrays.h
        monetdb5/modules/mal/calc_arrays.mal
Branch: arrays
Log Message:

matrix addition


diffs (truncated from 329 to 300 lines):

diff --git a/monetdb5/modules/mal/calc_arrays.c 
b/monetdb5/modules/mal/calc_arrays.c
--- a/monetdb5/modules/mal/calc_arrays.c
+++ b/monetdb5/modules/mal/calc_arrays.c
@@ -2435,47 +2435,7 @@ str CMDscalarMULenlarge(Client cntxt, Ma
        return MAL_SUCCEED;
 }
 
-str CMDscalarADDsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci) {
-    BAT *s=NULL;
-
-       int resType, valType;
-
-       /*get the arguments */
-       bat *result = getArgReference_bat(stk, pci, 0);
-       BAT *resBAT = NULL;
-       
-       ptr *array_out = getArgReference(stk, pci, 1);
-       ptr *array_in = getArgReference(stk, pci, 4);
-       
-       bat *vals = getArgReference_bat(stk, pci, 3);
-       BAT *valsBAT = BATdescriptor(*vals);
-       if(!valsBAT)
-               return createException(MAL, "calc.*", RUNTIME_OBJECT_MISSING);
-       
-       /* get the types of the input and output arguments */
-       resType = getColumnType(getArgType(mb, pci, 0));
-       valType = stk->stk[getArg(pci, 1)].vtype;
-       if (resType == TYPE_any)
-        resType = calctype(valType, BATttype(valsBAT));
-
-    resBAT = BATcalccstadd(&stk->stk[getArg(pci, 2)], valsBAT, s, resType, 1);
-
-       if (resBAT == NULL) {
-        BBPunfix(valsBAT->batCacheid);
-        return createException(MAL, "calc.*", OPERATION_FAILED);
-    }
-
-
-       (void) cntxt;
-       BBPunfix(valsBAT->batCacheid);
-       BBPkeepref(*result = resBAT->batCacheid);
-       *array_out = arrayCopy((gdk_array*)*array_in);
-
-       return MAL_SUCCEED;
-}
-
-
-str CMDscalarADDenlarge(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci) {
+static str CMDscalarADD(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, int 
(*typefunc)(int, int)) {
        BAT *s=NULL;
 
        int resType, valType;
@@ -2490,23 +2450,21 @@ str CMDscalarADDenlarge(Client cntxt, Ma
        bat *vals = getArgReference_bat(stk, pci, 3);
        BAT *valsBAT = BATdescriptor(*vals);
        if(!valsBAT)
-               return createException(MAL, "calc.*", RUNTIME_OBJECT_MISSING);
+               return createException(MAL, "calc.+", RUNTIME_OBJECT_MISSING);
        
        /* get the types of the input and output arguments */
        resType = getColumnType(getArgType(mb, pci, 0));
        valType = stk->stk[getArg(pci, 1)].vtype;
        if (resType == TYPE_any)
-        resType = calctypeenlarge(valType, BATttype(valsBAT));
+        resType = (*typefunc)(valType, BATttype(valsBAT));
 
-    resBAT = BATcalccstadd(&stk->stk[getArg(pci, 2)], valsBAT, s, resType, 1);
+       resBAT = BATcalccstadd(&stk->stk[getArg(pci, 2)], valsBAT, s, resType, 
1);
 
        if (resBAT == NULL) {
         BBPunfix(valsBAT->batCacheid);
-        return createException(MAL, "calc.*", OPERATION_FAILED);
+        return createException(MAL, "calc.+", OPERATION_FAILED);
     }
 
-
-       (void) cntxt;
        BBPunfix(valsBAT->batCacheid);
        BBPkeepref(*result = resBAT->batCacheid);
        *array_out = arrayCopy((gdk_array*)*array_in);
@@ -2514,6 +2472,86 @@ str CMDscalarADDenlarge(Client cntxt, Ma
        return MAL_SUCCEED;
 }
 
+str CMDscalarADDsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci) {
+       (void) cntxt;
+
+       return CMDscalarADD(mb, stk, pci, calctype);
+
+}
+
+str CMDscalarADDenlarge(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci) {
+       (void) cntxt;
+       
+       return CMDscalarADD(mb, stk, pci, calctypeenlarge);
+}
+
+static str CMDarrayADD(MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, int 
(*typefunc)(int, int)) {
+       BAT *resBAT, *valsLeftBAT, *valsRightBAT, *s=NULL;
+       int i;
+       int resType, valType;
+
+       bat *result = getArgReference_bat(stk, pci, 0);
+       bat *valsLeft = getArgReference_bat(stk, pci, 2);
+       bat *valsRight = getArgReference_bat(stk, pci, 4);
+       
+       ptr *array_out = getArgReference(stk, pci, 1);
+       /* there are two arrays. one of each of the columns that are being 
added */
+       ptr *arrayLeft = getArgReference(stk, pci, 3); 
+       ptr *arrayRight = getArgReference(stk, pci, 5);
+
+       /* compare the arrays. they should have dimension of the same size */
+       gdk_array *arL = (gdk_array*)*arrayLeft;
+       gdk_array *arR = (gdk_array*)*arrayRight;
+       int dimsNumL = arL->dimsNum;
+       int dimsNumR = arR->dimsNum;
+       
+       if(dimsNumL != dimsNumR)
+               return createException(MAL, "calc.+", "Arrays should have the 
same number of dimensions");
+       for(i=0; i<dimsNumL; i++)
+               if(arL->dims[i]->elsNum != arR->dims[i]->elsNum)
+                       return createException(MAL, "calc.+", "Dimensions 
should be of the same size");
+       
+       if(!(valsLeftBAT = BATdescriptor(*valsLeft)))
+               return createException(MAL, "calc.+", RUNTIME_OBJECT_MISSING);
+       if(!(valsRightBAT = BATdescriptor(*valsRight))) {
+               BBPunfix(valsLeftBAT->batCacheid);
+               return createException(MAL, "calc.+", RUNTIME_OBJECT_MISSING);
+       }
+
+       resType = getColumnType(getArgType(mb, pci, 0));
+       valType = stk->stk[getArg(pci, 1)].vtype;
+       if (resType == TYPE_any)
+        resType = (*typefunc)(valType, BATttype(valsRightBAT));
+
+       resBAT = BATcalcadd(valsLeftBAT, valsRightBAT, s, resType, 1);
+       if (resBAT == NULL) {
+        BBPunfix(valsLeftBAT->batCacheid);
+               BBPunfix(valsRightBAT->batCacheid);
+               return createException(MAL, "calc.+", OPERATION_FAILED);
+    }
+       
+       BBPunfix(valsLeftBAT->batCacheid);
+       BBPunfix(valsRightBAT->batCacheid);
+       BBPkeepref(*result = resBAT->batCacheid);
+       *array_out = arrayCopy(arL);
+
+       return MAL_SUCCEED;
+}
+
+str CMDarrayADDsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) 
{
+       (void) cntxt;
+
+       return CMDarrayADD(mb, stk, pci, calctype);
+}
+
+str CMDarrayADDenlarge(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci) {
+    (void) cntxt;
+
+    return CMDarrayADD(mb, stk, pci, calctypeenlarge);
+}
+
+
+
 #define checkEqual(TPE1, dimLeft, TPE2, dimRight, vals) \
 do { \
        BUN i=0; \
diff --git a/monetdb5/modules/mal/calc_arrays.h 
b/monetdb5/modules/mal/calc_arrays.h
--- a/monetdb5/modules/mal/calc_arrays.h
+++ b/monetdb5/modules/mal/calc_arrays.h
@@ -32,6 +32,8 @@ str CMDscalarMULenlarge(Client cntxt, Ma
 str CMDdimensionsADDsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 str CMDscalarADDsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 str CMDscalarADDenlarge(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+str CMDarrayADDsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
+str CMDarrayADDenlarge(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 
 str CMDdimensionsEQ(ptr* dimsRes, bat* batRes, const ptr* dim1, const ptr* 
dims1, const ptr* dim2, const ptr* dims2);
 
diff --git a/monetdb5/modules/mal/calc_arrays.mal 
b/monetdb5/modules/mal/calc_arrays.mal
--- a/monetdb5/modules/mal/calc_arrays.mal
+++ b/monetdb5/modules/mal/calc_arrays.mal
@@ -168,7 +168,141 @@ comment "Return V + B, guarantee no over
 pattern calc.+(v:flt,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarADDenlarge
 comment "Return V + B, guarantee no overflow by returning larger type";
 
+pattern calc.+(b1:bat[:oid,:bte], ar1:ptr, b2:bat[:oid,:bte], ar2:ptr) 
(:bat[:oid,:sht], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:bte], ar1:ptr, b2:bat[:oid,:sht], ar2:ptr) 
(:bat[:oid,:int], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:bte], ar1:ptr, b2:bat[:oid,:int], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:bte], ar1:ptr, b2:bat[:oid,:flt], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:sht], ar1:ptr, b2:bat[:oid,:bte], ar2:ptr) 
(:bat[:oid,:int], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:sht], ar1:ptr, b2:bat[:oid,:sht], ar2:ptr) 
(:bat[:oid,:int], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:sht], ar1:ptr, b2:bat[:oid,:int], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:sht], ar1:ptr, b2:bat[:oid,:flt], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:int], ar1:ptr, b2:bat[:oid,:bte], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:int], ar1:ptr, b2:bat[:oid,:sht], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:int], ar1:ptr, b2:bat[:oid,:int], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:int], ar1:ptr, b2:bat[:oid,:flt], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:lng], ar1:ptr, b2:bat[:oid,:flt], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:flt], ar1:ptr, b2:bat[:oid,:bte], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:flt], ar1:ptr, b2:bat[:oid,:sht], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:flt], ar1:ptr, b2:bat[:oid,:int], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:flt], ar1:ptr, b2:bat[:oid,:lng], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
+pattern calc.+(b1:bat[:oid,:flt], ar1:ptr, b2:bat[:oid,:flt], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDenlarge
+comment "Return B1 + B2, guarantee no overflow by returning larger type";
 
+pattern calc.+(b1:bat[:oid,:bte], ar1:ptr, b2:bat[:oid,:bte], ar2:ptr) 
(:bat[:oid,:bte], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:bte], ar1:ptr, b2:bat[:oid,:sht], ar2:ptr) 
(:bat[:oid,:sht], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:bte], ar1:ptr, b2:bat[:oid,:int], ar2:ptr) 
(:bat[:oid,:int], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:bte], ar1:ptr, b2:bat[:oid,:wrd], ar2:ptr) 
(:bat[:oid,:wrd], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:bte], ar1:ptr, b2:bat[:oid,:lng], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:bte], ar1:ptr, b2:bat[:oid,:flt], ar2:ptr) 
(:bat[:oid,:flt], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:bte], ar1:ptr, b2:bat[:oid,:dbl], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:sht], ar1:ptr, b2:bat[:oid,:bte], ar2:ptr) 
(:bat[:oid,:sht], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:sht], ar1:ptr, b2:bat[:oid,:sht], ar2:ptr) 
(:bat[:oid,:sht], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:sht], ar1:ptr, b2:bat[:oid,:int], ar2:ptr) 
(:bat[:oid,:int], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:sht], ar1:ptr, b2:bat[:oid,:wrd], ar2:ptr) 
(:bat[:oid,:wrd], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:sht], ar1:ptr, b2:bat[:oid,:lng], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:sht], ar1:ptr, b2:bat[:oid,:flt], ar2:ptr) 
(:bat[:oid,:flt], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:sht], ar1:ptr, b2:bat[:oid,:dbl], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:int], ar1:ptr, b2:bat[:oid,:bte], ar2:ptr) 
(:bat[:oid,:int], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:int], ar1:ptr, b2:bat[:oid,:sht], ar2:ptr) 
(:bat[:oid,:int], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:int], ar1:ptr, b2:bat[:oid,:int], ar2:ptr) 
(:bat[:oid,:int], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:int], ar1:ptr, b2:bat[:oid,:wrd], ar2:ptr) 
(:bat[:oid,:wrd], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:int], ar1:ptr, b2:bat[:oid,:lng], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:int], ar1:ptr, b2:bat[:oid,:flt], ar2:ptr) 
(:bat[:oid,:flt], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:int], ar1:ptr, b2:bat[:oid,:dbl], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:wrd], ar1:ptr, b2:bat[:oid,:bte], ar2:ptr) 
(:bat[:oid,:wrd], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:wrd], ar1:ptr, b2:bat[:oid,:sht], ar2:ptr) 
(:bat[:oid,:wrd], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:wrd], ar1:ptr, b2:bat[:oid,:int], ar2:ptr) 
(:bat[:oid,:wrd], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:wrd], ar1:ptr, b2:bat[:oid,:wrd], ar2:ptr) 
(:bat[:oid,:wrd], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:wrd], ar1:ptr, b2:bat[:oid,:lng], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:wrd], ar1:ptr, b2:bat[:oid,:flt], ar2:ptr) 
(:bat[:oid,:flt], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:wrd], ar1:ptr, b2:bat[:oid,:dbl], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:lng], ar1:ptr, b2:bat[:oid,:bte], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:lng], ar1:ptr, b2:bat[:oid,:sht], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:lng], ar1:ptr, b2:bat[:oid,:int], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:lng], ar1:ptr, b2:bat[:oid,:wrd], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:lng], ar1:ptr, b2:bat[:oid,:lng], ar2:ptr) 
(:bat[:oid,:lng], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:lng], ar1:ptr, b2:bat[:oid,:flt], ar2:ptr) 
(:bat[:oid,:flt], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:lng], ar1:ptr, b2:bat[:oid,:dbl], ar2:ptr) 
(:bat[:oid,:dbl], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:flt], ar1:ptr, b2:bat[:oid,:bte], ar2:ptr) 
(:bat[:oid,:flt], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:flt], ar1:ptr, b2:bat[:oid,:sht], ar2:ptr) 
(:bat[:oid,:flt], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:flt], ar1:ptr, b2:bat[:oid,:int], ar2:ptr) 
(:bat[:oid,:flt], :ptr) address CMDarrayADDsignal
+comment "Return B1 + B2, signal error on overflow";
+pattern calc.+(b1:bat[:oid,:flt], ar1:ptr, b2:bat[:oid,:wrd], ar2:ptr) 
(:bat[:oid,:flt], :ptr) address CMDarrayADDsignal
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to