// Very simple pool. It can only allocate memory. And all of the memory it | |
// allocates must be freed at the same time. | |
namespace util { | |
class Pool { | |
public: | |
Pool(); | |
~Pool(); | |
void *Allocate(std::size_t size) { | |
void *ret = current_; | |
current_ += size; | |
if (current_ < current_end_) { | |
return ret; | |
} else { | |
return More(size); | |
} | |
} | |
void FreeAll(); | |
private: | |
void *More(std::size_t size); | |
std::vector<void *> free_list_; | |
uint8_t *current_, *current_end_; | |
// no copying | |
Pool(const Pool &); | |
Pool &operator=(const Pool &); | |
}; | |
} // namespace util | |