25 #define ADF_PTRSTACK_H ADF_PtrStack
58 template <
typename T,
typename S = UInt_t>
80 fStack(0x0), fCurrentSize(0), fFilledSize(0), fMaxSize(max_size), fIsOwner(true) {
Init(); }
91 {
if ( which < fMaxSize )
return fStack[which];
return NULL; }
99 if ( fFilledSize == fMaxSize )
101 if ( fFilledSize < fMaxSize ) { fStack[fFilledSize++] = t; fCurrentSize = fFilledSize; }
111 {
return fCurrentSize; }
119 if ( fStack == NULL || fFilledSize == 0 )
return;
120 for (S i = 0; i < fFilledSize; i++)
122 fFilledSize = fCurrentSize = 0;
133 if ( fMaxSize <= 0 ) fMaxSize = 1;
136 {
delete [] fStack; fStack = NULL; }
138 fStack =
new T*[fMaxSize]; ::memset(fStack,0,fMaxSize*
sizeof(T*)); fFilledSize = 0; fCurrentSize = 0;
142 if ( new_size <= fMaxSize )
return;
143 T **
tmp =
new T*[new_size]; ::memset(tmp,0,new_size*
sizeof(T*));
145 for (S i = 0; i < fFilledSize; i++) tmp[i] = At(i);
147 {
delete [] fStack; fStack = NULL; }
149 fStack =
tmp; fMaxSize = new_size;
153 if ( fStack ) { Delete();
delete [] fStack; }
158 if ( fStack == NULL || fFilledSize == 0 )
return;
160 for (S i = 0; i < fMaxSize; i++) {
161 if ( fStack[i] && fIsOwner )
delete fStack[i]; fStack[i] = NULL;
163 fFilledSize = fCurrentSize = 0;
void SetOwner(Bool_t own=false)
S GetSize() const
to get the current position in the stack
void Add(T *t)
Add a new pointer on the stack.
void SetBottom()
The object at position c is now on the top of the stack.