#pragma once #include #include template class FixedAllocator { PageAllocator page_allocator_; public: explicit FixedAllocator(std::uint64_t page_size) : page_allocator_(page_size) { pg_size = page_size; } Tp* Allocate() { for (uint64_t i = 0; i < z.size(); i++) { if (z[i].second < pg_size) { z[i].second++; return z[i].first; } } z.emplace_back(static_cast(page_allocator_.Allocate()), 1); return z.back().first; } void Deallocate(Tp* p) { auto ind = getindex(p); if (ind != -1) { z[ind].second--; } } const PageAllocator& InnerAllocator() const noexcept { return page_allocator_; } private: std::vector> z; uint64_t pg_size; uint64_t getindex(Tp* p) { for (uint64_t i = 0; i < z.size(); i++) if (z[i].first == p) return i; return -1; } };