Changeset: ef0570457036 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ef0570457036
Added Files:
        monetdb5/modules/mosaic/mosaic_projection.h
        monetdb5/modules/mosaic/mosaic_utility.h
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/modules/mosaic/Makefile.ag
        monetdb5/modules/mosaic/Tests/mosaic_bit_2.linear.stable.out
        monetdb5/modules/mosaic/Tests/mosaic_bit_2.runlength.stable.out
        monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.linear.stable.out
        
monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.runlength.stable.out
        monetdb5/modules/mosaic/mosaic.c
        monetdb5/modules/mosaic/mosaic_capped.c
        monetdb5/modules/mosaic/mosaic_capped.h
        monetdb5/modules/mosaic/mosaic_delta.c
        monetdb5/modules/mosaic/mosaic_delta.h
        monetdb5/modules/mosaic/mosaic_dictionary.h
        monetdb5/modules/mosaic/mosaic_frame.c
        monetdb5/modules/mosaic/mosaic_frame.h
        monetdb5/modules/mosaic/mosaic_linear.c
        monetdb5/modules/mosaic/mosaic_linear.h
        monetdb5/modules/mosaic/mosaic_prefix.c
        monetdb5/modules/mosaic/mosaic_prefix.h
        monetdb5/modules/mosaic/mosaic_raw.c
        monetdb5/modules/mosaic/mosaic_raw.h
        monetdb5/modules/mosaic/mosaic_runlength.c
        monetdb5/modules/mosaic/mosaic_runlength.h
        monetdb5/modules/mosaic/mosaic_select.h
        monetdb5/modules/mosaic/mosaic_var.c
        monetdb5/modules/mosaic/mosaic_var.h
Branch: mosaic
Log Message:

Factor out boiler plate from projection code.


diffs (truncated from 1170 to 300 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1581,14 +1581,6 @@ void MOSpostEstimate_var(MOStask task);
 str MOSprepareEstimate_capped(MOStask task);
 str MOSprepareEstimate_var(MOStask task);
 str MOSprojection(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
-str MOSprojection_capped(MOStask task);
-str MOSprojection_delta(MOStask task);
-str MOSprojection_frame(MOStask task);
-str MOSprojection_linear(MOStask task);
-str MOSprojection_prefix(MOStask task);
-str MOSprojection_raw(MOStask task);
-str MOSprojection_runlength(MOStask task);
-str MOSprojection_var(MOStask task);
 str MOSselect(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 void MOSskip_capped(MOStask task);
 void MOSskip_delta(MOStask task);
diff --git a/monetdb5/modules/mosaic/Makefile.ag 
b/monetdb5/modules/mosaic/Makefile.ag
--- a/monetdb5/modules/mosaic/Makefile.ag
+++ b/monetdb5/modules/mosaic/Makefile.ag
@@ -20,8 +20,10 @@ lib_mosaic = {
        NOINST
        SOURCES = \
                mosaic.c mosaic.h \
+               mosaic_utility.h \
                mosaic_hdr.c mosaic_hdr.h \
                mosaic_select.h \
+               mosaic_projection.h \
                mosaic_raw.c mosaic_raw.h \
                mosaic_runlength.c mosaic_runlength.h \
                mosaic_var.c mosaic_var.h \
diff --git a/monetdb5/modules/mosaic/Tests/mosaic_bit_2.linear.stable.out 
b/monetdb5/modules/mosaic/Tests/mosaic_bit_2.linear.stable.out
--- a/monetdb5/modules/mosaic/Tests/mosaic_bit_2.linear.stable.out
+++ b/monetdb5/modules/mosaic/Tests/mosaic_bit_2.linear.stable.out
@@ -392,8 +392,6 @@ MOSprojection_linear
 MOSprojection_linear
 MOSprojection_linear
 MOSprojection_linear
-MOSprojection_linear
-MOSprojection_linear
 
 # 16:33:21 >  
 # 16:33:21 >  "/usr/bin/python3" "mosaic_bit_2.linear.MAL.py" 
"mosaic_bit_2.linear"
diff --git a/monetdb5/modules/mosaic/Tests/mosaic_bit_2.runlength.stable.out 
b/monetdb5/modules/mosaic/Tests/mosaic_bit_2.runlength.stable.out
--- a/monetdb5/modules/mosaic/Tests/mosaic_bit_2.runlength.stable.out
+++ b/monetdb5/modules/mosaic/Tests/mosaic_bit_2.runlength.stable.out
@@ -392,8 +392,6 @@ MOSprojection_runlength
 MOSprojection_runlength
 MOSprojection_runlength
 MOSprojection_runlength
-MOSprojection_runlength
-MOSprojection_runlength
 
 # 16:33:06 >  
 # 16:33:06 >  "/usr/bin/python3" "mosaic_bit_2.runlength.MAL.py" 
"mosaic_bit_2.runlength"
diff --git 
a/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.linear.stable.out 
b/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.linear.stable.out
--- a/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.linear.stable.out
+++ b/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.linear.stable.out
@@ -937,16 +937,6 @@ MOSprojection_linear
 MOSprojection_linear
 MOSprojection_linear
 MOSprojection_linear
-MOSprojection_linear
-MOSprojection_linear
-MOSprojection_linear
-MOSprojection_linear
-MOSprojection_linear
-MOSprojection_linear
-MOSprojection_linear
-MOSprojection_linear
-MOSprojection_linear
-MOSprojection_linear
 
 # 13:09:41 >  
 # 13:09:41 >  "/usr/bin/python3" "mosaic_bit_with_nils_2.linear.MAL.py" 
"mosaic_bit_with_nils_2.linear"
diff --git 
a/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.runlength.stable.out 
b/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.runlength.stable.out
--- a/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.runlength.stable.out
+++ b/monetdb5/modules/mosaic/Tests/mosaic_bit_with_nils_2.runlength.stable.out
@@ -1033,18 +1033,6 @@ MOSprojection_runlength
 MOSprojection_runlength
 MOSprojection_runlength
 MOSprojection_runlength
-MOSprojection_runlength
-MOSprojection_runlength
-MOSprojection_runlength
-MOSprojection_runlength
-MOSprojection_runlength
-MOSprojection_runlength
-MOSprojection_runlength
-MOSprojection_runlength
-MOSprojection_runlength
-MOSprojection_runlength
-MOSprojection_runlength
-MOSprojection_runlength
 
 # 16:33:06 >  
 # 16:33:06 >  "/usr/bin/python3" "mosaic_bit_2.runlength.MAL.py" 
"mosaic_bit_2.runlength"
diff --git a/monetdb5/modules/mosaic/mosaic.c b/monetdb5/modules/mosaic/mosaic.c
--- a/monetdb5/modules/mosaic/mosaic.c
+++ b/monetdb5/modules/mosaic/mosaic.c
@@ -974,6 +974,16 @@ str MOSthetaselect(Client cntxt, MalBlkP
        throw(MAL, "mosaic.MOSthetaselect", "unknown operator.");
 }
 
+MOSprojection_generic_DEF(bte)
+MOSprojection_generic_DEF(sht)
+MOSprojection_generic_DEF(int)
+MOSprojection_generic_DEF(lng)
+MOSprojection_generic_DEF(flt)
+MOSprojection_generic_DEF(dbl)
+#ifdef HAVE_HGE
+MOSprojection_generic_DEF(hge)
+#endif
+
 str MOSprojection(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        bat *ret, *lid =0, *rid=0;
@@ -1045,46 +1055,18 @@ str MOSprojection(Client cntxt, MalBlkPt
        struct canditer ci;
        task->ci = &ci;
        canditer_init(task->ci, NULL, bl);
-       canditer_next(task->ci); // Increase the state by one.
 
-       // loop thru all the chunks and fetch all results
-       while(task->start < task->stop )
-               switch(MOSgetTag(task->blk)){
-               case MOSAIC_RLE:
-                       ALGODEBUG mnstr_printf(GDKstdout, 
"MOSprojection_runlength\n");
-                       MOSprojection_runlength( task);
-                       break;
-               case MOSAIC_CAPPED:
-                       ALGODEBUG mnstr_printf(GDKstdout, 
"MOSprojection_capped\n");
-                       MOSprojection_capped( task);
-                       break;
-               case MOSAIC_VAR:
-                       ALGODEBUG mnstr_printf(GDKstdout, 
"MOSprojection_var\n");
-                       MOSprojection_var( task);
-                       break;
-               case MOSAIC_FRAME:
-                       ALGODEBUG mnstr_printf(GDKstdout, 
"MOSprojection_frame\n");
-                       MOSprojection_frame( task);
-                       break;
-               case MOSAIC_DELTA:
-                       ALGODEBUG mnstr_printf(GDKstdout, 
"MOSprojection_delta\n");
-                       MOSprojection_delta( task);
-                       break;
-               case MOSAIC_PREFIX:
-                       ALGODEBUG mnstr_printf(GDKstdout, 
"MOSprojection_prefix\n");
-                       MOSprojection_prefix( task);
-                       break;
-               case MOSAIC_LINEAR:
-                       ALGODEBUG mnstr_printf(GDKstdout, 
"MOSprojection_linear\n");
-                       MOSprojection_linear( task);
-                       break;
-               case MOSAIC_RAW:
-                       ALGODEBUG mnstr_printf(GDKstdout, 
"MOSprojection_raw\n");
-                       MOSprojection_raw( task);
-                       break;
-               default:
-                       assert(0);
-               }
+       switch(ATOMbasetype(task->type)){
+       case TYPE_bte: MOSprojection_bte(task); break;
+       case TYPE_sht: MOSprojection_sht(task); break;
+       case TYPE_int: MOSprojection_int(task); break;
+       case TYPE_lng: MOSprojection_lng(task); break;
+       case TYPE_flt: MOSprojection_flt(task); break;
+       case TYPE_dbl: MOSprojection_dbl(task); break;
+#ifdef HAVE_HGE
+       case TYPE_hge: MOSprojection_hge(task); break;
+#endif
+       }
 
        /* adminstrative wrapup of the projection */
        BBPunfix(*lid);
diff --git a/monetdb5/modules/mosaic/mosaic_capped.c 
b/monetdb5/modules/mosaic/mosaic_capped.c
--- a/monetdb5/modules/mosaic/mosaic_capped.c
+++ b/monetdb5/modules/mosaic/mosaic_capped.c
@@ -425,24 +425,18 @@ MOSselect_DEF(capped, dbl)
 MOSselect_DEF(capped, hge)
 #endif
 
-str
-MOSprojection_capped( MOStask task)
-{
-       switch(ATOMbasetype(task->type)){
-               case TYPE_bte: DICTprojection(bte); break;
-               case TYPE_sht: DICTprojection(sht); break;
-               case TYPE_int: DICTprojection(int); break;
-               case TYPE_lng: DICTprojection(lng); break;
-               case TYPE_oid: DICTprojection(oid); break;
-               case TYPE_flt: DICTprojection(flt); break;
-               case TYPE_dbl: DICTprojection(dbl); break;
+#define projection_loop_capped(TPE, CANDITER_NEXT) \
+    projection_loop_dictionary(TPE, CANDITER_NEXT)
+
+MOSprojection_DEF(capped, bte)
+MOSprojection_DEF(capped, sht)
+MOSprojection_DEF(capped, int)
+MOSprojection_DEF(capped, lng)
+MOSprojection_DEF(capped, flt)
+MOSprojection_DEF(capped, dbl)
 #ifdef HAVE_HGE
-               case TYPE_hge: DICTprojection(hge); break;
+MOSprojection_DEF(capped, hge)
 #endif
-       }
-       MOSskip_capped(task);
-       return MAL_SUCCEED;
-}
 
 str
 MOSjoin_capped( MOStask task, bit nil_matches)
diff --git a/monetdb5/modules/mosaic/mosaic_capped.h 
b/monetdb5/modules/mosaic/mosaic_capped.h
--- a/monetdb5/modules/mosaic/mosaic_capped.h
+++ b/monetdb5/modules/mosaic/mosaic_capped.h
@@ -16,7 +16,7 @@
 #include <mal.h>
 #include "mal_interpreter.h"
 #include "mal_client.h"
-#include "mosaic_select.h"
+#include "mosaic_utility.h"
 
 #define DICTTHRESHOLD 4192
 #define DICTSIZE 256
@@ -33,19 +33,10 @@ mal_export void MOSpostEstimate_capped(M
 mal_export str finalizeDictionary_capped(MOStask task);
 mal_export void MOScompress_capped(MOStask task, MosaicBlkRec* estimate);
 mal_export void MOSdecompress_capped(MOStask task);
-mal_export str MOSprojection_capped( MOStask task);
 mal_export str MOSjoin_capped( MOStask task, bit nil_matches);
 
-MOSselect_SIGNATURE(capped, bte);
-MOSselect_SIGNATURE(capped, sht);
-MOSselect_SIGNATURE(capped, int);
-MOSselect_SIGNATURE(capped, lng);
-MOSselect_SIGNATURE(capped, flt);
-MOSselect_SIGNATURE(capped, dbl);
-#ifdef HAVE_HGE
-MOSselect_SIGNATURE(capped, hge);
-#endif
+ALGEBRA_INTERFACES_ALL_TYPES(capped);
 
-#define SELECT_CAPPED(TPE) do_select(capped, TPE)
+#define DO_OPERATION_ON_capped(OPERATION, TPE) 
DO_OPERATION_ON_ALL_TYPES(OPERATION, capped, TPE)
 
 #endif /* _MOSAIC_CAPPED_ */
diff --git a/monetdb5/modules/mosaic/mosaic_delta.c 
b/monetdb5/modules/mosaic/mosaic_delta.c
--- a/monetdb5/modules/mosaic/mosaic_delta.c
+++ b/monetdb5/modules/mosaic/mosaic_delta.c
@@ -296,46 +296,33 @@ MOSselect_DEF(delta, lng)
 MOSselect_DEF(delta, hge)
 #endif
 
-#define projection_delta(TPE)\
-{      TPE *v;\
-       v= (TPE*) task->src;\
-    MosaicBlkHeader_delta_t* parameters = (MosaicBlkHeader_delta_t*) 
task->blk;\
+#define projection_loop_delta(TPE, CANDITER_NEXT)\
+{\
+       MosaicBlkHeader_delta_t* parameters = (MosaicBlkHeader_delta_t*) 
task->blk;\
+       BitVector base = (BitVector) MOScodevectorDelta(task);\
        DeltaTpe(TPE) acc = parameters->init.val##TPE; /*previous value*/\
        int bits = parameters->bits;\
-       BitVector base = (BitVector) MOScodevectorDelta(task);\
        DeltaTpe(TPE) sign_mask = (DeltaTpe(TPE)) ((IPTpe(TPE)) 1) << (bits - 
1);\
-       for(; first < last; first++,i++){\
-               DeltaTpe(TPE) delta = (DeltaTpe(TPE)) 
getBitVector(base,i,bits);\
-               TPE value = ACCUMULATE(acc, delta, sign_mask, TPE);\
-               MOSskipit();\
-               *v++ = value;\
+    TPE v = (TPE) acc;\
+    BUN j = 0;\
+       for (oid o = canditer_peekprev(task->ci); !is_oid_nil(o) && o < last; o 
= CANDITER_NEXT(task->ci)) {\
+        BUN i = (BUN) (o - first);\
+        for (;j <= i; j++) {\
+            TPE delta = getBitVector(base, j, bits);\
+                       v = ACCUMULATE(acc, delta, sign_mask, TPE);\
+        }\
+               *bt++ = v;\
                task->cnt++;\
        }\
-       task->src = (char*) v;\
 }
 
-str
-MOSprojection_delta( MOStask task)
-{
-       BUN i=0, first, last;
-
-       // set the oid range covered and advance scan range
-       first = task->start;
-       last = first + MOSgetCnt(task->blk);
-
-       switch(ATOMbasetype(task->type)){
-               case TYPE_bte: projection_delta(bte); break;
-               case TYPE_sht: projection_delta(sht); break;
-               case TYPE_int: projection_delta(int); break;
-               case TYPE_lng: projection_delta(lng); break;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to