#include "hmdcclfnstack.h"
ClassImp(HMdcClFnStack)
ClassImp(HMdcClFnStacksArr)
HMdcClFnStack::HMdcClFnStack(void) {
stack = 0;
stackEnd = 0;
stackPos = 0;
stackSize = 0;
}
HMdcClFnStack::HMdcClFnStack(Int_t size) {
stack = 0;
stackSize = (size>0) ? size:1000;
create();
}
void HMdcClFnStack::setSize(Int_t size) {
Int_t stSize = (size>0) ? size:1000;
if(stSize < stackSize) return;
stackSize = stSize;
create();
}
void HMdcClFnStack::create(void) {
if(stack) delete [] stack;
stack=new Int_t [stackSize+10];
stackPos=stack;
stackEnd=stack+stackSize;
}
HMdcClFnStack::~HMdcClFnStack() {
if(stack) delete [] stack;
stack=0;
}
void HMdcClFnStack::increaseStack(void) {
Warning("increaseStack","Stack increased on 50 per cent");
Int_t* oldStack=stack;
Int_t* oldStackPos=stackPos;
stackSize += stackSize/2;
stack = 0;
create();
for(Int_t* n=oldStack; n<oldStackPos; n++) push(*n);
delete [] oldStack;
}
HMdcClFnStacksArr::HMdcClFnStacksArr(Int_t size) {
for(Int_t am=0;am<24;am++) {
Int_t sz=size/(am*4+1);
if(sz<200) sz=200;
stacksArr[am].setSize(sz);
}
}
void HMdcClFnStacksArr::init(Int_t maxAmp) {
amplitude = 0;
maxAmplitude = maxAmp-1;
for(Int_t am=0;am<maxAmp;am++) stacksArr[am].init();
}
void HMdcClFnStacksArr::init(Int_t maxAmp,Int_t n,Int_t amp) {
init(maxAmp);
push(n,amp);
}
Int_t HMdcClFnStacksArr::pop(Int_t& binNum) {
binNum = stacksArr[amplitude].pop();
if(binNum>=0) return amplitude+1;
if(amplitude == 0) return -1;
amplitude--;
return pop(binNum);
}
Last change: Sat May 22 13:00:55 2010
Last generated: 2010-05-22 13:00
This page has been automatically generated. If you have any comments or suggestions about the page layout send a mail to ROOT support, or contact the developers with any questions or problems regarding ROOT.