Changeset: 2a2b8d910463 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2a2b8d910463
Modified Files:
        monetdb5/modules/mosaic/mosaic.h
        monetdb5/modules/mosaic/mosaic_dict.c
        monetdb5/modules/mosaic/mosaic_dict256.c
        monetdb5/modules/mosaic/mosaic_dictionary.h
        monetdb5/modules/mosaic/mosaic_dictionary_impl.h
        monetdb5/modules/mosaic/mosaic_utility.h
Branch: mosaic
Log Message:

Refactor macro-wised functions to template functions.


diffs (truncated from 406 to 300 lines):

diff --git a/monetdb5/modules/mosaic/mosaic.h b/monetdb5/modules/mosaic/mosaic.h
--- a/monetdb5/modules/mosaic/mosaic.h
+++ b/monetdb5/modules/mosaic/mosaic.h
@@ -61,10 +61,6 @@ typedef struct {
  */
 typedef Heap *mosaic;  // compressed data is stored on a heap.
 
-
-#define IS_NIL(TPE, VAL) is_##TPE##_nil(VAL)
-#define ARE_EQUAL(v, w, HAS_NIL, TPE) ((v == w || (HAS_NIL && IS_NIL(TPE, v) 
&& IS_NIL(TPE, w)) ) )
-
 /* For compression MOSmethods based on value differences, we need the storage 
type */
 #define Deltabte uint8_t
 #define Deltasht uint16_t
diff --git a/monetdb5/modules/mosaic/mosaic_dict.c 
b/monetdb5/modules/mosaic/mosaic_dict.c
--- a/monetdb5/modules/mosaic/mosaic_dict.c
+++ b/monetdb5/modules/mosaic/mosaic_dict.c
@@ -45,38 +45,10 @@ bool MOStypes_dict(BAT* b) {
        return false;
 }
 
-#define MOSadvance_DEF(TPE)\
-MOSadvance_SIGNATURE(dict, TPE) advance_dictionary(dict, TPE)
-
-MOSadvance_DEF(bte)
-MOSadvance_DEF(sht)
-MOSadvance_DEF(int)
-MOSadvance_DEF(lng)
-MOSadvance_DEF(flt)
-MOSadvance_DEF(dbl)
-#ifdef HAVE_HGE
-MOSadvance_DEF(hge)
-#endif
-
 #define MOSgetDictFreq(DICTIONARY, KEY) ((BUN*)(((char*) DICTIONARY) + 
wordaligned(sizeof(DICTIONARY), BUN))[KEY])
 
 #define CONDITIONAL_INSERT_dict(INFO, VAL, TPE)        (true)
 
-#define DictionaryClass(TPE) \
-find_value_DEF(TPE)\
-merge_delta_Into_dictionary_DEF(TPE)\
-decompress_dictionary_DEF(TPE)
-
-DictionaryClass(bte)
-DictionaryClass(sht)
-DictionaryClass(int)
-DictionaryClass(lng)
-DictionaryClass(flt)
-DictionaryClass(dbl)
-#ifdef HAVE_HGE
-DictionaryClass(hge)
-#endif
-
 void
 MOSlayout_dict_hdr(MOStask* task, BAT *btech, BAT *bcount, BAT *binput, BAT 
*boutput, BAT *bproperties)
 {
@@ -142,38 +114,6 @@ MOSlayout_dict(MOStask* task, BAT *btech
 #endif
 #undef NAME
 
-#define MOSpostEstimate_DEF(TPE)\
-MOSpostEstimate_SIGNATURE(dict, TPE)\
-{\
-       merge_delta_Into_dictionary_##TPE( task->dict_info);\
-}
-
-MOSpostEstimate_DEF(bte)
-MOSpostEstimate_DEF(sht)
-MOSpostEstimate_DEF(int)
-MOSpostEstimate_DEF(lng)
-MOSpostEstimate_DEF(flt)
-MOSpostEstimate_DEF(dbl)
-#ifdef HAVE_HGE
-MOSpostEstimate_DEF(hge)
-#endif
-
-#define MOSdecompress_DEF(TPE) \
-MOSdecompress_SIGNATURE(dict, TPE)\
-{\
-       DICTdecompress(dict, TPE);\
-}
-
-MOSdecompress_DEF(bte)
-MOSdecompress_DEF(sht)
-MOSdecompress_DEF(int)
-MOSdecompress_DEF(lng)
-MOSdecompress_DEF(flt)
-MOSdecompress_DEF(dbl)
-#ifdef HAVE_HGE
-MOSdecompress_DEF(hge)
-#endif
-
 #define scan_loop_dict(TPE, CI_NEXT, TEST) \
     scan_loop_dictionary(dict, TPE, CI_NEXT, TEST)
 
diff --git a/monetdb5/modules/mosaic/mosaic_dict256.c 
b/monetdb5/modules/mosaic/mosaic_dict256.c
--- a/monetdb5/modules/mosaic/mosaic_dict256.c
+++ b/monetdb5/modules/mosaic/mosaic_dict256.c
@@ -70,34 +70,6 @@ typedef struct _CappedParameters_t {
        MosaicBlkRec base;
 } MosaicBlkHeader_dict256_t;
 
-#define DictionaryClass(TPE) \
-find_value_DEF(TPE)\
-merge_delta_Into_dictionary_DEF(TPE)\
-decompress_dictionary_DEF(TPE)
-
-DictionaryClass(bte)
-DictionaryClass(sht)
-DictionaryClass(int)
-DictionaryClass(lng)
-DictionaryClass(flt)
-DictionaryClass(dbl)
-#ifdef HAVE_HGE
-DictionaryClass(hge)
-#endif
-
-#define MOSadvance_DEF(TPE)\
-MOSadvance_SIGNATURE(dict256, TPE) advance_dictionary(dict256, TPE)
-
-MOSadvance_DEF(bte)
-MOSadvance_DEF(sht)
-MOSadvance_DEF(int)
-MOSadvance_DEF(lng)
-MOSadvance_DEF(flt)
-MOSadvance_DEF(dbl)
-#ifdef HAVE_HGE
-MOSadvance_DEF(hge)
-#endif
-
 void
 MOSlayout_dict256_hdr(MOStask* task, BAT *btech, BAT *bcount, BAT *binput, BAT 
*boutput, BAT *bproperties)
 {
@@ -163,40 +135,9 @@ MOSlayout_dict256(MOStask* task, BAT *bt
 #include "mosaic_dictionary_impl.h"
 #undef TPE
 #endif
+#undef MOS_CUT_OFF_SIZE
 #undef NAME
 
-#define MOSpostEstimate_DEF(TPE)\
-MOSpostEstimate_SIGNATURE(dict256, TPE)\
-{\
-       merge_delta_Into_dictionary_##TPE( task->dict256_info);\
-}
-
-MOSpostEstimate_DEF(bte)
-MOSpostEstimate_DEF(sht)
-MOSpostEstimate_DEF(int)
-MOSpostEstimate_DEF(lng)
-MOSpostEstimate_DEF(flt)
-MOSpostEstimate_DEF(dbl)
-#ifdef HAVE_HGE
-MOSpostEstimate_DEF(hge)
-#endif
-
-#define MOSdecompress_DEF(TPE) \
-MOSdecompress_SIGNATURE(dict256, TPE)\
-{\
-       DICTdecompress(dict256, TPE);\
-}
-
-MOSdecompress_DEF(bte)
-MOSdecompress_DEF(sht)
-MOSdecompress_DEF(int)
-MOSdecompress_DEF(lng)
-MOSdecompress_DEF(flt)
-MOSdecompress_DEF(dbl)
-#ifdef HAVE_HGE
-MOSdecompress_DEF(hge)
-#endif
-
 #define scan_loop_dict256(TPE, CI_NEXT, TEST) \
     scan_loop_dictionary(dict256, TPE, CI_NEXT, TEST)
 
diff --git a/monetdb5/modules/mosaic/mosaic_dictionary.h 
b/monetdb5/modules/mosaic/mosaic_dictionary.h
--- a/monetdb5/modules/mosaic/mosaic_dictionary.h
+++ b/monetdb5/modules/mosaic/mosaic_dictionary.h
@@ -63,58 +63,6 @@ typedef struct _GlobalDictionaryInfo {
 #define GET_FINAL_BITS(task, NAME) ((task)->hdr->CONCAT2(bits_, NAME))
 #define GET_FINAL_DICT_COUNT(task, NAME) ((task)->hdr->CONCAT2(length_, NAME))
 
-#define find_value_DEF(TPE) \
-static inline \
-BUN find_value_##TPE(TPE* dict, BUN dict_count, TPE val) {\
-       BUN m, f= 0, l = dict_count, offset = 0;\
-       /* This function assumes that the implementation of a dictionary*/\
-       /* is that of a sorted array with nils starting first.*/\
-       if (IS_NIL(TPE, val)) return 0;\
-       if (dict_count > 0 && IS_NIL(TPE, dict[0])) {\
-               /*If the dictionary starts with a nil,*/\
-               /*the actual sorted dictionary starts an array entry later.*/\
-               dict++;\
-               offset++;\
-               l--;\
-       }\
-       while( l-f > 0 ) {\
-               m = f + (l-f)/2;\
-               if ( val < dict[m]) l=m-1; else f= m;\
-               if ( val > dict[m]) f=m+1; else l= m;\
-       }\
-       return f + offset;\
-}
-
-#define merge_delta_Into_dictionary_DEF(TPE) \
-static \
-void merge_delta_Into_dictionary_##TPE(GlobalDictionaryInfo* info) {\
-\
-       MosaicBlkRec* bytevector        = Tloc(info->admin, 0);\
-\
-       BUN delta_count = 0;\
-\
-       BUN i;\
-       for (i = 0; i < BATcount(info->admin); i++) {\
-               if (!bytevector[i].tag && bytevector[i].cnt) {\
-                        bytevector[i].tag = 1;\
-                        delta_count++;\
-                        bytevector[i].cnt = 0;\
-               }\
-       }\
-       info->count += delta_count;\
-       GET_BITS(info) = GET_BITS_EXTENDED(info);\
-}
-
-#define decompress_dictionary_DEF(TPE) \
-static void \
-decompress_dictionary_##TPE(TPE* dict, bte bits, BitVector base, BUN limit, 
TPE** dest) {\
-       for(BUN i = 0; i < limit; i++){\
-               BUN key = getBitVector(base,i,(int) bits);\
-               (*dest)[i] = dict[key];\
-       }\
-       *dest += limit;\
-}
-
 #define MosaicBlkHeader_DEF_dictionary(NAME, TPE)\
 typedef struct {\
        MosaicBlkRec rec;\
@@ -128,48 +76,6 @@ typedef struct {\
 
 #define MOScodevectorDict(task, NAME, TPE) ((BitVector) 
&((DICTBlockHeaderTpe(NAME, TPE)*) (task)->blk)->bitvector)
 
-#define advance_dictionary(NAME, TPE)\
-{\
-       BUN cnt = MOSgetCnt(task->blk);\
-\
-       assert(cnt > 0);\
-       task->start += (oid) cnt;\
-\
-       char* blk = (char*)task->blk;\
-       blk += sizeof(MOSBlockHeaderTpe(NAME, TPE));\
-       blk += BitVectorSize(cnt, GET_FINAL_BITS(task, NAME));\
-       blk += GET_PADDING(task->blk, NAME, TPE);\
-\
-       task->blk = (MosaicBlk) blk;\
-}
-
-// insert a series of values into the compressor block using dictionary
-#define DICTcompress(NAME, TPE)\
-{\
-       ALIGN_BLOCK_HEADER(task,  NAME, TPE);\
-\
-       TPE *val = getSrc(TPE, (task));\
-       BUN cnt = estimate->cnt;\
-       BitVector base = MOScodevectorDict(task, NAME, TPE);\
-       BUN i;\
-       TPE* dict = GET_FINAL_DICT(task, NAME, TPE);\
-       BUN dict_size = GET_FINAL_DICT_COUNT(task, NAME);\
-       bte bits = GET_FINAL_BITS(task, NAME);\
-       compress_dictionary_##TPE(dict, dict_size, &i, val, cnt, base, bits);\
-       MOSsetCnt(task->blk, i);\
-}
-
-// the inverse operator, extend the src
-#define DICTdecompress(NAME, TPE)\
-{      BUN cnt = MOSgetCnt((task)->blk);\
-       BitVector base = MOScodevectorDict(task, NAME, TPE);\
-       bte bits = GET_FINAL_BITS(task, NAME);\
-       TPE* dict = GET_FINAL_DICT(task, NAME, TPE);\
-       TPE* dest = (TPE*) (task)->src;\
-       decompress_dictionary_##TPE(dict, bits, base, cnt, &dest);\
-       (task)->src = (char*) dest;\
-}
-
 #define scan_loop_dictionary(NAME, TPE, CANDITER_NEXT, TEST) {\
     TPE* dict = GET_FINAL_DICT(task, NAME, TPE);\
        BitVector base = MOScodevectorDict(task, NAME, TPE);\
diff --git a/monetdb5/modules/mosaic/mosaic_dictionary_impl.h 
b/monetdb5/modules/mosaic/mosaic_dictionary_impl.h
--- a/monetdb5/modules/mosaic/mosaic_dictionary_impl.h
+++ b/monetdb5/modules/mosaic/mosaic_dictionary_impl.h
@@ -173,6 +173,24 @@ MOSestimate_SIGNATURE(NAME, TPE) {
        return MAL_SUCCEED;
 }
 
+MOSpostEstimate_SIGNATURE(NAME, TPE) {
+       GlobalDictionaryInfo* info      = task->CONCAT2(NAME, _info);
+       MosaicBlkRec* bytevector        = Tloc(info->admin, 0);
+
+       BUN delta_count = 0;
+
+       BUN i;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to