template<typename Tp>
class FixedAllocator {
PageAllocator page_allocator_;
std::uint64_t page_size;
public:
explicit FixedAllocator(std::uint64_t page_size) : page_size(page_size) {}
Tp* Allocate() {
Tp* p;
try {
p = new char[sizeof(Tp) * page_size];
}
catch(...) {
p = (Tp*)page_allocator_.Allocate();
}
return p;
}
void Deallocate(Tp* p) {
delete p;
}
const PageAllocator& InnerAllocator() const noexcept {
return page_allocator_;
}
};