#ifndef _COMMON_VARARRAY_HPP_ #define _COMMON_VARARRAY_HPP_ #ifndef _COMMON_ARRAY_HPP_ #include #endif template class VarArray : public Array { public: enum{Granularity=64,InitialSize=Granularity}; VarArray(DWORD initialSize=InitialSize,DWORD granularity=Granularity); VarArray(const VarArray &someVarArray); virtual ~VarArray(); T &operator[](DWORD index); VarArray &operator=(const VarArray &someVarArray); BOOL operator==(const VarArray &someVarArray); BOOL insert(const T &someItem); DWORD granularity(void)const; void granularity(DWORD granularity,BOOL clean=FALSE); DWORD elements(void)const; void reset(void); void guarantee(DWORD elements); void commit(DWORD elements); private: void elements(DWORD elements); DWORD size(void)const; void size(DWORD size); DWORD mGranularity; DWORD mCacheEntries; }; template inline VarArray::VarArray(DWORD initialSize,DWORD granularity) : mGranularity(granularity), mCacheEntries(0) { size(initialSize); } template inline VarArray::VarArray(const VarArray &someVarArray) { *this=cache } template inline VarArray::~VarArray() { } template inline T &VarArray::operator[](DWORD index) { assert(index::operator[](index); } template inline VarArray &VarArray::operator=(const VarArray &someVarArray) { elements(someVarArray.elements()); granularity(someVarArray.granularity()); Array::size(someVarArray.size()); for(int index=0;index::operator[](index)=((VarArray&)someVarArray)[index]; return *this; } template inline BOOL VarArray::operator==(const VarArray &someVarArray) { for(int index=0;index::operator[](index)==someVarArray[index]))return FALSE; return TRUE; } template inline BOOL VarArray::insert(const T &someItem) { if(elements()+1>Array::size()) { Array copyArray; copyArray=(Array&)*this; Array::size(Array::size()+granularity()); for(int index=0;index::operator[](index)=copyArray[index]; } Array::operator[](elements())=someItem; elements(elements()+1); return TRUE; } template inline DWORD VarArray::granularity(void)const { return mGranularity; } template inline void VarArray::granularity(DWORD granularity,BOOL clean) { mGranularity=granularity; if(!clean)return; Array::size(VarArray::granularity()); elements(0); } template inline void VarArray::guarantee(DWORD elements) { reset(); if(elements::size())return; Array::size(elements); } template inline void VarArray::commit(DWORD elements) { guarantee(elements); this->elements(elements); } template inline void VarArray::reset(void) { elements(0); } template inline DWORD VarArray::elements(void)const { return mCacheEntries; } template inline void VarArray::elements(DWORD elements) { mCacheEntries=elements; } template inline DWORD VarArray::size(void)const { // private implementation return Array::size(); } template inline void VarArray::size(DWORD size) { // private implementation Array::size(size); } #endif