23 #ifndef __CU_FREE_LIST_H__
24 #define __CU_FREE_LIST_H__
32 #pragma mark FreeList Template
103 _expandable = expand;
104 _capacity = capacity;
107 _prealloc = (_capacity > 0 ?
new T[_capacity] :
nullptr);
118 if (_prealloc !=
nullptr) {
124 #pragma mark Accessors
133 size_t getAvailable()
const {
return (_capacity-(
long)_allocated)+_freeobjs.size(); }
153 size_t getUsage()
const {
return _allocated-_released; }
176 T* getPreallocated() {
return _prealloc; }
179 #pragma mark Memory Managment
215 virtual void clear();
220 #pragma mark Method Implementations
235 if (!_freeobjs.empty()) {
236 result = _freeobjs.front();
239 }
else if (_allocated < _capacity) {
240 result = &_prealloc[_allocated];
242 }
else if (_expandable) {
244 _expansion.push(result);
247 _peaksize = (_peaksize < getUsage() ? getUsage() : _peaksize);
267 CCASSERT(obj !=
nullptr,
"Attempt to free null pointer");
283 while (!_expansion.empty()) {
284 T* a = _expansion.front();
290 for(
int ii =0; ii < _capacity; ii++) {
291 _prealloc[ii].reset();
295 while (!_expansion.empty()) {
size_t getAvailable() const
Definition: CUFreeList.h:133
queue< T * > _expansion
Definition: CUFreeList.h:89
size_t _peaksize
Definition: CUFreeList.h:76
queue< T * > _freeobjs
Definition: CUFreeList.h:84
~FreeList()
Definition: CUFreeList.h:116
size_t _allocated
Definition: CUFreeList.h:72
bool isExpandable() const
Definition: CUFreeList.h:173
size_t getCapacity() const
Definition: CUFreeList.h:143
size_t _released
Definition: CUFreeList.h:74
FreeList(size_t capacity=0, bool expand=false)
Definition: CUFreeList.h:102
bool _expandable
Definition: CUFreeList.h:87
size_t _capacity
Definition: CUFreeList.h:81
size_t getUsage() const
Definition: CUFreeList.h:153
size_t getPeakUsage() const
Definition: CUFreeList.h:163
Definition: CUFreeList.h:69
T * _prealloc
Definition: CUFreeList.h:79
virtual T * alloc()
Definition: CUFreeList.h:233
void free(T *obj)
Definition: CUFreeList.h:266
virtual void clear()
Definition: CUFreeList.h:281