void rsd (arbore *rad) { if (rad) { printf("%d ", rad->info); rsd(rad->stg); rsd(rad->dr); } }
//---------------------------------------------------------------------------------------------------- //for caching objects /*static*/ unsigned Specific::stackid(FncT _pf){ Locker<Mutex> lock(Thread::gmutex()); SpecificData &rsd(SpecificData::current()); cassert(rsd.ops.size() < rsd.ops.capacity()); cv.push_back(_pf); return cv.size() - 1; }
/*static*/ void* Specific::pop(unsigned _id){ SpecificData &rsd(SpecificData::current()); if(_id >= rsd.ops.size()){ rsd.ops.resize(_id + 1); }else if(rsd.ops[_id].pnode){ BufferNode *pbn(rsd.ops[_id].pnode); void *pv(voidPointer(pbn)); rsd.ops[_id].pnode = pbn->pnext; --rsd.ops[_id].sz; void **ppv = reinterpret_cast<void**>(pbn); *ppv = pbn; return pv; } ++rsd.ops[_id].cp; return NULL; }
/*static*/ int Specific::push(void *_pv, unsigned _id, unsigned _maxcp){ SpecificData &rsd(SpecificData::current()); cassert(_pv); cassert(_id < rsd.ops.size()); SpecificData::ObjectCachePoint &rocp(rsd.ops[_id]); if(rocp.sz < _maxcp){ checkObjectBuffer(_pv); BufferNode *pbn(bufferNodePointer(_pv)); pbn->pnext = rocp.pnode; rocp.pnode = pbn; ++rocp.sz; return 0; } --rsd.ops[_id].cp; return -1; }
/*static*/ void Specific::pushBuffer(char *&_pb, unsigned _id){ cassert(_pb); cassert(_id < SpecificData::Capacity); SpecificData &rsd(SpecificData::current()); SpecificData::CachePoint &rcp(rsd.cps[_id]); idbgx(Debug::specific,"pushBuffer "<<_id<<" cp "<<rcp.cp<<' '<<(void*)_pb); if(rcp.sz < rsd.pcc->stackCapacity(_id)){ BufferNode *pbn(reinterpret_cast<BufferNode*>(_pb)); ++rcp.sz; pbn->pnext = rcp.pnode; rcp.pnode = pbn; }else{ --rcp.cp; delete []_pb; } _pb = NULL; }
/*static*/ char* Specific::popBuffer(unsigned _id){ cassert(_id < SpecificData::Capacity); SpecificData &rsd(SpecificData::current()); SpecificData::CachePoint &rcp(rsd.cps[_id]); char *tb; if(rcp.pnode){ BufferNode *pnbn = rcp.pnode->pnext; tb = reinterpret_cast<char*>(rcp.pnode); rcp.pnode = pnbn; --rcp.sz; }else{ ++rcp.cp; tb = new char[indexToCapacity(_id)]; } idbgx(Debug::specific,"popBuffer "<<_id<<" cp "<<rcp.cp<<' '<<(void*)tb); return tb; }
int main() { int x,n; arbore *rad = NULL; insert(&rad, 50); insert(&rad, 30); insert(&rad, 80); insert(&rad, 60); insert(&rad, 90); insert(&rad, 70); insert(&rad, 20); insert(&rad, 40); insert(&rad, 35); printf("Ce nr cautam ?"); scanf ("%d", &x); if (search(rad, x)== 1) printf("Nr. cautat exista \n"); else printf("Nr. cautat nu exista \n"); printf("Maxim: %d \n", findMax(rad)->info); delete0 (&rad, 35, 0); printf("\n"); rsd(rad); printf("\n"); printf("Hello world!\n"); return 0; }