Changeset: fc89ee61e658 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fc89ee61e658
Modified Files:
        monetdb5/modules/mal/mosaic.c
        monetdb5/modules/mal/mosaic.h
        monetdb5/modules/mal/mosaic_delta.c
        monetdb5/modules/mal/mosaic_dictionary.c
        monetdb5/modules/mal/mosaic_hdr.c
        monetdb5/modules/mal/mosaic_linear.c
        monetdb5/modules/mal/mosaic_literal.c
        monetdb5/modules/mal/mosaic_runlength.c
        monetdb5/modules/mal/mosaic_variance.c
        monetdb5/modules/mal/mosaic_zone.c
Branch: mosaic
Log Message:

Cleanup block header manipulations


diffs (truncated from 1459 to 300 lines):

diff --git a/monetdb5/modules/mal/mosaic.c b/monetdb5/modules/mal/mosaic.c
--- a/monetdb5/modules/mal/mosaic.c
+++ b/monetdb5/modules/mal/mosaic.c
@@ -51,6 +51,12 @@ MOSinit(MOStask task, BAT *b){
        task->dst = base + MosaicBlkSize;
 }
 
+void MOSblk(MosaicBlk blk)
+{
+       printf("Block %d tag %d cnt "BUNFMT"\n", (int)((lng)blk 
%10000),MOSgetTag(blk),MOSgetCnt(blk));
+}
+
+#ifdef _DEBUG_MOSAIC_
 static void
 MOSdumpTask(Client cntxt,MOStask task)
 {
@@ -63,7 +69,9 @@ MOSdumpTask(Client cntxt,MOStask task)
        for ( i=0; i < MOSAIC_METHODS; i++)
        if( task->blks[i])
                mnstr_printf(cntxt->fdout, "%s\t"LLFMT "\t"LLFMT " " LLFMT"\t" 
, filtername[i], task->blks[i], task->elms[i], task->elms[i]/task->blks[i]);
+       mnstr_printf(cntxt->fdout,"\n");
 }
+#endif
 
 // dump a compressed BAT
 static void
@@ -76,7 +84,7 @@ MOSdumpInternal(Client cntxt, BAT *b){
        MOSinit(task,b);
        MOSinitializeScan(cntxt,task,0,task->hdr->top);
        while(task->start< task->stop){
-               switch(MOStag(task->blk)){
+               switch(MOSgetTag(task->blk)){
                case MOSAIC_NONE:
                        MOSdump_literal(cntxt,task);
                        MOSadvance_literal(cntxt,task);
@@ -270,12 +278,11 @@ MOScompressInternal(Client cntxt, int *r
        MOSinitHeader(task);
 
        // always start with an EOL block
-       *task->blk = MOSeol;
+       MOSsetTag(task->blk,MOSAIC_EOL);
 
        cutoff = task->elm > 1000? task->elm - 1000: task->elm;
        while(task->elm > 0){
                // default is to extend the non-compressed block
-               //mnstr_printf(cntxt->fdout,"#elements "BUNFMT"\n",task->elm);
                cand = MOSAIC_NONE;
                fac = 1.0;
                factor = 1.0;
@@ -340,28 +347,28 @@ MOScompressInternal(Client cntxt, int *r
                case MOSAIC_DELTA:
                case MOSAIC_LINEAR:
                        // close the non-compressed part
-                       if( (MOStag(task->blk) == MOSAIC_NONE || 
MOStag(task->blk) == MOSAIC_ZONE) && MOScnt(task->blk) ){
+                       if( (MOSgetTag(task->blk) == MOSAIC_NONE || 
MOSgetTag(task->blk) == MOSAIC_ZONE) && MOSgetCnt(task->blk) ){
                                MOSupdateHeader(cntxt,task);
-                               if( MOStag(task->blk) == MOSAIC_NONE)
+                               if( MOSgetTag(task->blk) == MOSAIC_NONE)
                                        MOSskip_literal(cntxt,task);
                                else
                                        MOSskip_zone(cntxt,task);
                                // always start with an EOL block
                                task->dst = ((char*) task->blk)+ MosaicBlkSize;
-                               *task->blk = MOSeol;
+                               MOSsetTag(task->blk,MOSAIC_EOL);
                        }
                        break;
                case MOSAIC_NONE:
                case MOSAIC_ZONE:
-                       if ( MOScnt(task->blk) == MOSlimit()){
+                       if ( MOSgetCnt(task->blk) == MOSlimit()){
                                MOSupdateHeader(cntxt,task);
-                               if( MOStag(task->blk) == MOSAIC_NONE)
+                               if( MOSgetTag(task->blk) == MOSAIC_NONE)
                                        MOSskip_literal(cntxt,task);
                                else
                                        MOSskip_zone(cntxt,task);
                                // always start with an EOL block
                                task->dst = ((char*) task->blk)+ MosaicBlkSize;
-                               *task->blk = MOSeol;
+                               MOSsetTag(task->blk,MOSAIC_EOL);
                        }
                }
                // apply the compression to a chunk
@@ -370,55 +377,55 @@ MOScompressInternal(Client cntxt, int *r
                        MOScompress_dictionary(cntxt,task);
                        MOSupdateHeader(cntxt,task);
                        //prepare new block header
-                       task->elm -= MOScnt(task->blk);
+                       task->elm -= MOSgetCnt(task->blk);
                        MOSadvance_dictionary(cntxt,task);
-                       *task->blk = MOSeol;
+                       MOSsetTag(task->blk,MOSAIC_EOL);
                        task->dst = ((char*) task->blk)+ MosaicBlkSize;
                        break;
                case MOSAIC_VARIANCE:
                        MOScompress_variance(cntxt,task);
                        MOSupdateHeader(cntxt,task);
                        //prepare new block header
-                       task->elm -= MOScnt(task->blk);
+                       task->elm -= MOSgetCnt(task->blk);
                        MOSadvance_variance(cntxt,task);
-                       *task->blk = MOSeol;
+                       MOSsetTag(task->blk,MOSAIC_EOL);
                        task->dst = ((char*) task->blk)+ MosaicBlkSize;
                        break;
                case MOSAIC_DELTA:
                        MOScompress_delta(cntxt,task);
                        MOSupdateHeader(cntxt,task);
                        //prepare new block header
-                       task->elm -= MOScnt(task->blk);
+                       task->elm -= MOSgetCnt(task->blk);
                        MOSadvance_delta(cntxt,task);
-                       *task->blk = MOSeol;
+                       MOSsetTag(task->blk,MOSAIC_EOL);
                        task->dst = ((char*) task->blk)+ MosaicBlkSize;
                        break;
                case MOSAIC_LINEAR:
                        MOScompress_linear(cntxt,task);
                        MOSupdateHeader(cntxt,task);
                        //prepare new block header
-                       task->elm -= MOScnt(task->blk);
+                       task->elm -= MOSgetCnt(task->blk);
                        MOSadvance_linear(cntxt,task);
-                       *task->blk= MOSeol;
+                       MOSsetTag(task->blk,MOSAIC_EOL);
                        task->dst = ((char*) task->blk)+ MosaicBlkSize;
                        break;
                case MOSAIC_RLE:
                        MOScompress_runlength(cntxt,task);
                        MOSupdateHeader(cntxt,task);
                        //prepare new block header
-                       task->elm -= MOScnt(task->blk);
+                       task->elm -= MOSgetCnt(task->blk);
                        MOSadvance_runlength(cntxt,task);
-                       *task->blk = MOSeol;
+                       MOSsetTag(task->blk,MOSAIC_EOL);
                        task->dst = ((char*) task->blk)+ MosaicBlkSize;
                        break;
                case MOSAIC_ZONE:
-                       if( MOScnt(task->blk) == 0)
+                       if( MOSgetCnt(task->blk) == 0)
                                task->dst += 2 * MosaicBlkSize;
-                       if ( MOScnt(task->blk) > MAXZONESIZE){
+                       if ( MOSgetCnt(task->blk) > MAXZONESIZE){
                                MOSupdateHeader(cntxt,task);
                                MOSadvance_zone(cntxt,task);
                                task->dst = ((char*) task->blk)+ MosaicBlkSize;
-                               *task->blk = MOSeol;
+                               MOSsetTag(task->blk,MOSAIC_EOL);
                        }
                        MOScompress_zone(cntxt,task);
                        break;
@@ -427,23 +434,22 @@ MOScompressInternal(Client cntxt, int *r
                        MOScompress_literal(cntxt,task);
                }
        }
-       if( (MOStag(task->blk) == MOSAIC_NONE || MOStag(task->blk) == 
MOSAIC_ZONE) && MOScnt(task->blk)){
+       if( (MOSgetTag(task->blk) == MOSAIC_NONE || MOSgetTag(task->blk) == 
MOSAIC_ZONE) && MOSgetCnt(task->blk)){
                MOSupdateHeader(cntxt,task);
-               if( MOStag(task->blk) == MOSAIC_NONE ){
+               if( MOSgetTag(task->blk) == MOSAIC_NONE ){
                        MOSadvance_literal(cntxt,task);
                        task->dst = ((char*) task->blk)+ MosaicBlkSize;
                } else{
                        MOSadvance_zone(cntxt,task);
                        task->dst = ((char*) task->blk)+ 3 * MosaicBlkSize;
                }
-               *task->blk = MOSeol;
+               MOSsetTag(task->blk,MOSAIC_EOL);
        }
        task->xsize = (task->dst - (char*)task->hdr) + MosaicHdrSize;
        task->timer = GDKusec() - task->timer;
-//#ifdef _DEBUG_MOSAIC_
+#ifdef _DEBUG_MOSAIC_
        MOSdumpTask(cntxt,task);
-       mnstr_printf(cntxt->fdout,"\n");
-//#endif
+#endif
        // if we couldnt compress well enough, ignore the result
 /*
        if( task->xsize && task->size / task->xsize < 1){
@@ -536,7 +542,7 @@ MOSdecompressInternal(Client cntxt, int 
        task->src = Tloc(bn, BUNfirst(bn));
        task->timer = GDKusec();
        while(task->blk){
-               switch(MOStag(task->blk)){
+               switch(MOSgetTag(task->blk)){
                case MOSAIC_DICT:
                        MOSdecompress_dictionary(cntxt,task);
                        MOSskip_dictionary(cntxt,task);
@@ -737,7 +743,7 @@ MOSsubselect(Client cntxt, MalBlkPtr mb,
        MOSinitializeScan(cntxt,task,startblk,stopblk);
 
        while(task->start < task->stop ){
-               switch(MOStag(task->blk)){
+               switch(MOSgetTag(task->blk)){
                case MOSAIC_RLE:
                        MOSsubselect_runlength(cntxt,task,low,hgh,li,hi,anti);
                        break;
@@ -867,7 +873,7 @@ str MOSthetasubselect(Client cntxt, MalB
        MOSinitializeScan(cntxt,task,startblk,stopblk);
 
        while(task->start < task->stop ){
-               switch(MOStag(task->blk)){
+               switch(MOSgetTag(task->blk)){
                case MOSAIC_RLE:
                        MOSthetasubselect_runlength(cntxt,task,low,*oper);
                        break;
@@ -1001,7 +1007,7 @@ str MOSleftfetchjoin(Client cntxt, MalBl
 
        // loop thru all the chunks and fetch all results
        while(task->start<task->stop )
-               switch(MOStag(task->blk)){
+               switch(MOSgetTag(task->blk)){
                case MOSAIC_RLE:
                        MOSleftfetchjoin_runlength(cntxt, task);
                        break;
@@ -1125,7 +1131,7 @@ MOSjoin(Client cntxt, MalBlkPtr mb, MalS
 
        // loop thru all the chunks and collect the results
        while(task->blk )
-               switch(MOStag(task->blk)){
+               switch(MOSgetTag(task->blk)){
                case MOSAIC_RLE:
                        MOSjoin_runlength(cntxt, task);
                        break;
diff --git a/monetdb5/modules/mal/mosaic.h b/monetdb5/modules/mal/mosaic.h
--- a/monetdb5/modules/mal/mosaic.h
+++ b/monetdb5/modules/mal/mosaic.h
@@ -68,19 +68,11 @@ typedef struct MOSAICHEADER{
 #define MOSshift 24
 typedef int *MosaicBlk;
 
-#define MOStag(Blk) (*(Blk)>>MOSshift)
-#define MOSsetTag(Tag)  ((int) (Tag) <<MOSshift)
-#define MOScnt(Blk) (BUN)(*(Blk) & ~(0377<<MOSshift))
-#define MOSinc(Blk,I) *(Blk)= *(Blk)+I
-
-#define MOSnone (((int)MOSAIC_NONE) <<MOSshift)
-#define MOSrle (((int)MOSAIC_RLE) <<MOSshift)
-#define MOSdict (((int)MOSAIC_DICT) <<MOSshift)
-#define MOSvariance (((int)MOSAIC_VARIANCE) <<MOSshift)
-#define MOSlinear (((int)MOSAIC_LINEAR) <<MOSshift)
-#define MOSdelta (((int)MOSAIC_DELTA) <<MOSshift)
-#define MOSzone (((int)MOSAIC_ZONE) <<MOSshift)
-#define MOSeol (((int)MOSAIC_EOL) <<MOSshift)
+#define MOSgetTag(Blk) (*(Blk)>>MOSshift)
+#define MOSsetTag(Blk,Tag)  *Blk = (Tag) <<MOSshift
+#define MOSsetCnt(Blk,I) *Blk = I & ~(0377<<MOSshift)
+#define MOSgetCnt(Blk) (BUN)(*(Blk) & ~(0377<<MOSshift))
+#define MOSincCnt(Blk,I) *(Blk)= *(Blk)+I
 
 #define MOSlimit() (int) ~(0377<<MOSshift)
 
@@ -190,5 +182,6 @@ mosaic_export str MOSthetasubselect(Clie
 mosaic_export str MOSleftfetchjoin(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 mosaic_export str MOSjoin(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 mosaic_export str MOSdump(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
+mosaic_export void MOSblk(MosaicBlk blk);
 
 #endif /* _MOSLIST_H */
diff --git a/monetdb5/modules/mal/mosaic_delta.c 
b/monetdb5/modules/mal/mosaic_delta.c
--- a/monetdb5/modules/mal/mosaic_delta.c
+++ b/monetdb5/modules/mal/mosaic_delta.c
@@ -32,23 +32,23 @@ MOSadvance_delta(Client cntxt, MOStask t
        MosaicBlk blk = task->blk;
        (void) cntxt;
 
-       task->start += MOScnt(blk);
+       task->start += MOSgetCnt(blk);
        switch(task->type){
-       case TYPE_sht: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(sht) + MOScnt(blk)-1,sht)); break ;
-       case TYPE_int: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(int) + MOScnt(blk)-1,int)); break ;
-       case TYPE_oid: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(oid) + MOScnt(blk)-1,oid)); break ;
-       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(wrd) + MOScnt(blk)-1,wrd)); break ;
-       case TYPE_lng: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(lng) + MOScnt(blk)-1,lng)); break ;
+       case TYPE_sht: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(sht) + MOSgetCnt(blk)-1,sht)); break ;
+       case TYPE_int: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(int) + MOSgetCnt(blk)-1,int)); break ;
+       case TYPE_oid: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(oid) + MOSgetCnt(blk)-1,oid)); break ;
+       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(wrd) + MOSgetCnt(blk)-1,wrd)); break ;
+       case TYPE_lng: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(lng) + MOSgetCnt(blk)-1,lng)); break ;
 #ifdef HAVE_HGE
-       case TYPE_hge: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(hge) + MOScnt(blk)-1,hge)); break ;
+       case TYPE_hge: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(hge) + MOSgetCnt(blk)-1,hge)); break ;
 #endif
        default:
                if( task->type == TYPE_timestamp)
-                       task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize 
+ wordaligned(sizeof(timestamp) + MOScnt(blk)-1,timestamp)); 
+                       task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize 
+ wordaligned(sizeof(timestamp) + MOSgetCnt(blk)-1,timestamp)); 
                if( task->type == TYPE_date)
-                       task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize 
+ wordaligned(sizeof(date) + MOScnt(blk)-1,date)); 
+                       task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize 
+ wordaligned(sizeof(date) + MOSgetCnt(blk)-1,date)); 
                if( task->type == TYPE_daytime)
-                       task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize 
+ wordaligned(sizeof(daytime) + MOScnt(blk)-1,daytime)); 
+                       task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize 
+ wordaligned(sizeof(daytime) + MOSgetCnt(blk)-1,daytime)); 
        }
 }
 
@@ -57,14 +57,14 @@ void
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to