log_bid ebat_copy(log_bid b, oid ibase, int temp) { /* make a copy of b */ BAT *o = temp_descriptor(b); BAT *c; log_bid r; if (!ebats[o->ttype]) ebats[o->ttype] = bat_new(TYPE_void, o->ttype, 0); if (!temp && BATcount(o)) { c = BATcopy(o, TYPE_void, o->ttype, TRUE); BATseqbase(c, ibase ); c->H->dense = 1; BATcommit(o); BATcommit(c); bat_set_access(c, BAT_READ); r = temp_create(c); bat_destroy(c); } else { c = ebats[o->ttype]; r = temp_create(c); } bat_destroy(o); return r; }
str BKCmirror(bat *ret, const bat *bid) { BAT *b, *bn; if ((b = BATdescriptor(*bid)) == NULL) { throw(MAL, "bat.mirror", RUNTIME_OBJECT_MISSING); } bn = VIEWcombine(b); if (bn != NULL) { if (b->batRestricted == BAT_WRITE) { BAT *bn1; bn1 = BATcopy(bn, bn->htype, bn->ttype, FALSE, TRANSIENT); BBPreclaim(bn); bn = bn1; } if (bn != NULL) { *ret = bn->batCacheid; BBPkeepref(*ret); BBPunfix(b->batCacheid); return MAL_SUCCEED; } } *ret = 0; BBPunfix(b->batCacheid); throw(MAL, "bat.mirror", GDK_EXCEPTION); }
log_bid ebat2real(log_bid b, oid ibase) { /* make a copy of b */ BAT *o = temp_descriptor(b); BAT *c = BATcopy(o, TYPE_void, ATOMtype(o->ttype), TRUE); log_bid r; BATseqbase(c, ibase ); c->H->dense = 1; r = temp_create(c); bat_destroy(c); bat_destroy(o); return r; }
/* set access mode to bat, replacing input with output */ static BAT * setaccess(BAT *b, int mode) { BAT *bn = b; if (BATsetaccess(b, mode) != GDK_SUCCEED) { if (b->batSharecnt && mode != BAT_READ) { bn = BATcopy(b, b->htype, b->ttype, TRUE, TRANSIENT); if (bn != NULL) BATsetaccess(bn, mode); } else { bn = NULL; } BBPunfix(b->batCacheid); } return bn; }
log_bid temp_copy(log_bid b, int temp) { /* make a copy of b, if temp is set only create a empty bat */ BAT *o = temp_descriptor(b); BAT *c; log_bid r; if (!temp) { c = BATcopy(o, o->htype, o->ttype, TRUE); bat_set_access(c, BAT_READ); BATcommit(c); } else { c = bat_new(o->htype, o->ttype, COLSIZE); } r = temp_create(c); bat_destroy(c); bat_destroy(o); return r; }
static str MATpack2Internal(MalStkPtr stk, InstrPtr p) { int i,*ret; BAT *b, *bn; BUN cap=0; b= BATdescriptor(stk->stk[getArg(p,1)].val.ival); if( b == NULL) throw(MAL, "mat.pack", RUNTIME_OBJECT_MISSING); bn = BATcopy(b, b->htype, b->ttype, TRUE, TRANSIENT); BBPunfix(b->batCacheid); if( bn == NULL) throw(MAL, "mat.pack", MAL_MALLOC_FAIL); for(i = 2; i < p->argc; i++){ b= BATdescriptor(stk->stk[getArg(p,i)].val.ival); if( b == NULL){ BBPreleaseref(bn->batCacheid); throw(MAL, "mat.pack", RUNTIME_OBJECT_MISSING); } cap += BATcount(b); BBPunfix(b->batCacheid); } bn = BATextend(bn, cap); if( bn == NULL) throw(MAL, "mat.pack", RUNTIME_OBJECT_MISSING); for( i = 2; i < p->argc; i++){ b= BATdescriptor(stk->stk[getArg(p,i)].val.ival); if( b == NULL){ BBPreleaseref(bn->batCacheid); throw(MAL, "mat.pack", RUNTIME_OBJECT_MISSING); } BATappend(bn,b,FALSE); BBPunfix(b->batCacheid); } ret= (int*) getArgReference(stk,p,0); BBPkeepref(*ret = bn->batCacheid); return MAL_SUCCEED; }
log_bid eubat_copy(log_bid b, int temp) { /* make a copy of b */ BAT *o = temp_descriptor(b); BAT *c; log_bid r; if (!eubats[o->ttype]) eubats[o->ttype] = bat_new(TYPE_oid, o->ttype, 0, TRANSIENT); if (!temp && BATcount(o)) { c = BATcopy(o, TYPE_oid, o->ttype, TRUE, PERSISTENT); BATcommit(c); r = temp_create(c); bat_set_access(c, BAT_READ); bat_destroy(c); } else { c = eubats[o->ttype]; r = temp_create(c); } bat_destroy(o); return r; }