7 #ifndef CAFU_POOL_HPP_INCLUDED
8 #define CAFU_POOL_HPP_INCLUDED
23 PoolNoFreeT(
unsigned long SizeOfFirstBlock=8) : SizeOfNextBlock(SizeOfFirstBlock), ElementsRemaining(0), UserSize(0)
30 for (
unsigned long BlockNr=0; BlockNr<Blocks.
Size(); BlockNr++)
31 delete[] Blocks[BlockNr];
37 if (Size==0)
return NULL;
39 if (Size>ElementsRemaining)
43 while (SizeOfNextBlock<Size) SizeOfNextBlock*=2;
45 Blocks.PushBack(
new T[SizeOfNextBlock]);
46 ElementsRemaining=SizeOfNextBlock;
51 ElementsRemaining-=Size;
53 return Blocks[Blocks.
Size()-1]+ElementsRemaining;
63 unsigned long GetSize()
const
71 PoolNoFreeT(
const PoolNoFreeT<T>&);
72 void operator = (
const PoolNoFreeT<T>&);
74 unsigned long SizeOfNextBlock;
75 unsigned long ElementsRemaining;
76 unsigned long UserSize;
89 PoolSingleT(
unsigned long SizeOfFirstBlock=8) : SizeOfNextBlock(SizeOfFirstBlock), ElementsRemaining(0), AllocedElemCount(0)
91 FreeElements.PushBackEmpty(SizeOfFirstBlock*3);
98 assert(AllocedElemCount==0);
100 for (
unsigned long BlockNr=0; BlockNr<Blocks.
Size(); BlockNr++)
101 delete[] Blocks[BlockNr];
109 if (FreeElements.
Size()>0)
111 T* Element=FreeElements[FreeElements.
Size()-1];
113 FreeElements.DeleteBack();
118 if (ElementsRemaining>0)
121 return Blocks[Blocks.
Size()-1]+ElementsRemaining;
125 assert(SizeOfNextBlock>0);
126 Blocks.PushBack(
new T[SizeOfNextBlock]);
127 ElementsRemaining=SizeOfNextBlock;
132 return Blocks[Blocks.
Size()-1]+ElementsRemaining;
135 void Free(T* Element)
138 FreeElements.PushBack(Element);
145 PoolSingleT(
const PoolSingleT<T>&);
146 void operator = (
const PoolSingleT<T>&);
148 unsigned long SizeOfNextBlock;
149 unsigned long ElementsRemaining;
152 unsigned long AllocedElemCount;
175 T* alloc(unsigned long Size=1);
182 PoolT(const PoolT<T>&); ///< Use of the Copy Constructor is not allowed.
183 void operator = (const PoolT<T>&); ///< Use of the Assignment Operator is not allowed.
This class manages memory for a pool of objects.
Definition: Pool.hpp:85
unsigned long Size() const
Get size of array.
Definition: Array.hpp:138
T * Alloc()
Returns a pointer to an objects of type T.
Definition: Pool.hpp:105
T * Alloc(unsigned long Size=1)
Returns a pointer to Size allocated objects of type T.
Definition: Pool.hpp:35
void Overwrite()
Clear array (but reuse memory)
Definition: Array.hpp:154
This class manages memory for a pool of objects.
Definition: Pool.hpp:19