29 #ifndef ALLOCATOR_INCLUDED
30 #define ALLOCATOR_INCLUDED
49 std::vector<T*> memory;
52 blockSize=index=remains=0;
61 for(
size_t i=0;i<memory.size();i++){
delete[] memory[i];}
63 blockSize=index=remains=0;
79 if( !memory.empty() ){
80 for(
size_t i=0;i<memory.size();i++){
81 for(
int j=0;j<blockSize;j++){
83 new(&memory[i][j]) T();
95 if(state.index<index || (state.index==index && state.remains<remains)){
96 if(state.index<index){
97 for(
int j=state.remains;j<blockSize;j++){
98 memory[state.index][j].~T();
99 new(&memory[state.index][j]) T();
101 for(
int i=state.index+1;i<index-1;i++){
102 for(
int j=0;j<blockSize;j++){
104 new(&memory[i][j]) T();
107 for(
int j=0;j<remains;j++){
108 memory[index][j].~T();
109 new(&memory[index][j]) T();
112 remains=state.remains;
115 for(
int j=0;j<state.remains;j<remains){
116 memory[index][j].~T();
117 new(&memory[index][j]) T();
119 remains=state.remains;
128 this->blockSize=blockSize;
140 if(!elements){
return NULL;}
141 if(elements>blockSize){
142 std::cerr <<
"Allocator Error, elements bigger than block-size: " << elements <<
">" <<
"blockSize" << std::endl;
145 if(remains<elements){
146 if(index==memory.size()-1){
147 mem=
new T[blockSize];
148 if(!mem){fprintf(stderr,
"Failed to allocate memory\n");exit(0);}
149 memory.push_back(mem);
154 mem=&(memory[index][blockSize-remains]);
159 #endif // ALLOCATOR_INCLUDE
AllocatorState getState(void) const
void rollBack(const AllocatorState &state)
T * newElements(size_t elements=1)