Changeset: 2b008dc8084f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2b008dc8084f
Added Files:
        monetdb5/modules/mosaic/mosaic_template.h
Modified Files:
        monetdb5/modules/mosaic/Makefile.ag
        monetdb5/modules/mosaic/mosaic.c
Branch: mosaic
Log Message:

Refactor macro's to template functions.


diffs (truncated from 552 to 300 lines):

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
@@ -19,7 +19,7 @@ MTSAFE
 lib_mosaic = {
        NOINST
        SOURCES = \
-               mosaic.c mosaic.h \
+               mosaic.c mosaic.h mosaic_template.h \
                mosaic_utility.h \
                mosaic_hdr.c mosaic_hdr.h \
                mosaic_select.h \
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
@@ -282,151 +282,28 @@ MOSprepareDictionaryContext(MOStask* tas
        return MAL_SUCCEED;
 }
 
-// TODO: NAME and NAME_TAG can be combined.
-#define estimate(NAME, TPE, NAME_TAG)\
-{\
-       str msg = MOSestimate_##NAME##_##TPE(task, &estimations[NAME_TAG], 
previous);\
-       if (msg != MAL_SUCCEED) return msg;\
-}
-
-#define postEstimate(NAME, TPE, DUMMY_ARGUMENT) if (current->is_applicable) { 
MOSpostEstimate_##NAME##_##TPE(task); }
-
-#define MOSestimate_AND_MOSoptimizerCost_DEF(TPE) \
-static str MOSestimate_inner_##TPE(MOStask* task, MosaicEstimation* current, 
const MosaicEstimation* previous) {\
-\
-       BUN max_compression_length = 0;\
-       MosaicEstimation estimations[MOSAIC_METHODS];\
-       const int size = sizeof(estimations) / sizeof(MosaicEstimation);\
-       for (int i = 0; i < size; i++) {\
-               estimations[i].previous_compressed_size = 
previous->compressed_size;\
-               estimations[i].uncompressed_size = previous->uncompressed_size;\
-               estimations[i].compressed_size = previous->compressed_size;\
-               estimations[i].compression_strategy = 
previous->compression_strategy;\
-               estimations[i].nr_dict_encoded_blocks = 
previous->nr_dict_encoded_blocks;\
-               estimations[i].nr_dict_encoded_elements = 
previous->nr_dict_encoded_elements;\
-               estimations[i].nr_dict256_encoded_elements = 
previous->nr_dict256_encoded_elements;\
-               estimations[i].nr_dict256_encoded_blocks = 
previous->nr_dict256_encoded_blocks;\
-               estimations[i].dict_limit = previous->dict_limit;\
-               estimations[i].dict256_limit = previous->dict256_limit;\
-               estimations[i].must_be_merged_with_previous = false;\
-               estimations[i].is_applicable = false;\
-               estimations[i].max_compression_length = 
&max_compression_length;\
-       }\
-\
-       /* select candidate amongst those*/\
-       if (METHOD_IS_SET(task->mask, MOSAIC_RLE))              {\
-               DO_OPERATION_IF_ALLOWED_VARIADIC(estimate, runlength, TPE, 
MOSAIC_RLE);\
-       }\
-       if (METHOD_IS_SET(task->mask, MOSAIC_DELTA))    {\
-               DO_OPERATION_IF_ALLOWED_VARIADIC(estimate, delta, TPE, 
MOSAIC_DELTA);\
-       }\
-       if (METHOD_IS_SET(task->mask, MOSAIC_LINEAR))   {\
-               DO_OPERATION_IF_ALLOWED_VARIADIC(estimate, linear, TPE, 
MOSAIC_LINEAR);\
-       }\
-       if (METHOD_IS_SET(task->mask, MOSAIC_FRAME))    {\
-               DO_OPERATION_IF_ALLOWED_VARIADIC(estimate, frame, TPE, 
MOSAIC_FRAME);\
-       }\
-       if (METHOD_IS_SET(task->mask, MOSAIC_PREFIX))   {\
-               DO_OPERATION_IF_ALLOWED_VARIADIC(estimate, prefix, TPE, 
MOSAIC_PREFIX);\
-       }\
-       if (METHOD_IS_SET(task->mask, MOSAIC_DICT256))  {\
-               DO_OPERATION_IF_ALLOWED_VARIADIC(estimate, dict256, TPE, 
MOSAIC_DICT256);\
-       }\
-       if (METHOD_IS_SET(task->mask, MOSAIC_DICT))             {\
-               DO_OPERATION_IF_ALLOWED_VARIADIC(estimate, dict,        TPE, 
MOSAIC_DICT);\
-       }\
-       if (METHOD_IS_SET(task->mask, MOSAIC_RAW))              {\
-               DO_OPERATION_IF_ALLOWED_VARIADIC(estimate, raw, TPE, 
MOSAIC_RAW);\
-       }\
-\
-       BUN best_normalized_compression = (BUN) (-1);\
-       current->is_applicable = false;\
-\
-       for (int i = 0; i < size; i++) {\
-               if (estimations[i].is_applicable) {\
-                       BUN normalized_compression = 
get_normalized_compression(&(estimations[i]), previous);\
-\
-                       if (estimations[i].is_applicable && 
normalized_compression < best_normalized_compression ) {\
-                               *current = estimations[i];\
-                               best_normalized_compression = 
normalized_compression;\
-                       }\
-               }\
-       }\
-\
-       if (current->compression_strategy.tag == MOSAIC_RAW)            
DO_OPERATION_IF_ALLOWED(postEstimate, raw, TPE);\
-       if (current->compression_strategy.tag == MOSAIC_RLE)            
DO_OPERATION_IF_ALLOWED(postEstimate, runlength, TPE);\
-       if (current->compression_strategy.tag == MOSAIC_DICT256)        
DO_OPERATION_IF_ALLOWED(postEstimate, dict256, TPE);\
-       if (current->compression_strategy.tag == MOSAIC_DICT)           
DO_OPERATION_IF_ALLOWED(postEstimate, dict, TPE);\
-       if (current->compression_strategy.tag == MOSAIC_DELTA)          
DO_OPERATION_IF_ALLOWED(postEstimate, delta, TPE);\
-       if (current->compression_strategy.tag == MOSAIC_LINEAR)         
DO_OPERATION_IF_ALLOWED(postEstimate, linear, TPE);\
-       if (current->compression_strategy.tag == MOSAIC_FRAME)          
DO_OPERATION_IF_ALLOWED(postEstimate, frame, TPE);\
-       if (current->compression_strategy.tag == MOSAIC_PREFIX)         
DO_OPERATION_IF_ALLOWED(postEstimate, prefix, TPE);\
-\
-       return MAL_SUCCEED;\
-}\
-static str MOSestimate_##TPE(MOStask* task, BAT* estimates, size_t* 
compressed_size) {\
-       str result = MAL_SUCCEED;\
-\
-       *compressed_size = 0;\
-\
-\
-       BUN dict_limit = 0;\
-       BUN dict256_limit = 0;\
-       MosaicEstimation previous = {\
-               .is_applicable = false,\
-               .uncompressed_size = 0,\
-               .previous_compressed_size = 0,\
-               .compressed_size = 0,\
-               .nr_dict_encoded_elements = 0,\
-               .nr_dict_encoded_blocks = 0,\
-               .dict256_limit = &dict256_limit,\
-               .dict_limit = &dict_limit,\
-               .nr_dict256_encoded_elements = 0,\
-               .nr_dict256_encoded_blocks = 0,\
-               .compression_strategy = {.cnt = 0},\
-               .must_be_merged_with_previous = false\
-       };\
-\
-       MosaicEstimation current;\
-       MosaicBlkRec* cursor = Tloc(estimates,0);\
-\
-       while(task->start < task->stop ){\
-\
-               /* default is to extend the non-compressed block with a single 
element*/\
-               if ( (result = MOSestimate_inner_##TPE(task, &current, 
&previous)) ) {\
-                       return result;\
-               }\
-\
-               if (!current.is_applicable) {\
-                       throw(MAL,"mosaic.compress", "Cannot compress BAT with 
given compression MOSmethods.");\
-               }\
-\
-               if (current.must_be_merged_with_previous) {\
-                       --cursor;\
-                       assert(cursor->tag == previous.compression_strategy.tag 
&& cursor->cnt == previous.compression_strategy.cnt);\
-                       task->start -= previous.compression_strategy.cnt;\
-               }\
-               else BATcount(estimates)++;\
-\
-               *cursor = current.compression_strategy;\
-               ++cursor;\
-               previous = current;\
-               task->start += current.compression_strategy.cnt;\
-       }\
-\
-       (*compressed_size) = current.compressed_size;\
-\
-       return MAL_SUCCEED;\
-}
-
-MOSestimate_AND_MOSoptimizerCost_DEF(bte)
-MOSestimate_AND_MOSoptimizerCost_DEF(sht)
-MOSestimate_AND_MOSoptimizerCost_DEF(int)
-MOSestimate_AND_MOSoptimizerCost_DEF(lng)
-MOSestimate_AND_MOSoptimizerCost_DEF(flt)
-MOSestimate_AND_MOSoptimizerCost_DEF(dbl)
+#define TPE bte
+#include "mosaic_template.h"
+#undef TPE
+#define TPE sht
+#include "mosaic_template.h"
+#undef TPE
+#define TPE int
+#include "mosaic_template.h"
+#undef TPE
+#define TPE lng
+#include "mosaic_template.h"
+#undef TPE
+#define TPE flt
+#include "mosaic_template.h"
+#undef TPE
+#define TPE dbl
+#include "mosaic_template.h"
+#undef TPE
 #ifdef HAVE_HGE
-MOSestimate_AND_MOSoptimizerCost_DEF(hge)
+#define TPE hge
+#include "mosaic_template.h"
+#undef TPE
 #endif
 
 
@@ -490,67 +367,6 @@ MOSfinalizeDictionary(MOStask* task) {
        throw(MAL, "mosaic.estimate", TYPE_NOT_SUPPORTED);
 }
 
-
-#define compress(NAME, TPE, DUMMY_ARGUMENT)\
-{\
-       ALGODEBUG mnstr_printf(GDKstdout, "#MOScompress_" #NAME "\n");\
-       MOScompress_##NAME##_##TPE(task, estimate);\
-       MOSupdateHeader(task);\
-       MOSadvance_##NAME##_##TPE(task);\
-       MOSnewBlk(task);\
-}
-
-#define MOScompressInternal_DEF(TPE)\
-static void \
-MOScompressInternal_##TPE(MOStask* task, BAT* estimates)\
-{\
-       /* second pass: compression phase*/\
-       for(BUN i = 0; i < BATcount(estimates); i++) {\
-               assert (task->dst < task->bsrc->tmosaic->base + 
task->bsrc->tmosaic->size );\
-\
-               MosaicBlkRec* estimate = Tloc(estimates, i);\
-\
-               switch(estimate->tag) {\
-               case MOSAIC_RLE:\
-                       DO_OPERATION_IF_ALLOWED(compress, runlength, TPE);\
-                       break;\
-               case MOSAIC_DICT256:\
-                       DO_OPERATION_IF_ALLOWED(compress, dict256, TPE);\
-                       break;\
-               case MOSAIC_DICT:\
-                       DO_OPERATION_IF_ALLOWED(compress, dict, TPE);\
-                       break;\
-               case MOSAIC_DELTA:\
-                       DO_OPERATION_IF_ALLOWED(compress, delta, TPE);\
-                       break;\
-               case MOSAIC_LINEAR:\
-                       DO_OPERATION_IF_ALLOWED(compress, linear, TPE);\
-                       break;\
-               case MOSAIC_FRAME:\
-                       DO_OPERATION_IF_ALLOWED(compress, frame, TPE);\
-                       break;\
-               case MOSAIC_PREFIX:\
-                       DO_OPERATION_IF_ALLOWED(compress, prefix, TPE);\
-                       break;\
-               case MOSAIC_RAW:\
-                       DO_OPERATION_IF_ALLOWED(compress, raw, TPE);\
-                       break;\
-               default : /* Unknown block type. Should not happen.*/\
-                       assert(0);\
-               }\
-       }\
-}
-
-MOScompressInternal_DEF(bte)
-MOScompressInternal_DEF(sht)
-MOScompressInternal_DEF(int)
-MOScompressInternal_DEF(lng)
-MOScompressInternal_DEF(flt)
-MOScompressInternal_DEF(dbl)
-#ifdef HAVE_HGE
-MOScompressInternal_DEF(hge)
-#endif
-
 /* the source is extended with a BAT mosaic heap */
 str
 MOScompressInternal(BAT* bsrc, const char* compressions)
@@ -704,58 +520,6 @@ MOScompress(Client cntxt, MalBlkPtr mb, 
        return msg;
 }
 
-
-#define decompress(NAME, TPE, DUMMY_ARGUMENT)\
-{\
-       ALGODEBUG mnstr_printf(GDKstdout, "#MOSdecompress_" #NAME "\n");\
-       MOSdecompress_##NAME##_##TPE(task);\
-       MOSadvance_##NAME##_##TPE(task);\
-}
-
-#define MOSdecompressInternal_DEF(TPE) \
-static void MOSdecompressInternal_##TPE(MOStask* task)\
-{\
-       while(task->start != task->stop){\
-               switch(MOSgetTag(task->blk)){\
-               case MOSAIC_RAW:\
-                       DO_OPERATION_IF_ALLOWED(decompress, raw, TPE);\
-                       break;\
-               case MOSAIC_RLE:\
-                       DO_OPERATION_IF_ALLOWED(decompress, runlength, TPE);\
-                       break;\
-               case MOSAIC_DICT256:\
-                       DO_OPERATION_IF_ALLOWED(decompress, dict256, TPE);\
-                       break;\
-               case MOSAIC_DICT:\
-                       DO_OPERATION_IF_ALLOWED(decompress, dict, TPE);\
-                       break;\
-               case MOSAIC_DELTA:\
-                       DO_OPERATION_IF_ALLOWED(decompress, delta, TPE);\
-                       break;\
-               case MOSAIC_LINEAR:\
-                       DO_OPERATION_IF_ALLOWED(decompress, linear, TPE);\
-                       break;\
-               case MOSAIC_FRAME:\
-                       DO_OPERATION_IF_ALLOWED(decompress, frame, TPE);\
-                       break;\
-               case MOSAIC_PREFIX:\
-                       DO_OPERATION_IF_ALLOWED(decompress, prefix, TPE);\
-                       break;\
-               default: assert(0);\
-               }\
-       }\
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to