Changeset: a118b441d55d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a118b441d55d
Modified Files:
        monetdb5/modules/mosaic/mosaic.c
Branch: mosaic
Log Message:

Refactor/simplify code.


diffs (103 lines):

diff --git a/monetdb5/modules/mosaic/mosaic.c b/monetdb5/modules/mosaic/mosaic.c
--- a/monetdb5/modules/mosaic/mosaic.c
+++ b/monetdb5/modules/mosaic/mosaic.c
@@ -26,8 +26,6 @@
 
 char 
*MOSfiltername[]={"raw","runlength","dictionary","delta","linear","frame","prefix","calendar","EOL"};
 
-str MOScompressInternal(Client cntxt, bat *bid, MOStask task, bool debug);
-
 static void
 MOSinit(MOStask task, BAT *b){
        char *base;
@@ -411,28 +409,10 @@ MOScompressInternal(Client cntxt, bat *b
                }
                assert (task->dst < bsrc->tmosaic->base + bsrc->tmosaic->size );
 
-               // wrapup previous block
-               switch(cand){
-               case MOSAIC_RLE:
-               case MOSAIC_DICT:
-               case MOSAIC_CALENDAR:
-               case MOSAIC_FRAME:
-               case MOSAIC_DELTA:
-               case MOSAIC_LINEAR:
-               case MOSAIC_PREFIX:
-                       // close the non-compressed part
-                       if( MOSgetTag(task->blk) == MOSAIC_RAW && 
MOSgetCnt(task->blk) ){
-                               task->start -= MOSgetCnt(task->blk);
-                               MOSupdateHeader(cntxt,task);
-                               MOSadvance_raw(cntxt,task);
-                               // always start with an EOL block
-                               task->dst = MOScodevector(task);
-                               MOSsetTag(task->blk,MOSAIC_EOL);
-                               MOSsetCnt(task->blk,0);
-                       }
-                       break;
-               case MOSAIC_RAW:
-                       if ( MOSgetCnt(task->blk) == MOSAICMAXCNT){
+               if ( MOSgetTag(task->blk) == MOSAIC_RAW) {
+                       if( cand != MOSAIC_RAW ||  MOSgetCnt(task->blk) +1 == 
MOSAICMAXCNT) {
+                               // We close the old MOSAIC_RAW block if 
estimation decides to use a different block type
+                               // or when the current MOSAIC_RAW block has 
become too big.
                                task->start -= MOSgetCnt(task->blk);
                                MOSupdateHeader(cntxt,task);
                                MOSadvance_raw(cntxt,task);
@@ -442,6 +422,7 @@ MOScompressInternal(Client cntxt, bat *b
                                MOSsetCnt(task->blk,0);
                        }
                }
+
                // apply the compression to a chunk
                switch(cand){
                case MOSAIC_RLE:
@@ -486,34 +467,30 @@ MOScompressInternal(Client cntxt, bat *b
                        MOSadvance_calendar(cntxt,task);
                        MOSnewBlk(task);
                        break;
-               default :
-                       // continue to use the last block header.
-
-                       if (MOSgetCnt(task->blk) + 1 < MOSAICMAXCNT) {
-                               MOScompress_raw(cntxt,task);
+               case MOSAIC_RAW: // This is basically the default case.
+                       /* This tries to insert the single value at task->start 
into this MOSAIC_RAW block.
+                        * After that compressions tries to re-evaluate through 
MOSoptimizerCost
+                        * from ++task->start and unwards to estimate a more 
efficient block type.
+                       */
+                       MOScompress_raw(cntxt, task);
                                task->start++;
-                       } else {
-                               MOSupdateHeader(cntxt,task);
-                               MOSadvance_raw(cntxt,task);
-                               MOSnewBlk(task);
-                       }
-
-
+                       break;
+               default : // Unknown block type. Should not happen.
+                       assert(0);
                }
        }
-       if( MOSgetTag(task->blk) == MOSAIC_RAW && MOSgetCnt(task->blk)){
+
+       if( MOSgetTag(task->blk) == MOSAIC_RAW ) {
                MOSupdateHeader(cntxt,task);
                MOSadvance_raw(cntxt,task);
-               task->dst = MOScodevector(task);
-               MOSsetTag(task->blk,MOSAIC_EOL);
-       } else
-               task->dst = MOScodevector(task);
+               MOSnewBlk(task);
+       }
+
        task->bsrc->tmosaic->free = (task->dst - (char*)task->hdr);
        task->timer = GDKusec() - task->timer;
        if(debug) 
                MOSdumpTask(cntxt,task);
-       // if we couldnt compress well enough, ignore the result
-       // TODO
+       // TODO: if we couldnt compress well enough, ignore the result
 
        bsrc->batDirtydesc = true;
        task->ratio = task->hdr->ratio = (flt)task->bsrc->theap.free/ 
task->bsrc->tmosaic->free;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to