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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list