#include <cstdint>
#include <stack>
template<typename Tp>
class FixedAllocator {
private:
PageAllocator page_allocator_;
std::stack<Tp*> free_pull;
public:
explicit FixedAllocator(std::uint64_t page_size) {
page_allocator_ = PageAllocator(page_size);
}
Tp* Allocate() {
if (!free_pull.empty()) {
Tp* answer = free_pull.top();
free_pull.pop();
return answer;
} else {
return page_allocator_.Allocate();
}
}
void Deallocate(Tp* p) {
free_pull.push(p);
}
[[nodiscard]] const PageAllocator& InnerAllocator() const noexcept {
return page_allocator_;
}
};