8#include <gch/small_vector.hpp>
10#include "sleipnir/util/symbol_exports.hpp"
29 : blocks_per_chunk{blocks_per_chunk} {}
63 void*
allocate(
size_t bytes, [[maybe_unused]]
size_t alignment =
64 alignof(std::max_align_t)) {
65 if (m_free_list.empty()) {
69 auto ptr = m_free_list.back();
70 m_free_list.pop_back();
82 void* p, [[maybe_unused]]
size_t bytes,
83 [[maybe_unused]]
size_t alignment =
alignof(std::max_align_t)) {
84 m_free_list.emplace_back(p);
94 return this == &other;
103 return m_buffer.size() * blocks_per_chunk - m_free_list.size();
107 gch::small_vector<std::unique_ptr<std::byte[]>> m_buffer;
108 gch::small_vector<void*> m_free_list;
109 size_t blocks_per_chunk;
117 void add_chunk(
size_t bytes_per_block) {
118 m_buffer.emplace_back(
new std::byte[bytes_per_block * blocks_per_chunk]);
119 for (
int i = blocks_per_chunk - 1; i >= 0; --i) {
120 m_free_list.emplace_back(m_buffer.back().get() + bytes_per_block * i);
165 return static_cast<T*
>(m_memory_resource->
allocate(n));
185SLEIPNIR_DLLEXPORT PoolResource& global_pool_resource();
193PoolAllocator<T> global_pool_allocator() {
194 return PoolAllocator<T>{&global_pool_resource()};
constexpr PoolAllocator(const PoolAllocator< T > &)=default
constexpr PoolAllocator(PoolResource *r)
Definition pool.hpp:143
constexpr void deallocate(T *p, size_t n)
Definition pool.hpp:174
constexpr PoolAllocator< T > & operator=(const PoolAllocator< T > &)=default
T value_type
Definition pool.hpp:136
constexpr T * allocate(size_t n)
Definition pool.hpp:164
PoolResource(size_t blocks_per_chunk)
Definition pool.hpp:28
PoolResource(PoolResource &&)=default
void * allocate(size_t bytes, size_t alignment=alignof(std::max_align_t))
Definition pool.hpp:63
bool is_equal(const PoolResource &other) const noexcept
Definition pool.hpp:93
PoolResource(const PoolResource &)=delete
size_t blocks_in_use() const noexcept
Definition pool.hpp:102
PoolResource & operator=(PoolResource &&)=default
PoolResource & operator=(const PoolResource &)=delete
void deallocate(void *p, size_t bytes, size_t alignment=alignof(std::max_align_t))
Definition pool.hpp:81