#pragma once
#include <iostream>
#include <vector>
template <typename Tp>
class FixedAllocator {
public:
explicit FixedAllocator(std::uint64_t page_size)
: p_a_(page_size), page_s_(page_size) {}
Tp* Allocate() {
if (v_.empty()) {
Tp* temp;
temp = static_cast<Tp*>(p_a_.Allocate());
for (size_t i = 0; i < page_s_; i++) {
temp += i;
v_.push_back(temp);
}
}
auto tempp = v_.end();
Tp* aaa = v_[v_.size() - 1];
v_.erase(tempp - 1);
return aaa;
}
void Deallocate(Tp* p) { v_.push_back(p); }
const PageAllocator& InnerAllocator() const noexcept { return p_a_; }
private:
PageAllocator p_a_;
std::vector<Tp*> v_;
size_t page_s_;
};