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

scalar multiplication


diffs (254 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
@@ -2215,6 +2215,85 @@ str CMDdimensionMULsignal(Client cntxt, 
        return MAL_SUCCEED;
 }
 
+str CMDscalarMULsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci) {
+    BAT *s=NULL;
+
+       int resType;
+
+       /*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));
+//     int valType = stk->stk[getArg(pci, 1)].vtype;
+//     if (resType == TYPE_any)
+//        resType = calctype(valType, BATttype(valsBAT));
+
+    resBAT = BATcalccstmul(&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 CMDscalarMULenlarge(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci) {
+       BAT *s=NULL;
+
+       int resType;
+
+       /*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));
+//     int valType = stk->stk[getArg(pci, 1)].vtype;
+//     if (resType == TYPE_any)
+//        resType = calctypeenlarge(valType, BATttype(valsBAT));
+
+    resBAT = BATcalccstmul(&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;
+}
+
 #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
@@ -15,6 +15,10 @@ str CMDdimensionCONVERT_oid(ptr *dimRes,
 //str CMDdimensionCONVERT_str(ptr *dimRes, ptr *dimsRes, const ptr *dim, const 
ptr *dims);
 
 str CMDdimensionMULsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+str CMDscalarMULsignal(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+str CMDscalarMULenlarge(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+
+
 str CMDdimensionsADDsignal(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
@@ -72,8 +72,145 @@ comment "Return V * dimension values, gu
 pattern calc.*(v:flt, dim:ptr, dims:ptr, tp:int) (:ptr, :ptr) address 
CMDdimensionMULsignal
 comment "Return V * dimension values, guarantee no overflow by returning 
larger type";
 
-pattern calc.*(v:lng, vals:bat[:oid,:lng], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDnonDimensionMULsingnal_lng
-comment "Return a bat with the sum of the two dimensions";
+pattern calc.*(v:bte,b:bat[:oid,:bte], array:ptr) (:bat[:oid,:sht], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:bte,b:bat[:oid,:sht], array:ptr) (:bat[:oid,:int], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:bte,b:bat[:oid,:int], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:bte,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:sht,b:bat[:oid,:bte], array:ptr) (:bat[:oid,:int], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:sht,b:bat[:oid,:sht], array:ptr) (:bat[:oid,:int], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:sht,b:bat[:oid,:int], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:sht,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:int,b:bat[:oid,:bte], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:int,b:bat[:oid,:sht], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:int,b:bat[:oid,:int], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:int,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:lng,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:flt,b:bat[:oid,:bte], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:flt,b:bat[:oid,:sht], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:flt,b:bat[:oid,:int], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:flt,b:bat[:oid,:lng], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+pattern calc.*(v:flt,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULenlarge
+comment "Return V * B, guarantee no overflow by returning larger type";
+
+pattern calc.*(v:bte,b:bat[:oid,:bte], array:ptr) (:bat[:oid,:bte], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:bte,b:bat[:oid,:sht], array:ptr) (:bat[:oid,:sht], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:bte,b:bat[:oid,:int], array:ptr) (:bat[:oid,:int], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:bte,b:bat[:oid,:wrd], array:ptr) (:bat[:oid,:wrd], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:bte,b:bat[:oid,:lng], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:bte,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:flt], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:bte,b:bat[:oid,:dbl], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:sht,b:bat[:oid,:bte], array:ptr) (:bat[:oid,:sht], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:sht,b:bat[:oid,:sht], array:ptr) (:bat[:oid,:sht], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:sht,b:bat[:oid,:int], array:ptr) (:bat[:oid,:int], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:sht,b:bat[:oid,:wrd], array:ptr) (:bat[:oid,:wrd], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:sht,b:bat[:oid,:lng], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:sht,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:flt], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:sht,b:bat[:oid,:dbl], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:int,b:bat[:oid,:bte], array:ptr) (:bat[:oid,:int], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:int,b:bat[:oid,:sht], array:ptr) (:bat[:oid,:int], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:int,b:bat[:oid,:int], array:ptr) (:bat[:oid,:int], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:int,b:bat[:oid,:wrd], array:ptr) (:bat[:oid,:wrd], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:int,b:bat[:oid,:lng], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:int,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:flt], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:int,b:bat[:oid,:dbl], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:wrd,b:bat[:oid,:bte], array:ptr) (:bat[:oid,:wrd], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:wrd,b:bat[:oid,:sht], array:ptr) (:bat[:oid,:wrd], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:wrd,b:bat[:oid,:int], array:ptr) (:bat[:oid,:wrd], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:wrd,b:bat[:oid,:wrd], array:ptr) (:bat[:oid,:wrd], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:wrd,b:bat[:oid,:lng], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:wrd,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:flt], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:wrd,b:bat[:oid,:dbl], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:lng,b:bat[:oid,:bte], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:lng,b:bat[:oid,:sht], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:lng,b:bat[:oid,:int], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:lng,b:bat[:oid,:wrd], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:lng,b:bat[:oid,:lng], array:ptr) (:bat[:oid,:lng], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:lng,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:flt], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:lng,b:bat[:oid,:dbl], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:flt,b:bat[:oid,:bte], array:ptr) (:bat[:oid,:flt], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:flt,b:bat[:oid,:sht], array:ptr) (:bat[:oid,:flt], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:flt,b:bat[:oid,:int], array:ptr) (:bat[:oid,:flt], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:flt,b:bat[:oid,:wrd], array:ptr) (:bat[:oid,:flt], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:flt,b:bat[:oid,:lng], array:ptr) (:bat[:oid,:flt], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:flt,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:flt], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:flt,b:bat[:oid,:dbl], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:dbl,b:bat[:oid,:bte], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:dbl,b:bat[:oid,:sht], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:dbl,b:bat[:oid,:int], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:dbl,b:bat[:oid,:wrd], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:dbl,b:bat[:oid,:lng], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:dbl,b:bat[:oid,:flt], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+pattern calc.*(v:dbl,b:bat[:oid,:dbl], array:ptr) (:bat[:oid,:dbl], :ptr) 
address CMDscalarMULsignal
+comment "Return V * B, signal error on overflow";
+
+
+
+
 
 ##/
 #pattern /(dim:ptr, dims:ptr, v:bte) (:ptr, :ptr) address CMDdimensionDIVsignal
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to