Changeset: 98e4b2ac3e5c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=98e4b2ac3e5c
Modified Files:
monetdb5/modules/mal/mat.c
Branch: Feb2013
Log Message:
Estimate also the variable heap
The size of the variable heap is simply derived from the first one.
It may be an overshoot due to recurring values, though.
diffs (31 lines):
diff --git a/monetdb5/modules/mal/mat.c b/monetdb5/modules/mal/mat.c
--- a/monetdb5/modules/mal/mat.c
+++ b/monetdb5/modules/mal/mat.c
@@ -141,7 +141,9 @@ str
MATpackIncrement(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p)
{
int *ret = (int*) getArgReference(stk,p,0);
+ int pieces;
BAT *b, *bb, *bn;
+ size_t newsize;
(void) cntxt;
b = BATdescriptor( stk->stk[getArg(p,1)].val.ival);
@@ -150,9 +152,16 @@ MATpackIncrement(Client cntxt, MalBlkPtr
if ( getArgType(mb,p,2) == TYPE_int){
/* first step */
- bn = BATnew(TYPE_void, b->ttype, BATcount(b) *
stk->stk[getArg(p,2)].val.ival);
+ pieces = stk->stk[getArg(p,2)].val.ival;
+ bn = BATnew(TYPE_void, b->ttype, BATcount(b) * pieces);
if (bn == NULL)
throw(MAL, "mat.pack", MAL_MALLOC_FAIL);
+ /* allocate enough space for the strings */
+ if ( b->T->vheap ){
+ newsize = b->T->vheap->size * pieces;
+ if (HEAPextend(b->T->vheap, newsize) < 0)
+ throw(MAL, "mat.pack", MAL_MALLOC_FAIL);
+ }
BATsettrivprop(bn);
BATseqbase(bn, b->H->seq);
BATseqbase(BATmirror(bn), b->T->seq);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list