Changeset: e10b598802ea for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e10b598802ea
Modified Files:
        monetdb5/modules/kernel/arrays.c
Branch: arrays
Log Message:

fixed bug when getting the idx of a dimension from an oid


diffs (42 lines):

diff --git a/monetdb5/modules/kernel/arrays.c b/monetdb5/modules/kernel/arrays.c
--- a/monetdb5/modules/kernel/arrays.c
+++ b/monetdb5/modules/kernel/arrays.c
@@ -57,14 +57,22 @@ static gdk_cells* mergeCandidateDimensio
        return cells_replace_dimension(dims, mergedDim);
 }
 
-static BUN oidToIdx(oid oidVal, int currentDimNum, BUN skipCells, gdk_array 
*dims) {
+static BUN oidToIdx(oid oidVal, int dimNum, int currentDimNum, BUN skipCells, 
gdk_array *dims) {
+       BUN oid = 0;
+
+       while(currentDimNum < dimNum) {
+               skipCells*=dims->dimSizes[currentDimNum];
+               currentDimNum++;
+       }
+
        if(currentDimNum == dims->dimsNum-1)
-               return oidVal%skipCells;
-       else {
-               if(currentDimNum == 0)
-                       return oidToIdx(oidVal, currentDimNum+1, 
skipCells*dims->dimSizes[currentDimNum], dims);
-               return oidToIdx(oidVal, currentDimNum+1, 
skipCells*dims->dimSizes[currentDimNum], dims)%skipCells;
-       }
+               oid = oidVal;
+       else
+               oid = oidToIdx(oidVal, dimNum, currentDimNum+1, 
skipCells*dims->dimSizes[currentDimNum], dims);
+
+       if(currentDimNum == dimNum) //in the last one we do not compute module
+               return oid/skipCells;
+       return oid%skipCells;
 }
 
 static BUN qualifyingOIDs(int dimNum, int skipSize, gdk_cells* oidDims, oid 
**resOIDs ) {
@@ -120,7 +128,7 @@ do { \
 \
        BATloop(candsBAT, p, q) { \
        oid qOid = *(oid *) BUNtail(candsIter, p); \
-               BUN idx = oidToIdx(qOid, 0, 1, array); \
+               BUN idx = oidToIdx(qOid, dimension->dimNum, 0, 1, array); \
                *vals++ = min +idx*step; \
 fprintf(stderr, "%d - %d - %d\n", (int)qOid, (int)idx, (int)vals[-1]); \
     } \
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to