| namespace util { | |
| Pool::Pool() { | |
| current_ = NULL; | |
| current_end_ = NULL; | |
| } | |
| Pool::~Pool() { | |
| FreeAll(); | |
| } | |
| void Pool::FreeAll() { | |
| for (std::vector<void *>::const_iterator i(free_list_.begin()); i != free_list_.end(); ++i) { | |
| free(*i); | |
| } | |
| free_list_.clear(); | |
| current_ = NULL; | |
| current_end_ = NULL; | |
| } | |
| void *Pool::More(std::size_t size) { | |
| std::size_t amount = std::max(static_cast<size_t>(32) << free_list_.size(), size); | |
| uint8_t *ret = static_cast<uint8_t*>(MallocOrThrow(amount)); | |
| free_list_.push_back(ret); | |
| current_ = ret + size; | |
| current_end_ = ret + amount; | |
| return ret; | |
| } | |
| } // namespace util | |