Changeset: e03991ebcb89 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e03991ebcb89 Modified Files: monetdb5/modules/kernel/arrays.c Branch: arrays Log Message:
updated iteration over BAT to use BUN functions instead of Tloc diffs (53 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 @@ -732,18 +732,20 @@ str ALGnonDimensionSubselect2(ptr *dimsR mbrOut = NULL; } else { //find the mbr around the qualifying oids - oid* oids = (oid*)Tloc(oidsResBAT, BUNfirst(oidsResBAT)); - oid currentOid = oids[0]; - BUN i=0; + BATiter oidsIter = bat_iterator(oidsResBAT); + BUN currBun = BUNfirst(oidsResBAT); + BUN lastBun = BUNlast(oidsResBAT); + oid currentOid; unsigned short d; unsigned int dimIdx; unsigned int totalElsNum = 1, elsNum; - for(d=0; d<array->dimsNum; d++) { - totalElsNum *= array->dims[d]->elsNum; - } - + + totalElsNum = arrayCellsNum(array); + //initialise the mbr elsNum = totalElsNum; + currentOid = *(oid*)BUNtail(oidsIter, currBun); + for(d = array->dimsNum-1; d>0; d--) { //get the correct elsNum elsNum /= array->dims[d]->elsNum; @@ -759,10 +761,10 @@ str ALGnonDimensionSubselect2(ptr *dimsR mbrOut->dims[d]->min = currentOid; mbrOut->dims[d]->max = currentOid; - - for(i=1; i<BATcount(oidsResBAT); i++) { + /* continue with the rest of the dimensions */ + for(currBun++; currBun < lastBun; currBun++) { elsNum = totalElsNum; - currentOid = oids[i]; + currentOid = *(oid*)BUNtail(oidsIter, currBun); for(d = array->dimsNum-1; d>0; d--) { //get the correct elsNum @@ -778,7 +780,6 @@ str ALGnonDimensionSubselect2(ptr *dimsR //update the last dimension mbrOut->dims[d]->min = currentOid < mbrOut->dims[d]->min ? currentOid : mbrOut->dims[d]->min; mbrOut->dims[d]->max = currentOid > mbrOut->dims[d]->max ? currentOid : mbrOut->dims[d]->max; - } //update the elsNum _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list