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

changing code to use new structures


diffs (truncated from 655 to 300 lines):

diff --git a/gdk/gdk_arrays.c b/gdk/gdk_arrays.c
--- a/gdk/gdk_arrays.c
+++ b/gdk/gdk_arrays.c
@@ -44,13 +44,12 @@ createAnalyticDim(dbl);
 createAnalyticDim(flt);
 
 #define createDim(TPE) \
-gdk_dimension* createDimension_##TPE(unsigned int elsNum_initial, TPE min, TPE 
max, TPE step) { \
+gdk_dimension* createDimension_##TPE(TPE min, TPE max, TPE step) { \
        gdk_dimension *dim = GDKmalloc(sizeof(gdk_dimension)); \
        dim->elsNum = floor((max - min )/ step)+1; \
        dim->min = 0; \
     dim->max = dim->elsNum; \
        dim->step = 1; \
-       dim->elsNum_initial = elsNum_initial; \
        return dim; \
 }
 
@@ -66,13 +65,28 @@ createDim(flt);
 
 gdk_array* arrayNew(unsigned short dimsNum) {
        gdk_array *array = (gdk_array*)GDKmalloc(sizeof(gdk_array));
+       if(!array)
+               return NULL;
        array->dimsNum = dimsNum;
        array->dims = 
(gdk_dimension**)GDKmalloc(sizeof(gdk_dimension*)*dimsNum);
+       if(!array->dims)
+               return NULL;
        return array;
 }
 
+gdk_array* arrayCopy(gdk_array *array) {
+       unsigned short i;
+       gdk_array *array_copy = arrayNew(array->dimsNum);
+       if(!array_copy)
+               return NULL;
+       for(i=0; i<array_copy->dimsNum; i++)
+               array_copy[i] = array[i];
+
+       return array_copy;
+}
+
 gdk_return arrayDelete(gdk_array *array) {
-       int i=0;
+       unsigned short i=0;
        for(i=0; i<array->dimsNum; i++)
                GDKfree(array->dims[i]);
        GDKfree(array->dims);
diff --git a/gdk/gdk_arrays.h b/gdk/gdk_arrays.h
--- a/gdk/gdk_arrays.h
+++ b/gdk/gdk_arrays.h
@@ -32,7 +32,6 @@ typedef struct dimensionStruct {
        unsigned int max;
        unsigned int step; //initialy this is set to 1
        unsigned int elsNum;
-       unsigned int elsNum_initial;
 } gdk_dimension;
 
 typedef struct arrayStruct {
@@ -49,14 +48,14 @@ typedef enum errors {
 
 gdk_return gdk_error_msg(errors errorCode, const char* funcName, const char 
*msg);
 
-gdk_export gdk_dimension* createDimension_bte(unsigned int elsNum_initial, bte 
min, bte max, bte step);
-gdk_export gdk_dimension* createDimension_sht(unsigned int elsNum_initial, sht 
min, sht max, sht step);
-gdk_export gdk_dimension* createDimension_int(unsigned int elsNum_initial, int 
min, int max, int step);
-gdk_export gdk_dimension* createDimension_wrd(unsigned int elsNum_initial, wrd 
min, wrd max, wrd step);
-gdk_export gdk_dimension* createDimension_oid(unsigned int elsNum_initial, oid 
min, oid max, oid step);
-gdk_export gdk_dimension* createDimension_lng(unsigned int elsNum_initial, lng 
min, lng max, lng step);
-gdk_export gdk_dimension* createDimension_dbl(unsigned int elsNum_initial, dbl 
min, dbl max, dbl step);
-gdk_export gdk_dimension* createDimension_flt(unsigned int elsNum_initial, flt 
min, flt max, flt step);
+gdk_export gdk_dimension* createDimension_bte(bte min, bte max, bte step);
+gdk_export gdk_dimension* createDimension_sht(sht min, sht max, sht step);
+gdk_export gdk_dimension* createDimension_int(int min, int max, int step);
+gdk_export gdk_dimension* createDimension_wrd(wrd min, wrd max, wrd step);
+gdk_export gdk_dimension* createDimension_oid(oid min, oid max, oid step);
+gdk_export gdk_dimension* createDimension_lng(lng min, lng max, lng step);
+gdk_export gdk_dimension* createDimension_dbl(dbl min, dbl max, dbl step);
+gdk_export gdk_dimension* createDimension_flt(flt min, flt max, flt step);
 
 gdk_export gdk_analytic_dimension* createAnalyticDimension_bte(unsigned short 
dimNum, bte min, bte max, bte step);
 gdk_export gdk_analytic_dimension* createAnalyticDimension_sht(unsigned short 
dimNum, sht min, sht max, sht step);
@@ -70,53 +69,12 @@ gdk_export gdk_analytic_dimension* creat
 gdk_export gdk_array* arrayNew(unsigned short dimsNum);
 gdk_export gdk_return arrayDelete(gdk_array *array);
 gdk_export gdk_return analyticDimensionDelete(gdk_analytic_dimension *dim);
+gdk_export gdk_array* arrayCopy(gdk_array* array);
 
-#if 0
-gdk_cells* cells_new(void);
-gdk_cells* cells_add_dimension(gdk_cells* cells, gdk_dimension *dim);
-gdk_cells* cells_remove_dimension(gdk_cells* cells, int dimNum);
-gdk_cells* cells_replace_dimension(gdk_cells* cells, gdk_dimension* dim);
-gdk_export gdk_return freeDimension(gdk_dimension *dim);
-gdk_export gdk_return freeCells(gdk_cells *cells);
-#endif
 
-#if 0
-#define dimensionElsNum(dim) \
-({ \
-       BUN els = 0; \
-       switch(dim->type.type->localtype) { \
-               case TYPE_bte: \
-            els = floor((dim->max->data.val.btval - dim->min->data.val.btval 
)/ dim->step->data.val.btval)+1; \
-            break; \
-        case TYPE_sht: \
-            els = floor((dim->max->data.val.shval - dim->min->data.val.shval 
)/ dim->step->data.val.shval)+1; \
-            break; \
-        case TYPE_int: \
-            els = floor((dim->max->data.val.ival - dim->min->data.val.ival )/ 
dim->step->data.val.ival)+1; \
-            break; \
-        case TYPE_wrd: \
-            els = floor((dim->max->data.val.wval - dim->min->data.val.wval )/ 
dim->step->data.val.wval)+1; \
-            break; \
-        case TYPE_oid: \
-            els = floor((dim->max->data.val.oval - dim->min->data.val.oval )/ 
dim->step->data.val.oval)+1; \
-            break; \
-        case TYPE_lng: \
-            els = floor((dim->max->data.val.lval - dim->min->data.val.lval )/ 
dim->step->data.val.lval)+1; \
-            break; \
-        case TYPE_dbl: \
-            els = floor((dim->max->data.val.dval - dim->min->data.val.dval )/ 
dim->step->data.val.dval)+1; \
-            break; \
-        case TYPE_flt: \
-            els = floor((dim->max->data.val.fval - dim->min->data.val.fval )/ 
dim->step->data.val.fval)+1; \
-            break; \
-       } \
-       els; \
-})
-#endif
-
-#if 0
 /*find the position in the dimension indices (no repetitions) of the given 
value*/
 #define dimensionFndValuePos(value, min, step) fmod((value-min), step)? 
BUN_NONE : (BUN)(value-min)/step
+
 /*find the position in the dimension indices (no repetitions) of the  given 
value
  * or the position of the index that is closest to the given value and greater 
than it*/
 #define dimensionFndGreaterValuePos(value, min, step, eq) \
@@ -148,7 +106,6 @@ gdk_export gdk_return freeCells(gdk_cell
        })
 
 
-
 #define equalIdx(dim, value) \
 ({\
        BUN idx = 0; \
@@ -248,6 +205,56 @@ gdk_export gdk_return freeCells(gdk_cell
 
 
 
+
+
+
+#if 0
+gdk_cells* cells_new(void);
+gdk_cells* cells_add_dimension(gdk_cells* cells, gdk_dimension *dim);
+gdk_cells* cells_remove_dimension(gdk_cells* cells, int dimNum);
+gdk_cells* cells_replace_dimension(gdk_cells* cells, gdk_dimension* dim);
+gdk_export gdk_return freeDimension(gdk_dimension *dim);
+gdk_export gdk_return freeCells(gdk_cells *cells);
+#endif
+
+
+
+
+#if 0
+#define dimensionElsNum(dim) \
+({ \
+       BUN els = 0; \
+       switch(dim->type.type->localtype) { \
+               case TYPE_bte: \
+            els = floor((dim->max->data.val.btval - dim->min->data.val.btval 
)/ dim->step->data.val.btval)+1; \
+            break; \
+        case TYPE_sht: \
+            els = floor((dim->max->data.val.shval - dim->min->data.val.shval 
)/ dim->step->data.val.shval)+1; \
+            break; \
+        case TYPE_int: \
+            els = floor((dim->max->data.val.ival - dim->min->data.val.ival )/ 
dim->step->data.val.ival)+1; \
+            break; \
+        case TYPE_wrd: \
+            els = floor((dim->max->data.val.wval - dim->min->data.val.wval )/ 
dim->step->data.val.wval)+1; \
+            break; \
+        case TYPE_oid: \
+            els = floor((dim->max->data.val.oval - dim->min->data.val.oval )/ 
dim->step->data.val.oval)+1; \
+            break; \
+        case TYPE_lng: \
+            els = floor((dim->max->data.val.lval - dim->min->data.val.lval )/ 
dim->step->data.val.lval)+1; \
+            break; \
+        case TYPE_dbl: \
+            els = floor((dim->max->data.val.dval - dim->min->data.val.dval )/ 
dim->step->data.val.dval)+1; \
+            break; \
+        case TYPE_flt: \
+            els = floor((dim->max->data.val.fval - dim->min->data.val.fval )/ 
dim->step->data.val.fval)+1; \
+            break; \
+       } \
+       els; \
+})
+#endif
+
+#if 0
 #define dimensionCharacteristics(TPE, dimensionBAT, min, max, step, 
elementRepeats, groupRepeats) \
 do {\
     TPE *vls; \
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
@@ -4,11 +4,12 @@
 
 #include <gdk_arrays.h>
 
-static int jumpSize(gdk_array *array, int dimNum) {
-       int i=0;
-       BUN skip = 1;
+/*UPDATED*/
+static unsigned int jumpSize(gdk_array *array, unsigned int dimNum) {
+       unsigned short i=0;
+       unsigned int skip = 1;
        for(i=0; i<dimNum; i++)
-               skip *= array->dimSizes[i];
+               skip *= array->dims[i]->elsNum;
        return skip;
 }
 
@@ -16,13 +17,6 @@ static int arrayCellsNum(gdk_array *arra
        return jumpSize(array, array->dimsNum);
 }
 
-static gdk_dimension* getDimension(gdk_cells *dims, int dimNum) {
-       dim_node *n;
-
-       for(n=dims->h; n && n->data->dimNum<dimNum; n=n->next);
-       return n->data;
-}
-
 static BUN oidToIdx(oid oidVal, int dimNum, int currentDimNum, BUN skipCells, 
gdk_array *dims) {
        BUN oid = 0;
 
@@ -93,7 +87,7 @@ static str readCands(gdk_array** dimCand
        }
 
        if(dimCands) //there are candidates exressed as dimensions
-               dimCands_in = (gdk_array*)*dimsCand;
+               dimCands_in = (gdk_array*)*dimCands;
 
        //if there are no candidates then everything is a candidate
        if(!dimCands && !oidCands) {
@@ -112,7 +106,9 @@ static str readCands(gdk_array** dimCand
        return MAL_SUCCEED;
 }
 
-static str emptyCandidateResults(ptr *candsRes_dims, bat* candsRes_bid) {
+/*UPDATED*/
+/*Empty candidate results are distingueshed from first time results by setting 
the dimCands to NULL and the oidCands to empty */
+static str emptyCandidateResults(ptr *dimCandsRes, bat* oidCandsRes) {
        BAT *candidatesBAT = NULL;
 
        if((candidatesBAT = BATnew(TYPE_void, TYPE_oid, 0, TRANSIENT)) == NULL)
@@ -121,31 +117,26 @@ static str emptyCandidateResults(ptr *ca
        BATseqbase(candidatesBAT, 0);
        BATderiveProps(candidatesBAT, FALSE);    
 
-       BBPkeepref(*candsRes_bid = candidatesBAT->batCacheid);
-       *candsRes_dims = NULL;
+       BBPkeepref(*oidCandsRes = candidatesBAT->batCacheid);
+       *dimCandsRes = NULL;
 
        return MAL_SUCCEED;
 }
 
-static bool overlapingRanges(gdk_dimension *dim1, gdk_dimension *dim2) {
-       if(*(oid*)dim1->max < *(oid*)dim2->min || *(oid*)dim2->max < 
*(oid*)dim1->min) {
-               //disjoint ranges. empty result
-               return 0;
-       }
-       return 1;
-}
+/*UPDATED*/
+static gdk_dimension* updateCandidateDimensionRange(gdk_dimension *dim, 
unsigned int min, unsigned int max) {
+       if(dim->max < min || dim->min > max) //non-overlaping ranges
+               return NULL;
 
-static gdk_dimension* mergeCandidateDimensions(gdk_dimension *dim1, 
gdk_dimension *dim2) {
-       oid min, max, step;
+       /*the biggest of the mins and the smallest of the maximums */
+       dim->min = dim->min > min ? dim->min : min;
+       dim->max = dim->max < max ? dim->max : max;
+
+//TODO: Take care of cases were a dimension has step <>1 as a result of 
multiple selections on it
        
-       /*the biggest of the mins and the smallest of the maximums */
-       min = *(oid*)dim1->min > *(oid*)dim2->min ? *(oid*)dim1->min : 
*(oid*)dim2->min;
-       max = *(oid*)dim1->max < *(oid*)dim2->max ? *(oid*)dim1->max : 
*(oid*)dim2->max;
-       step = *(oid*)dim1->step ; //step is always 1
-
        //the dimensions that are merged should have the same order
        //they also have the same number of initial elements because they came 
from the same dimension
-       return createDimension_oid(dim1->dimNum, dim1->initialElementsNum, min, 
max, step); 
+       return dim; 
 }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to