Changeset: e5424a9b60b2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e5424a9b60b2
Modified Files:
        monetdb5/modules/mosaic/TODO_MOSAIC.txt
        monetdb5/modules/mosaic/mosaic_delta.c
        monetdb5/modules/mosaic/mosaic_dictionary.h
        monetdb5/modules/mosaic/mosaic_prefix.c
        monetdb5/modules/mosaic/mosaic_raw.c
        monetdb5/modules/mosaic/mosaic_runlength.c
Branch: mosaic
Log Message:

Deduplicating and  macro-wising code.


diffs (truncated from 701 to 300 lines):

diff --git a/monetdb5/modules/mosaic/TODO_MOSAIC.txt 
b/monetdb5/modules/mosaic/TODO_MOSAIC.txt
--- a/monetdb5/modules/mosaic/TODO_MOSAIC.txt
+++ b/monetdb5/modules/mosaic/TODO_MOSAIC.txt
@@ -1,5 +1,4 @@
 ####technical depth####
-FIX anti stuff in select and antiselect
 Finish null semantics plus tests
 make sure candidate lists are working properly for select, theta_select and 
join (2)
 Be sure alignment is correct. Use asserts for this.
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
@@ -409,73 +409,37 @@ MOSdecompress_delta(MOStask task)
        }\
        else {\
                /*normal cases.*/\
-               if( !*anti){\
-                       if( IS_NIL(TPE, (LOW)) ){\
-                               for( ; first < last; first++,i++){\
-                                       DeltaTpe(TPE) delta = (DeltaTpe(TPE)) 
getBitVector(base,i,bits);\
-                                       TPE value = ACCUMULATE(acc, delta, 
sign_mask, TPE);\
-                                       MOSskipit();\
-                                       if (HAS_NIL && IS_NIL(TPE, value)) { 
continue;}\
-                                       bool cmp  =  (((HI) && value <= (HIGH) 
) || (!(HI) && value < (HIGH) ));\
-                                       if (cmp )\
-                                               *o++ = (oid) first;\
-                               }\
-                       } else\
-                       if( IS_NIL(TPE, (HIGH)) ){\
-                               for( ; first < last; first++,i++){\
-                                       DeltaTpe(TPE) delta = (DeltaTpe(TPE)) 
getBitVector(base,i,bits);\
-                                       TPE value = ACCUMULATE(acc, delta, 
sign_mask, TPE);\
-                                       MOSskipit();\
-                                       if (HAS_NIL && IS_NIL(TPE, value)) { 
continue;}\
-                                       bool cmp  =  (((LI) && value >= (LOW) ) 
|| (!(LI) && value > (LOW) ));\
-                                       if (cmp )\
-                                               *o++ = (oid) first;\
-                               }\
-                       } else{\
-                               for( ; first < last; first++,i++){\
-                                       DeltaTpe(TPE) delta = (DeltaTpe(TPE)) 
getBitVector(base,i,bits);\
-                                       TPE value = ACCUMULATE(acc, delta, 
sign_mask, TPE);\
-                                       MOSskipit();\
-                                       if (HAS_NIL && IS_NIL(TPE, value)) { 
continue;}\
-                                       bool cmp  =  (((HI) && value <= (HIGH) 
) || (!(HI) && value < (HIGH) )) &&\
-                                                       (((LI) && value >= 
(LOW) ) || (!(LI) && value > (LOW) ));\
-                                       if (cmp )\
-                                               *o++ = (oid) first;\
-                               }\
+               if( IS_NIL(TPE, (LOW)) ){\
+                       for( ; first < last; first++,i++){\
+                               DeltaTpe(TPE) delta = (DeltaTpe(TPE)) 
getBitVector(base,i,bits);\
+                               TPE value = ACCUMULATE(acc, delta, sign_mask, 
TPE);\
+                               MOSskipit();\
+                               if (HAS_NIL && IS_NIL(TPE, value)) { continue;}\
+                               bool cmp  =  (((HI) && value <= (HIGH) ) || 
(!(HI) && value < (HIGH) ));\
+                               if (cmp == !(ANTI))\
+                                       *o++ = (oid) first;\
                        }\
-               } else {\
-                       if( IS_NIL(TPE, (LOW)) ){\
-                               for( ; first < last; first++,i++){\
-                                       DeltaTpe(TPE) delta = (DeltaTpe(TPE)) 
getBitVector(base,i,bits);\
-                                       TPE value = ACCUMULATE(acc, delta, 
sign_mask, TPE);\
-                                       MOSskipit();\
-                                       if (HAS_NIL && IS_NIL(TPE, value)) { 
continue;}\
-                                       bool cmp  =  (((HI) && value <= (HIGH) 
) || (!(HI) && value < (HIGH) ));\
-                                       if ( !cmp )\
-                                               *o++ = (oid) first;\
-                               }\
-                       } else\
-                       if( IS_NIL(TPE, (HIGH)) ){\
-                               for( ; first < last; first++,i++){\
-                                       DeltaTpe(TPE) delta = (DeltaTpe(TPE)) 
getBitVector(base,i,bits);\
-                                       TPE value = ACCUMULATE(acc, delta, 
sign_mask, TPE);\
-                                       MOSskipit();\
-                                       if (HAS_NIL && IS_NIL(TPE, value)) { 
continue;}\
-                                       bool cmp  =  (((LI) && value >= (LOW) ) 
|| (!(LI) && value > (LOW) ));\
-                                       if ( !cmp )\
-                                               *o++ = (oid) first;\
-                               }\
-                       } else{\
-                               for( ; first < last; first++,i++){\
-                                       DeltaTpe(TPE) delta = (DeltaTpe(TPE)) 
getBitVector(base,i,bits);\
-                                       TPE value = ACCUMULATE(acc, delta, 
sign_mask, TPE);\
-                                       MOSskipit();\
-                                       if (HAS_NIL && IS_NIL(TPE, value)) { 
continue;}\
-                                       bool cmp  =  (((HI) && value <= (HIGH) 
) || (!(HI) && value < (HIGH) )) &&\
-                                                       (((LI) && value >= 
(LOW) ) || (!(LI) && value > (LOW) ));\
-                                       if (!cmp)\
-                                               *o++ = (oid) first;\
-                               }\
+               } else\
+               if( IS_NIL(TPE, (HIGH)) ){\
+                       for( ; first < last; first++,i++){\
+                               DeltaTpe(TPE) delta = (DeltaTpe(TPE)) 
getBitVector(base,i,bits);\
+                               TPE value = ACCUMULATE(acc, delta, sign_mask, 
TPE);\
+                               MOSskipit();\
+                               if (HAS_NIL && IS_NIL(TPE, value)) { continue;}\
+                               bool cmp  =  (((LI) && value >= (LOW) ) || 
(!(LI) && value > (LOW) ));\
+                               if (cmp == !(ANTI))\
+                                       *o++ = (oid) first;\
+                       }\
+               } else{\
+                       for( ; first < last; first++,i++){\
+                               DeltaTpe(TPE) delta = (DeltaTpe(TPE)) 
getBitVector(base,i,bits);\
+                               TPE value = ACCUMULATE(acc, delta, sign_mask, 
TPE);\
+                               MOSskipit();\
+                               if (HAS_NIL && IS_NIL(TPE, value)) { continue;}\
+                               bool cmp  =  (((HI) && value <= (HIGH) ) || 
(!(HI) && value < (HIGH) )) &&\
+                                               (((LI) && value >= (LOW) ) || 
(!(LI) && value > (LOW) ));\
+                               if (cmp == !(ANTI))\
+                                       *o++ = (oid) first;\
                        }\
                }\
        }\
@@ -526,6 +490,17 @@ MOSselect_delta( MOStask task, void *low
        return MAL_SUCCEED;
 }
 
+#define thetaselect_delta_normalized(HAS_NIL, ANTI, TPE) \
+for( ; first < last; first++,i++){\
+       DeltaTpe(TPE) delta = (DeltaTpe(TPE)) getBitVector(base,i,bits);\
+       TPE value = ACCUMULATE(acc, delta, sign_mask, TPE);\
+       MOSskipit();\
+       if (HAS_NIL && IS_NIL(TPE, value)) { continue;}\
+       bool cmp =  (IS_NIL(TPE, low) || value >= low) && (value <= hgh || 
IS_NIL(TPE, hgh)) ;\
+       if (cmp == !(ANTI))\
+               *o++ = (oid) first;\
+}\
+
 #define thetaselect_delta_general(HAS_NIL, TPE)\
 {      TPE low,hgh;\
     MosaicBlkHeader_delta_t* parameters = (MosaicBlkHeader_delta_t*) 
task->blk;\
@@ -555,25 +530,12 @@ MOSselect_delta( MOStask task, void *low
        if ( strcmp(oper,"==") == 0){\
                hgh= low= *(TPE*) val;\
        } \
-       if ( !anti)\
-               /*TODO: simplify this similar to mosaic_capped*/\
-               for( ; first < last; first++,i++){\
-                       DeltaTpe(TPE) delta = (DeltaTpe(TPE)) 
getBitVector(base,i,bits);\
-                       TPE value = ACCUMULATE(acc, delta, sign_mask, TPE);\
-                       MOSskipit();\
-                       if (HAS_NIL && IS_NIL(TPE, value)) { continue;}\
-                       if( (IS_NIL(TPE, low) || value >= low) && (value <= hgh 
|| IS_NIL(TPE, hgh)) )\
-                       *o++ = (oid) first;\
-               }\
-       else\
-               for( ; first < last; first++,i++){\
-                       DeltaTpe(TPE) delta = (DeltaTpe(TPE)) 
getBitVector(base,i,bits);\
-                       TPE value = ACCUMULATE(acc, delta, sign_mask, TPE);\
-                       MOSskipit();\
-                       if (HAS_NIL && IS_NIL(TPE, value)) { continue;}\
-                       if( !( (IS_NIL(TPE, low) || value >= low) && (value <= 
hgh || IS_NIL(TPE, hgh)) ))\
-                               *o++ = (oid) first;\
-               }\
+       if (!anti) {\
+               thetaselect_delta_normalized(HAS_NIL, false, TPE);\
+       }\
+       else {\
+               thetaselect_delta_normalized(HAS_NIL, true, TPE);\
+       }\
 }
 
 #define thetaselect_delta(TPE) {\
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
@@ -211,64 +211,31 @@ typedef struct {
        }\
        else {\
                /*normal cases.*/\
-               if( !ANTI){\
-                       if( IS_NIL(TPE, low) ){\
-                               for(unsigned int i = 0; i < cnt; i++){\
-                                       unsigned int j = 
getBitVector(base,i,bits); \
-                                       if (HAS_NIL && IS_NIL(TPE, dict[j])) { 
continue;}\
-                                       bool cmp  =  ((hi && dict[j] <= hgh ) 
|| (!hi && dict[j] < hgh ));\
-                                       if (cmp )\
-                                               *(*result)++ = (oid) (i + 
hseqbase);\
-                               }\
-                       } else\
-                       if( IS_NIL(TPE, hgh) ){\
-                               for(unsigned int i = 0; i < cnt; i++){\
-                                       unsigned int j = 
getBitVector(base,i,bits); \
-                                       if (HAS_NIL && IS_NIL(TPE, dict[j])) { 
continue;}\
-                                       bool cmp  =  ((li && dict[j] >= low ) 
|| (!li && dict[j] > low ));\
-                                       if (cmp )\
-                                               *(*result)++ = (oid) (i + 
hseqbase);\
-                               }\
-                       } else{\
-                               for(unsigned int i = 0; i < cnt; i++){\
-                                       unsigned int j = 
getBitVector(base,i,bits); \
-                                       if (HAS_NIL && IS_NIL(TPE, dict[j])) { 
continue;}\
-                                       bool cmp  =  ((hi && dict[j] <= hgh ) 
|| (!hi && dict[j] < hgh )) &&\
-                                                       ((li && dict[j] >= low 
) || (!li && dict[j] > low ));\
-                                       if (cmp )\
-                                               *(*result)++ = (oid) (i + 
hseqbase);\
-                               }\
+               if( IS_NIL(TPE, low) ){\
+                       for(unsigned int i = 0; i < cnt; i++){\
+                               unsigned int j = getBitVector(base,i,bits); \
+                               if (HAS_NIL && IS_NIL(TPE, dict[j])) { 
continue;}\
+                               bool cmp  =  ((hi && dict[j] <= hgh ) || (!hi 
&& dict[j] < hgh ));\
+                               if (cmp == !(ANTI))\
+                                       *(*result)++ = (oid) (i + hseqbase);\
                        }\
-               } else {\
-                       if( IS_NIL(TPE, low) && IS_NIL(TPE, hgh)){\
-                               /* nothing is matching */\
-                       } else\
-                       if( IS_NIL(TPE, low) ){\
-                               for(unsigned int i = 0; i < cnt; i++){\
-                                       unsigned int j = 
getBitVector(base,i,bits); \
-                                       if (HAS_NIL && IS_NIL(TPE, dict[j])) { 
continue;}\
-                                       bool cmp  =  ((hi && dict[j] <= hgh ) 
|| (!hi && dict[j] < hgh ));\
-                                       if ( !cmp )\
-                                               *(*result)++ = (oid) (i + 
hseqbase);\
-                               }\
-                       } else\
-                       if( IS_NIL(TPE, hgh) ){\
-                               for(unsigned int i = 0; i < cnt; i++){\
-                                       unsigned int j = 
getBitVector(base,i,bits); \
-                                       if (HAS_NIL && IS_NIL(TPE, dict[j])) { 
continue;}\
-                                       bool cmp  =  ((li && dict[j] >= low ) 
|| (!li && dict[j] > low ));\
-                                       if ( !cmp )\
-                                               *(*result)++ = (oid) (i + 
hseqbase);\
-                               }\
-                       } else{\
-                               for(unsigned int i = 0; i < cnt; i++){\
-                                       unsigned int j = 
getBitVector(base,i,bits); \
-                                       if (HAS_NIL && IS_NIL(TPE, dict[j])) { 
continue;}\
-                                       bool cmp  =  ((hi && dict[j] <= hgh ) 
|| (!hi && dict[j] < hgh )) &&\
-                                                       ((li && dict[j] >= low 
) || (!li && dict[j] > low ));\
-                                       if ( !cmp )\
-                                               *(*result)++ = (oid) (i + 
hseqbase);\
-                               }\
+               } else\
+               if( IS_NIL(TPE, hgh) ){\
+                       for(unsigned int i = 0; i < cnt; i++){\
+                               unsigned int j = getBitVector(base,i,bits); \
+                               if (HAS_NIL && IS_NIL(TPE, dict[j])) { 
continue;}\
+                               bool cmp  =  ((li && dict[j] >= low ) || (!li 
&& dict[j] > low ));\
+                               if (cmp == !(ANTI))\
+                                       *(*result)++ = (oid) (i + hseqbase);\
+                       }\
+               } else{\
+                       for(unsigned int i = 0; i < cnt; i++){\
+                               unsigned int j = getBitVector(base,i,bits); \
+                               if (HAS_NIL && IS_NIL(TPE, dict[j])) { 
continue;}\
+                               bool cmp  =  ((hi && dict[j] <= hgh ) || (!hi 
&& dict[j] < hgh )) &&\
+                                               ((li && dict[j] >= low ) || 
(!li && dict[j] > low ));\
+                               if (cmp == !(ANTI))\
+                                       *(*result)++ = (oid) (i + hseqbase);\
                        }\
                }\
        }\
@@ -304,6 +271,16 @@ void select_dictionary_##TPE(\
        }\
 }
 
+#define thetaselect_dictionary_normalized(HAS_NIL, ANTI, TPE) \
+for(unsigned int i = 0; i < cnt; i++){\
+       unsigned int j = getBitVector(base, i, bits); \
+       if (HAS_NIL && IS_NIL(TPE, dict[j])) { continue;}\
+       bool cmp = (IS_NIL(TPE, low) || dict[j] >= low) && (dict[j] <= hgh || 
IS_NIL(TPE, hgh));\
+       if (cmp == !(ANTI)) {\
+               *(*result)++ = (oid) (i + hseqbase);\
+       }\
+}\
+
 #define thetaselect_dictionary_general(HAS_NIL, TPE)\
 {\
        TPE low,hgh;\
@@ -330,17 +307,11 @@ void select_dictionary_##TPE(\
        if ( strcmp(oper,"==") == 0){\
                hgh= low= val;\
        } \
-       for(unsigned int i = 0; i < cnt; i++){\
-               unsigned int j = getBitVector(base, i, bits); \
-               if (HAS_NIL && IS_NIL(TPE, dict[j])) { continue;}\
-               if( (IS_NIL(TPE, low) || dict[j] >= low) && (dict[j] <= hgh || 
IS_NIL(TPE, hgh)) ){\
-                       if ( !anti) {\
-                               *(*result)++ = (oid) (i + hseqbase);\
-                       }\
-               } else\
-                       if( anti){\
-                               *(*result)++ = (oid) (i + hseqbase);\
-                       }\
+       if (!anti) {\
+               thetaselect_dictionary_normalized(HAS_NIL, false, TPE);\
+       }\
+       else {\
+               thetaselect_dictionary_normalized(HAS_NIL, true, TPE);\
        }\
 }
 
diff --git a/monetdb5/modules/mosaic/mosaic_prefix.c 
b/monetdb5/modules/mosaic/mosaic_prefix.c
--- a/monetdb5/modules/mosaic/mosaic_prefix.c
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to