#pragma once
Add #include <vector>
template<typename Tp>
class FixedAllocator {
PageAllocator page_allocator_;
public:
explicit FixedAllocator(std::uint64_t page_size)
: page_size(page_size),
page_allocator_(PageAllocator(page_size)) {}
Tp *Allocate() {
if (this->pages.empty()) {
Tp *tmp1 = static_cast<Tp *>(this->page_allocator_.Allocate());
for (uint64_t i = 0; i < this->page_size; ++i) {
this->pages.push_back(++tmp1);
}
}
Tp *tmp2 = this->pages.back();
this->pages.pop_back();
return tmp2;
}
void Deallocate(Tp *p) {
this->pages.push_back(p);
}
const PageAllocator &InnerAllocator() const noexcept {
return this->page_allocator_;
}
private:
std::uint64_t page_size{};
std::vector<Tp *> pages{};
};