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