Changeset: 32300072972e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=32300072972e
Modified Files:
        monetdb5/modules/mal/mosaic.h
        monetdb5/modules/mal/mosaic_delta.c
        monetdb5/modules/mal/mosaic_dictionary.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:

Make estimation more precise and consistent.


diffs (truncated from 401 to 300 lines):

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
@@ -81,7 +81,7 @@ typedef int *MosaicBlk;
  * We use an encoding that fits the column type requirements
  */
 #define wordaligned(SZ,TYPE) \
-        ((SZ) +  ((SZ) % sizeof(int)? sizeof(int) - ((SZ)%sizeof(TYPE)) : 0))
+        ((SZ) +  ((SZ) % sizeof(TYPE)? sizeof(TYPE) - ((SZ)%sizeof(TYPE)) : 0))
 
 #define MosaicHdrSize  wordaligned(sizeof(struct MOSAICHEADER),lng)
 #define MosaicBlkSize  wordaligned(sizeof(lng),lng)
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
@@ -35,21 +35,21 @@ MOSadvance_delta(Client cntxt, MOStask t
        task->start += MOSgetCnt(blk);
        switch(task->type){
        //case TYPE_bte: case TYPE_bit: no compression achievable
-       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 ;
+       case TYPE_sht: task->blk = (MosaicBlk)( ((char*) blk)+ 
wordaligned(sizeof(sht) + MosaicBlkSize + MOSgetCnt(blk)-1,sht)); break ;
+       case TYPE_int: task->blk = (MosaicBlk)( ((char*) blk)+ 
wordaligned(sizeof(int) + MosaicBlkSize + MOSgetCnt(blk)-1,int)); break ;
+       case TYPE_oid: task->blk = (MosaicBlk)( ((char*) blk)+ 
wordaligned(sizeof(oid) + MosaicBlkSize + MOSgetCnt(blk)-1,oid)); break ;
+       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*) blk)+ 
wordaligned(sizeof(wrd) + MosaicBlkSize + MOSgetCnt(blk)-1,wrd)); break ;
+       case TYPE_lng: task->blk = (MosaicBlk)( ((char*) blk)+ 
wordaligned(sizeof(lng) + MosaicBlkSize + MOSgetCnt(blk)-1,lng)); break ;
        //case TYPE_flt: case TYPE_dbl: to be looked into.
 #ifdef HAVE_HGE
-       case TYPE_hge: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize + 
wordaligned(sizeof(hge) + MOSgetCnt(blk)-1,hge)); break ;
+       case TYPE_hge: task->blk = (MosaicBlk)( ((char*) blk) + 
wordaligned(MosaicBlkSize + sizeof(hge) + MOSgetCnt(blk)-1,hge)); break ;
 #endif
        case TYPE_str:
                switch(task->b->T->width){
-               case 1: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize 
+ wordaligned(sizeof(bte)* MOSgetCnt(blk)-1,bte)); break ;
-               case 2: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize 
+ wordaligned(sizeof(sht)* MOSgetCnt(blk)-1,sht)); break ;
-               case 4: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize 
+ wordaligned(sizeof(int)* MOSgetCnt(blk)-1,int)); break ;
-               case 8: task->blk = (MosaicBlk)( ((char*) blk) + MosaicBlkSize 
+ wordaligned(sizeof(lng)* MOSgetCnt(blk)-1,lng)); break ;
+               case 1: task->blk = (MosaicBlk)( ((char*) blk) + 
wordaligned(sizeof(bte)+ MosaicBlkSize + MOSgetCnt(blk)-1,bte)); break ;
+               case 2: task->blk = (MosaicBlk)( ((char*) blk) + 
wordaligned(sizeof(sht)+ MosaicBlkSize + MOSgetCnt(blk)-1,sht)); break ;
+               case 4: task->blk = (MosaicBlk)( ((char*) blk) + 
wordaligned(sizeof(int)+ MosaicBlkSize + MOSgetCnt(blk)-1,int)); break ;
+               case 8: task->blk = (MosaicBlk)( ((char*) blk) + 
wordaligned(sizeof(lng)+ MosaicBlkSize + MOSgetCnt(blk)-1,lng)); break ;
                }
                break;
        default:
@@ -88,7 +88,7 @@ MOSskip_delta(Client cntxt, MOStask task
                val = *w;\
        }\
        if ( i > MOSlimit() ) i = MOSlimit();\
-       factor = ((float) i * sizeof(TYPE))/  (2 * MosaicBlkSize + 
sizeof(TYPE)+i-1);\
+       factor = ((float) i * sizeof(TYPE))/  wordaligned(sizeof(int) + 
MosaicBlkSize + i-1,TYPE);\
 }
 
 // estimate the compression level 
@@ -125,7 +125,7 @@ MOSestimate_delta(Client cntxt, MOStask 
                                val = *w;
                        }
                        if ( i > MOSlimit() ) i = MOSlimit();
-                       factor = ((float) i * sizeof(int))/  (2 * MosaicBlkSize 
+ sizeof(int)+i-1);
+                       factor = ((float) i * sizeof(int))/ 
wordaligned(sizeof(int) + MosaicBlkSize + i-1,int);
                }
                break;
        //case TYPE_flt: case TYPE_dbl: to be looked into.
diff --git a/monetdb5/modules/mal/mosaic_dictionary.c 
b/monetdb5/modules/mal/mosaic_dictionary.c
--- a/monetdb5/modules/mal/mosaic_dictionary.c
+++ b/monetdb5/modules/mal/mosaic_dictionary.c
@@ -38,23 +38,23 @@ MOSadvance_dictionary(Client cntxt, MOSt
        task->start += MOSgetCnt(task->blk);
        switch(task->type){
        //case TYPE_bte: CASE_bit: no compression achievable
-       case TYPE_sht: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + task->dictsize * sizeof(sht)+ wordaligned(sizeof(bte) * 
MOSgetCnt(task->blk),sht)); break;
-       case TYPE_int: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + task->dictsize * sizeof(int)+ wordaligned(sizeof(bte) * 
MOSgetCnt(task->blk),int)); break;
-       case TYPE_lng: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + task->dictsize * sizeof(lng)+ wordaligned(sizeof(bte) * 
MOSgetCnt(task->blk),lng)); break;
-       case TYPE_oid: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + task->dictsize * sizeof(oid)+ wordaligned(sizeof(bte) * 
MOSgetCnt(task->blk),oid)); break;
-       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + task->dictsize * sizeof(wrd)+ wordaligned(sizeof(bte) * 
MOSgetCnt(task->blk),wrd)); break;
-       case TYPE_flt: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + task->dictsize * sizeof(flt)+ wordaligned(sizeof(bte) * 
MOSgetCnt(task->blk),flt)); break;
-       case TYPE_dbl: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + task->dictsize * sizeof(dbl)+ wordaligned(sizeof(bte) * 
MOSgetCnt(task->blk),dbl)); break;
+       case TYPE_sht: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned(2* MosaicBlkSize + task->dictsize * sizeof(sht)+ sizeof(bte) * 
MOSgetCnt(task->blk),sht)); break;
+       case TYPE_int: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned(2* MosaicBlkSize + task->dictsize * sizeof(int)+ sizeof(bte) * 
MOSgetCnt(task->blk),int)); break;
+       case TYPE_lng: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned(2* MosaicBlkSize + task->dictsize * sizeof(lng)+ sizeof(bte) * 
MOSgetCnt(task->blk),lng)); break;
+       case TYPE_oid: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned(2* MosaicBlkSize + task->dictsize * sizeof(oid)+ sizeof(bte) * 
MOSgetCnt(task->blk),oid)); break;
+       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned(2* MosaicBlkSize + task->dictsize * sizeof(wrd)+ sizeof(bte) * 
MOSgetCnt(task->blk),wrd)); break;
+       case TYPE_flt: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned(2* MosaicBlkSize + task->dictsize * sizeof(flt)+ sizeof(bte) * 
MOSgetCnt(task->blk),flt)); break;
+       case TYPE_dbl: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned(2* MosaicBlkSize + task->dictsize * sizeof(dbl)+ sizeof(bte) * 
MOSgetCnt(task->blk),dbl)); break;
 #ifdef HAVE_HGE
-       case TYPE_hge: task->blk = (MosaicBlk)( ((char*)task->blk) + 2* 
MosaicBlkSize + task->dictsize * sizeof(hge)+ wordaligned(sizeof(bte) * 
MOSgetCnt(task->blk),hge)); break;
+       case TYPE_hge: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned(2* MosaicBlkSize + task->dictsize * sizeof(hge)+ sizeof(bte) * 
MOSgetCnt(task->blk),hge)); break;
 #endif
        default:
                if( task->type == TYPE_timestamp)
-                               task->blk = (MosaicBlk)( ((char*)task->blk) + 
2* MosaicBlkSize + task->dictsize * sizeof(timestamp)+ wordaligned(sizeof(bte) 
* MOSgetCnt(task->blk),timestamp)); 
+                               task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned(2* MosaicBlkSize + task->dictsize * sizeof(timestamp)+ sizeof(bte) 
* MOSgetCnt(task->blk),timestamp)); 
                if( task->type == TYPE_date)
-                               task->blk = (MosaicBlk)( ((char*)task->blk) + 
2* MosaicBlkSize + task->dictsize * sizeof(date)+ wordaligned(sizeof(bte) * 
MOSgetCnt(task->blk),date)); 
+                               task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned(2* MosaicBlkSize + task->dictsize * sizeof(date)+ sizeof(bte) * 
MOSgetCnt(task->blk),date)); 
                if( task->type == TYPE_daytime)
-                               task->blk = (MosaicBlk)( ((char*)task->blk) + 
2* MosaicBlkSize + task->dictsize * sizeof(date)+ wordaligned(sizeof(bte) * 
MOSgetCnt(task->blk),daytime)); 
+                               task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned(2* MosaicBlkSize + task->dictsize * sizeof(date)+ sizeof(bte) * 
MOSgetCnt(task->blk),daytime)); 
        }
 }
 
@@ -117,7 +117,7 @@ MOSskip_dictionary(Client cntxt, MOStask
 
 #define estimateDict(TPE)\
 {      TPE *val = (TPE*)task->src;\
-       TPE *dict = (TPE*)((char*)task->dst + 3 * MosaicBlkSize);\
+       TPE *dict = (TPE*)((char*)task->dst + 2 * MosaicBlkSize);\
        for(i =0; i<task->elm; i++, val++){\
                for(j= 0; j< *size; j++)\
                        if( dict[j] == *val) {cnt++;break;}\
@@ -130,7 +130,7 @@ MOSskip_dictionary(Client cntxt, MOStask
                }\
        }\
        if ( i > MOSlimit() ) i = MOSlimit();\
-       if(i) factor = (flt) ((int)i * sizeof(int)) / (3 * MosaicBlkSize + 
sizeof(int) * task->dictsize +i);\
+       if(i) factor = (flt) ((int)i * sizeof(int)) / wordaligned(2* 
MosaicBlkSize + task->dictsize * sizeof(TPE)+ sizeof(bte) * 
MOSgetCnt(task->blk),TPE);\
 }
 
 // calculate the expected reduction using DICT in terms of elements compressed
@@ -158,7 +158,7 @@ MOSestimate_dictionary(Client cntxt, MOS
 #endif
        case TYPE_int:
                {       int *val = (int*)task->src;
-                       int *dict = (int*)((char*)task->dst + 3 * 
MosaicBlkSize);
+                       int *dict = (int*)((char*)task->dst + 2 * 
MosaicBlkSize);
                        for(i =0; i<task->elm; i++, val++){
                                for(j= 0; j< *size; j++)
                                        if( dict[j] == *val) {cnt++;break;}
@@ -171,7 +171,7 @@ MOSestimate_dictionary(Client cntxt, MOS
                                }
                        }
                        if ( i > MOSlimit() ) i = MOSlimit();
-                       if(i) factor = (flt) ((int)i * sizeof(int)) / (3 * 
MosaicBlkSize + sizeof(int) * task->dictsize +i);
+                       if(i) factor = (flt) ((int)i * sizeof(int)) / 
wordaligned(2* MosaicBlkSize + task->dictsize * sizeof(int)+ sizeof(bte) * 
MOSgetCnt(task->blk),int);
                }
        }
 #ifdef _DEBUG_MOSAIC_
diff --git a/monetdb5/modules/mal/mosaic_linear.c 
b/monetdb5/modules/mal/mosaic_linear.c
--- a/monetdb5/modules/mal/mosaic_linear.c
+++ b/monetdb5/modules/mal/mosaic_linear.c
@@ -92,24 +92,24 @@ MOSadvance_linear(Client cntxt, MOStask 
        (void) cntxt;
        task->start += MOSgetCnt(task->blk);
        switch(ATOMstorage(task->type)){
-       case TYPE_bte: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(bte),bte)); break;
-       case TYPE_bit: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(bit),bit)); break;
-       case TYPE_sht: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(sht),sht)); break;
-       case TYPE_int: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(int),int)); break;
-       case TYPE_oid: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(oid),oid)); break;
-       case TYPE_lng: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(lng),lng)); break;
-       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(wrd),wrd)); break;
-       case TYPE_flt: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(flt),flt)); break;
-       case TYPE_dbl: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(dbl),dbl)); break;
+       case TYPE_bte: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + 2 * sizeof(bte),bte)); break;
+       case TYPE_bit: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + 2 * sizeof(bit),bit)); break;
+       case TYPE_sht: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + 2 * sizeof(sht),sht)); break;
+       case TYPE_int: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + 2 * sizeof(int),int)); break;
+       case TYPE_oid: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + 2 * sizeof(oid),oid)); break;
+       case TYPE_lng: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + 2 * sizeof(lng),lng)); break;
+       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + 2 * sizeof(wrd),wrd)); break;
+       case TYPE_flt: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + 2 * sizeof(flt),flt)); break;
+       case TYPE_dbl: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + 2 * sizeof(dbl),dbl)); break;
 #ifdef HAVE_HGE
-       case TYPE_hge: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(2 * sizeof(hge),hge)); break;
+       case TYPE_hge: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + 2 * sizeof(hge),hge)); break;
 #endif
        case TYPE_str:
                switch(task->b->T->width){
-               case 1: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(2 *sizeof(bte),bte)); break ;
-               case 2: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(2 *sizeof(sht),sht)); break ;
-               case 4: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(2 *sizeof(int),int)); break ;
-               case 8: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(2 *sizeof(lng),lng)); break ;
+               case 1: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + 2 *sizeof(bte),bte)); break ;
+               case 2: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + 2 *sizeof(sht),sht)); break ;
+               case 4: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + 2 *sizeof(int),int)); break ;
+               case 8: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + 2 *sizeof(lng),lng)); break ;
                }
        }
 }
@@ -129,7 +129,7 @@ MOSskip_linear(Client cntxt, MOStask tas
        if ( ((TYPE*)task->src)[i] != (TYPE)(val + (int)i * step))\
                break;\
        if( i >= MOSlimit()) i = MOSlimit();\
-       factor =  ( (flt)i * sizeof(TYPE))/(2 * MosaicBlkSize + 2 * 
sizeof(TYPE));\
+       factor =  ( (flt)i * sizeof(TYPE))/wordaligned( MosaicBlkSize + 2 * 
sizeof(TYPE),TYPE);\
 }
 
 // calculate the expected reduction using LINEAR in terms of elements 
compressed
@@ -167,7 +167,7 @@ MOSestimate_linear(Client cntxt, MOStask
                        if ( ((int*)task->src)[i] != (int)(val + (int)i * step))
                                break;
                        if( i >= MOSlimit()) i = MOSlimit();
-                       factor =  ( (flt)i * sizeof(int))/(2 * MosaicBlkSize + 
2 * sizeof(int));
+                       factor =  ( (flt)i * sizeof(int))/wordaligned( 
MosaicBlkSize + 2 * sizeof(int),int);
                }
        }
 #ifdef _DEBUG_MOSAIC_
diff --git a/monetdb5/modules/mal/mosaic_literal.c 
b/monetdb5/modules/mal/mosaic_literal.c
--- a/monetdb5/modules/mal/mosaic_literal.c
+++ b/monetdb5/modules/mal/mosaic_literal.c
@@ -41,24 +41,24 @@ MOSadvance_literal(Client cntxt, MOStask
 
        task->start += MOSgetCnt(blk);
        switch(ATOMstorage(task->type)){
-       case TYPE_bte: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(bte)* MOSgetCnt(blk),bte)); break ;
-       case TYPE_bit: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(bit)* MOSgetCnt(blk),bit)); break ;
-       case TYPE_sht: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(sht)* MOSgetCnt(blk),sht)); break ;
-       case TYPE_int: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(int)* MOSgetCnt(blk),int)); break ;
-       case TYPE_oid: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(oid)* MOSgetCnt(blk),oid)); break ;
-       case TYPE_lng: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(lng)* MOSgetCnt(blk),lng)); break ;
+       case TYPE_bte: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(bte)* MOSgetCnt(blk),bte)); break ;
+       case TYPE_bit: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(bit)* MOSgetCnt(blk),bit)); break ;
+       case TYPE_sht: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(sht)* MOSgetCnt(blk),sht)); break ;
+       case TYPE_int: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(int)* MOSgetCnt(blk),int)); break ;
+       case TYPE_oid: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(oid)* MOSgetCnt(blk),oid)); break ;
+       case TYPE_lng: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(lng)* MOSgetCnt(blk),lng)); break ;
 #ifdef HAVE_HGE
-       case TYPE_hge: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(hge)* MOSgetCnt(blk),hge)); break ;
+       case TYPE_hge: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(hge)* MOSgetCnt(blk),hge)); break ;
 #endif
-       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(wrd)* MOSgetCnt(blk),wrd)); break ;
-       case TYPE_flt: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(flt)* MOSgetCnt(blk),flt)); break ;
-       case TYPE_dbl: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(dbl)* MOSgetCnt(blk),dbl)); break;
+       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(wrd)* MOSgetCnt(blk),wrd)); break ;
+       case TYPE_flt: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(flt)* MOSgetCnt(blk),flt)); break ;
+       case TYPE_dbl: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(dbl)* MOSgetCnt(blk),dbl)); break;
        case TYPE_str:
                switch(task->b->T->width){
-               case 1: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(bte)* MOSgetCnt(blk),bte)); break ;
-               case 2: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(sht)* MOSgetCnt(blk),sht)); break ;
-               case 4: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(int)* MOSgetCnt(blk),int)); break ;
-               case 8: task->blk = (MosaicBlk)( ((char*) task->blk) + 
MosaicBlkSize + wordaligned(sizeof(lng)* MOSgetCnt(blk),lng)); break ;
+               case 1: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(bte)* MOSgetCnt(blk),bte)); break ;
+               case 2: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(sht)* MOSgetCnt(blk),sht)); break ;
+               case 4: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(int)* MOSgetCnt(blk),int)); break ;
+               case 8: task->blk = (MosaicBlk)( ((char*) task->blk) + 
wordaligned( MosaicBlkSize + sizeof(lng)* MOSgetCnt(blk),lng)); break ;
                }
        }
 }
diff --git a/monetdb5/modules/mal/mosaic_runlength.c 
b/monetdb5/modules/mal/mosaic_runlength.c
--- a/monetdb5/modules/mal/mosaic_runlength.c
+++ b/monetdb5/modules/mal/mosaic_runlength.c
@@ -75,25 +75,25 @@ MOSadvance_runlength(Client cntxt, MOSta
 
        task->start += MOSgetCnt(task->blk);
        switch(ATOMstorage(task->type)){
-       case TYPE_bte: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(bte),bte)); break;
-       case TYPE_bit: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(bit),bit)); break;
-       case TYPE_sht: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(sht),sht)); break;
-       case TYPE_int: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(int),int)); break;
-       case TYPE_lng: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(lng),lng)); break;
-       case TYPE_oid: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(oid),oid)); break;
-       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(wrd),wrd)); break;
-       case TYPE_flt: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(flt),flt)); break;
-       case TYPE_dbl: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(dbl),dbl)); break;
+       case TYPE_bte: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(bte),bte)); break;
+       case TYPE_bit: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(bit),bit)); break;
+       case TYPE_sht: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(sht),sht)); break;
+       case TYPE_int: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(int),int)); break;
+       case TYPE_lng: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(lng),lng)); break;
+       case TYPE_oid: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(oid),oid)); break;
+       case TYPE_wrd: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(wrd),wrd)); break;
+       case TYPE_flt: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(flt),flt)); break;
+       case TYPE_dbl: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(dbl),dbl)); break;
 #ifdef HAVE_HGE
-       case TYPE_hge: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(hge),hge)); break;
+       case TYPE_hge: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(hge),hge)); break;
 #endif
        case  TYPE_str:
                // we only have to look at the index width, not the values
                switch(task->b->T->width){
-               case 1: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(bte),bte)); break;
-               case 2: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(sht),sht)); break;
-               case 4: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(int),int)); break;
-               case 8: task->blk = (MosaicBlk)( ((char*)task->blk) + 
MosaicBlkSize + wordaligned(sizeof(lng),lng)); break;
+               case 1: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(bte),bte)); break;
+               case 2: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(sht),sht)); break;
+               case 4: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(int),int)); break;
+               case 8: task->blk = (MosaicBlk)( ((char*)task->blk) + 
wordaligned( MosaicBlkSize + sizeof(lng),lng)); break;
                }
                break;
        }
@@ -113,7 +113,7 @@ MOSskip_runlength(Client cntxt, MOStask 
        if ( ((TYPE*)task->src)[i] != val)\
                break;\
        if ( i > MOSlimit() ) i = MOSlimit();\
-       factor = ( (flt)i * sizeof(TYPE))/ (MosaicBlkSize + sizeof(TYPE));\
+       factor = ( (flt)i * sizeof(TYPE))/ wordaligned( MosaicBlkSize + 
sizeof(TYPE),TYPE);\
 }
 
 // calculate the expected reduction using RLE in terms of elements compressed
@@ -141,7 +141,7 @@ MOSestimate_runlength(Client cntxt, MOSt
                        if ( ((int*)task->src)[i] != val)
                                break;
                        if ( i > MOSlimit() ) i = MOSlimit();
-                       factor = ( (flt)i * sizeof(int))/ (MosaicBlkSize + 
sizeof(int));
+                       factor = ( (flt)i * sizeof(int))/ wordaligned( 
MosaicBlkSize + sizeof(int),int);
                }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to