4 vector<unsigned long> _freeList;
13 for(
int i = 0; i < _pools.size(); ++i) {
14 delete [] _pools[i]._pool;
19 if ( _pools[current]._freeList.size() == 0) {
22 for( ; i < _pools.size(); ++i) {
23 if( _pools[i]._freeList.size() > 0) {
28 if ( i == _pools.size())
31 unsigned long index = _pools[current]._freeList.back();
32 _pools[current]._freeList.pop_back();
33 return &_pools[current]._pool[index];
37 void deallocate(T*
object) {
38 unsigned long ptr = (
unsigned long)
object;
39 for(
int i=0 ; i < _pools.size(); ++i) {
40 unsigned long begin = (
unsigned long)_pools[i]._pool;
41 unsigned long end = begin +
sizeof(T)*size;
42 if ( ptr >= begin && ptr <= end) {
43 unsigned long index = (end - ptr) /
sizeof(T);
46 _pools[current]._freeList.push_back(size - index);
54 void createNewPool() {
55 list<unsigned long> newList;
57 p._pool =
new T[size];
59 current = _pools.size() - 1;
60 _pools[current]._freeList.resize(size);
61 for(
unsigned long index = 0; index< size; ++index)
62 _pools[current]._freeList[index] = index;
67 vector<MemoryPool> _pools;