Changeset: 215439cb1975 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=215439cb1975
Modified Files:
        gdk/gdk_bitvector.c
        monetdb5/modules/mosaic/Tests/mosaic_calendar.malC
        monetdb5/modules/mosaic/mosaic_calendar.c
Branch: mosaic
Log Message:

Make debugging accessible by macro


diffs (truncated from 396 to 300 lines):

diff --git a/gdk/gdk_bitvector.c b/gdk/gdk_bitvector.c
--- a/gdk/gdk_bitvector.c
+++ b/gdk/gdk_bitvector.c
@@ -27,6 +27,8 @@ typedef unsigned long BUN;
 #include "gdk.h"
 #include "gdk_bitvector.h"
 
+//#define _DEBUG_BITVECTOR_
+
 #define BITS (sizeof( unsigned int) * 8)
 static unsigned int masks[BITS+1];
 
@@ -75,12 +77,16 @@ getBitVector(BitVector vector, BUN i, in
        if ( (shift + bits) <= BITS){
                // fits in a single cell
                value = (vector[cid] >> shift) & masks[bits];
-               //printf("#getBitVector %ld i "BUNFMT" bits %d value %3d cell 
%10d cid "BUNFMT" shift %d\n",(long)vector,i,bits, value, 
vector[cid],cid,shift);
+#ifdef _DEBUG_BITVECTOR_
+               printf("#getBitVector %ld i "BUNFMT" bits %d value %3d cell 
%10d cid "BUNFMT" shift %d\n",(long)vector,i,bits, value, 
vector[cid],cid,shift);
+#endif
        }else{ 
                // spread over two cells
                m1 = BITS - shift;
                value  = ((vector[cid] & (masks[m1]<<shift)) >> shift) | 
((vector[cid+1] & masks[bits - m1]) << m1);
-               //printf("#getBitVector %ld i "BUNFMT" bits %d value %3d cell 
%10d %10d cid "BUNFMT" shift %d m1 %d\n",(long)vector,i,bits, value, 
vector[cid], vector[cid+1],cid,shift,m1);
+#ifdef _DEBUG_BITVECTOR_
+               printf("#getBitVector %ld i "BUNFMT" bits %d value %3d cell 
%10d %10d cid "BUNFMT" shift %d m1 %d\n",(long)vector,i,bits, value, 
vector[cid], vector[cid+1],cid,shift,m1);
+#endif
          }
        return value;
 }
@@ -103,15 +109,22 @@ setBitVector(BitVector vector, const BUN
     if ( (shift + bits) <= BITS){
                // fits in a single cell
         vector[cid]= (vector[cid]  & ~( masks[bits] << shift)) | ((value & 
masks[bits]) << shift);
-               //printf("#setBitVector %ld i "BUNFMT" bits %d value %3d cell 
%10d cid "BUNFMT" shift %d\n",(long)vector,i,bits, value, 
vector[cid],cid,shift);
+#ifdef _DEBUG_BITVECTOR_
+               printf("#setBitVector %ld i "BUNFMT" bits %d value %3d cell 
%10d cid "BUNFMT" shift %d\n",(long)vector,i,bits, value, 
vector[cid],cid,shift);
+#endif
     } else{ 
                // spread over two cells
                m1 = BITS - shift;
         vector[cid]= (vector[cid]  & ~( masks[m1] << shift)) | ( (value & 
masks[m1]) << shift);
         vector[cid+1]= 0 | ( ((value>>m1) & masks[bits-m1]));
-               //printf("#setBitVector %ld i "BUNFMT" bits %d value %3d cell 
%10d %10d cid "BUNFMT" shift %d m1 %d\n",(long)vector,i,bits, value, 
vector[cid], vector[cid+1],cid,shift,m1);
+#ifdef _DEBUG_BITVECTOR_
+               printf("#setBitVector %ld i "BUNFMT" bits %d value %3d cell 
%10d %10d cid "BUNFMT" shift %d m1 %d\n",(long)vector,i,bits, value, 
vector[cid], vector[cid+1],cid,shift,m1);
+#endif
        }
-       //printf("#get it back %d\n",getBitVector(vector,i,bits));
+#ifdef _DEBUG_BITVECTOR_
+       m1 = getBitVector(vector,i,bits);
+       printf("#get it back %s %d %d\n", (value == m1? 
"":"MISMATCH"),value,m1);
+#endif
 }
 
 // clear a cell
diff --git a/monetdb5/modules/mosaic/Tests/mosaic_calendar.malC 
b/monetdb5/modules/mosaic/Tests/mosaic_calendar.malC
--- a/monetdb5/modules/mosaic/Tests/mosaic_calendar.malC
+++ b/monetdb5/modules/mosaic/Tests/mosaic_calendar.malC
@@ -8,9 +8,8 @@ bat.append(d,"2014-08-14":date);
 bat.append(d,"2014-08-14":date);
 bat.append(d,"2014-08-15":date);
 bat.append(d,"2015-07-11":date);
-bat.append(d,"2015-07-12":date);
-bat.append(d,"2016-12-31":date);
-d:= bat.append(d,d);
+#bat.append(d,"2015-07-12":date);
+#bat.append(d,"2016-12-31":date);
 
 io.print(d);
 mosaic.compress(d,"calendar");
diff --git a/monetdb5/modules/mosaic/mosaic_calendar.c 
b/monetdb5/modules/mosaic/mosaic_calendar.c
--- a/monetdb5/modules/mosaic/mosaic_calendar.c
+++ b/monetdb5/modules/mosaic/mosaic_calendar.c
@@ -30,7 +30,8 @@
 #include "mosaic.h"
 #include "mosaic_calendar.h"
 
-#define DAYMASK 037
+#define MASKDAY 037
+#define MASKBITS 5
 
 void
 MOSadvance_calendar(Client cntxt, MOStask task)
@@ -139,12 +140,12 @@ MOSskip_calendar(Client cntxt, MOStask t
 // Store the most frequent ones in the compressed heap header directly based 
on estimated savings
 #define TMPDICT 16*256
 
-#define makeCalendar(TPE, MASK)\
+#define makeCalendar(TPE)\
 {      TPE *val = ((TPE*)task->src) + task->start,v,w;\
        BUN limit = task->stop - task->start > MOSlimit()? MOSlimit(): 
task->stop - task->start;\
        lng cw,cv;\
        for(i = 0; i< limit; i++, val++){\
-               v= *val & DAYMASK; \
+               v= *val & ~MASKDAY; \
                MOSfind(j,dict.val##TPE,v,0,dictsize);\
                if(j == dictsize && dictsize == 0 ){\
                        dict.val##TPE[j]= v;\
@@ -190,7 +191,7 @@ MOScreatecalendar(Client cntxt, MOStask 
 
        // compress by factoring out the year-month, keeping 5 bits for the day
        if( task->type == TYPE_date)
-               makeCalendar(int,DAYMASK)
+               makeCalendar(int)
        if( task->type == TYPE_daytime){
        }
        if( task->type == TYPE_timestamp){
@@ -226,13 +227,14 @@ MOScreatecalendar(Client cntxt, MOStask 
                assert(j<256);
        }
        /* calculate the bit-width */
-       hdr->bits = 1;
-       hdr->mask =1;
+       hdr->bits = MASKBITS + 1;
+       hdr->mask =1;   // only for dictionary part
        for( j=2 ; j < dictsize; j *=2){
                hdr->bits++;
                hdr->mask = (hdr->mask <<1) | 1;
        }
 #ifdef _DEBUG_MOSAIC_
+       mnstr_printf(cntxt->fdout,"#Calendar size %d bits %d mask %o %o\n", 
task->hdr->dictsize, task->hdr->bits, task->hdr->mask, task->hdr->mask 
<<MASKBITS);
        MOSdump_calendar(cntxt, task);
 #endif
 }
@@ -253,22 +255,22 @@ MOSestimate_calendar(Client cntxt, MOSta
                if( task->range[MOSAIC_CALENDAR] > task->start){
                        i = task->range[MOSAIC_CALENDAR] - task->start;
                        if ( i > MOSlimit() ) i = MOSlimit();
-                       if( i * sizeof(int) <= wordaligned( MosaicBlkSize + (i 
* (hdr->bits+5))/8,int))
+                       if( i * sizeof(int) <= wordaligned( MosaicBlkSize + (i 
* hdr->bits)/8,int))
                                return 0.0;
-                       if( task->dst +  wordaligned(MosaicBlkSize + (i * 
(hdr->bits+5))/8,sizeof(int)) >= task->bsrc->tmosaic->base + 
task->bsrc->tmosaic->size)
+                       if( task->dst +  wordaligned(MosaicBlkSize + (i * 
hdr->bits)/8,sizeof(int)) >= task->bsrc->tmosaic->base + 
task->bsrc->tmosaic->size)
                                return 0.0;
-                       if(i) factor = ((flt) i * sizeof(int))/ 
wordaligned(MosaicBlkSize + sizeof(int) + (i * (hdr->bits+5))/8,int);
+                       if(i) factor = ((flt) i * sizeof(int))/ 
wordaligned(MosaicBlkSize + sizeof(int) + (i * hdr->bits)/8,int);
                        return factor;
                }
                for(i =0; i<limit; i++, val++){
-                       v= *val & ~DAYMASK;
+                       v= *val & ~MASKDAY;
                        MOSfind(j,hdr->dict.valint,v,0,hdr->dictsize);
                        if( j == hdr->dictsize || hdr->dict.valint[j] != v )
                                break;
                }
-               if( i * sizeof(int) <= wordaligned( MosaicBlkSize + (i * 
(hdr->bits+5))/8 ,int))
+               if( i * sizeof(int) <= wordaligned( MosaicBlkSize + (i * 
hdr->bits)/8 ,int))
                        return 0.0;
-               if(i) factor = (flt) ((int)i * sizeof(int)) / wordaligned( 
MosaicBlkSize + (i * (hdr->bits+5))/8,int);
+               if(i) factor = (flt) ((int)i * sizeof(int)) / wordaligned( 
MosaicBlkSize + (i * hdr->bits)/8,int);
        } else
        if( task->type == TYPE_daytime){
        } else
@@ -283,31 +285,45 @@ MOSestimate_calendar(Client cntxt, MOSta
 }
 
 // insert a series of values into the compressor block using calendar
-#define CALcompress(TPE, MASK)\
+#define CALcompress(TPE)\
 {      TPE *val = ((TPE*)task->src) + task->start, v;\
        BitVector base = (BitVector) MOScodevector(task);\
        BUN limit = task->stop - task->start > MOSlimit()? MOSlimit(): 
task->stop - task->start;\
        for(i =0; i<limit; i++, val++){\
-               v = *val & ~MASK;\
+               v = *val & ~MASKDAY;\
                MOSfind(j,task->hdr->dict.val##TPE,v,0,hdr->dictsize);\
-               if(j == hdr->dictsize || task->hdr->dict.val##TPE[j] !=  v) \
+               if(j == (unsigned int) hdr->dictsize || 
task->hdr->dict.val##TPE[j] !=  v) \
                        break;\
                else {\
                        hdr->checksum.sum##TPE += v;\
                        hdr->dictfreq[j]++;\
                        MOSincCnt(blk,1);\
-                       setBitVector(base,i,hdr->bits+5,(unsigned int)j);\
+                       setBitVector(base, i, hdr->bits , (unsigned int)( ((j & 
hdr->mask)<< MASKBITS) | (*val & MASKDAY)) );\
                }\
        }\
        assert(i);\
 }
+//mnstr_printf(cntxt->fdout,"#CALcompress   ["BUNFMT"] val %o v [%d] %d %o 
residu  %o %o\n", i, *val, j, hdr->bits, v,  (unsigned int)( *val & MASKDAY), 
(unsigned int)( ((j & hdr->mask)<< MASKBITS) | (*val & MASKDAY)) );
 
 
+// the inverse operator, extend the src
+#define CALdecompress(TPE)\
+{      BUN lim = MOSgetCnt(blk);\
+       base = (BitVector) MOScodevector(task);\
+       for(i = 0; i < lim; i++){\
+               j= getBitVector(base,i,(int) hdr->bits ); \
+               ((TPE*)task->src)[i] = task->hdr->dict.val##TPE[ (j>> MASKBITS) 
& task->hdr->mask] | (j & MASKDAY);\
+               hdr->checksum2.sum##TPE += task->hdr->dict.val##TPE[ (j >> 
MASKBITS) & task->hdr->mask];\
+       }\
+       task->src += i * sizeof(TPE);\
+}
+//mnstr_printf(cntxt->fdout,"#CALdecompress ["BUNFMT"] j %o idx %d [%d] %o val 
%o\n", i, j, hdr->bits, (j>> MASKBITS) & task->hdr->mask, 
task->hdr->dict.val##TPE[ (j>> MASKBITS) & task->hdr->mask], 
((TPE*)task->src)[i]);
+
 void
 MOScompress_calendar(Client cntxt, MOStask task)
 {
        BUN i;
-       int j;
+       unsigned int j;
        MosaicBlk blk = task->blk;
        MosaicHdr hdr = task->hdr;
 
@@ -318,38 +334,25 @@ MOScompress_calendar(Client cntxt, MOSta
        MOSsetCnt(blk,0);
 
        if( task->type == TYPE_date)
-               CALcompress(int, DAYMASK);
+               CALcompress(int);
        if( task->type == TYPE_daytime){
        }
        if( task->type == TYPE_timestamp){
        }
 }
 
-// the inverse operator, extend the src
-
-#define CALdecompress(TPE,MASK)\
-{      BUN lim = MOSgetCnt(blk);\
-       base = (BitVector) MOScodevector(task);\
-       for(i = 0; i < lim; i++){\
-               j= getBitVector(base,i,(int) hdr->bits + 5); \
-               ((TPE*)task->src)[i] = task->hdr->dict.val##TPE[j>>5] | (j & 
MASK);\
-               hdr->checksum2.sum##TPE += task->hdr->dict.val##TPE[j];\
-       }\
-       task->src += i * sizeof(TPE);\
-}
-
 void
 MOSdecompress_calendar(Client cntxt, MOStask task)
 {
        MosaicBlk blk = task->blk;
        MosaicHdr hdr = task->hdr;
        BUN i;
-       int j;
+       unsigned int j;
        BitVector base;
        (void) cntxt;
 
        if( task->type == TYPE_date){
-               CALdecompress(int, DAYMASK);
+               CALdecompress(int);
        }
        if( task->type == TYPE_daytime){
        }
@@ -372,7 +375,7 @@ MOSdecompress_calendar(Client cntxt, MOS
                if( *(TPE*) low == TPE##_nil ){\
                        for(i=0 ; first < last; first++, i++){\
                                MOSskipit();\
-                               j= getBitVector(base,i,(int) hdr->bits+ BITS); \
+                               j= getBitVector(base,i,(int) hdr->bits); \
                                cmp  =  ((*hi && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) <= * (TPE*)hgh ) || (!*hi && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) < *(TPE*)hgh ));\
                                if (cmp )\
                                        *o++ = (oid) first;\
@@ -381,7 +384,7 @@ MOSdecompress_calendar(Client cntxt, MOS
                if( *(TPE*) hgh == TPE##_nil ){\
                        for(i=0; first < last; first++, i++){\
                                MOSskipit();\
-                               j= getBitVector(base,i,(int) hdr->bits + BITS); 
\
+                               j= getBitVector(base,i,(int) hdr->bits ); \
                                cmp  =  ((*li && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) >= * (TPE*)low ) || (!*li && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) > *(TPE*)low ));\
                                if (cmp )\
                                        *o++ = (oid) first;\
@@ -389,7 +392,7 @@ MOSdecompress_calendar(Client cntxt, MOS
                } else{\
                        for(i=0 ; first < last; first++, i++){\
                                MOSskipit();\
-                               j= getBitVector(base,i,(int) hdr->bits + BITS); 
\
+                               j= getBitVector(base,i,(int) hdr->bits ); \
                                cmp  =  ((*hi && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) <= * (TPE*)hgh ) || (!*hi && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) < *(TPE*)hgh )) &&\
                                                ((*li && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) >= * (TPE*)low ) || (!*li && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) > *(TPE*)low ));\
                                if (cmp )\
@@ -403,7 +406,7 @@ MOSdecompress_calendar(Client cntxt, MOS
                if( *(TPE*) low == TPE##_nil ){\
                        for(i=0 ; first < last; first++, i++){\
                                MOSskipit();\
-                               j= getBitVector(base,i,(int) hdr->bits + BITS); 
\
+                               j= getBitVector(base,i,(int) hdr->bits ); \
                                cmp  =  ((*hi && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) <= * (TPE*)hgh ) || (!*hi && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) < *(TPE*)hgh ));\
                                if ( !cmp )\
                                        *o++ = (oid) first;\
@@ -412,7 +415,7 @@ MOSdecompress_calendar(Client cntxt, MOS
                if( *(TPE*) hgh == TPE##_nil ){\
                        for(i=0 ; first < last; first++, i++){\
                                MOSskipit();\
-                               j= getBitVector(base,i,(int) hdr->bits+BITS); \
+                               j= getBitVector(base,i,(int) hdr->bits); \
                                cmp  =  ((*li && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) >= * (TPE*)low ) || (!*li && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) > *(TPE*)low ));\
                                if ( !cmp )\
                                        *o++ = (oid) first;\
@@ -420,7 +423,7 @@ MOSdecompress_calendar(Client cntxt, MOS
                } else{\
                        for(i=0 ; first < last; first++, i++){\
                                MOSskipit();\
-                               j= getBitVector(base,i,(int) hdr->bits+BITS); \
+                               j= getBitVector(base,i,(int) hdr->bits); \
                                cmp  =  ((*hi && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) <= * (TPE*)hgh ) || (!*hi && 
(task->hdr->dict.val##TPE[j>>BITS] | (j & MASK)) < *(TPE*)hgh )) &&\
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to