27 #include "../static_vector.h"
34 template < std::
size_t PoolSize, u
int16_t PoolCount >
40 for ( std::size_t
const i :
range( PoolCount ) )
41 free_.push_back(
static_cast< uint16_t
>( i ) );
50 allocate( std::size_t
const bytes, std::size_t
const alignment )
override
53 std::size_t used =
bytes;
54 if ( !free_.empty() ) {
55 std::size_t
const i = free_.back();
56 void*
const pool_p = pools_[i].data();
57 p =
align( pool_p, alignment );
58 used +=
static_cast< std::size_t
>(
60 reinterpret_cast< std::byte*
>( pool_p ) );
63 if ( p ==
nullptr || used > PoolSize )
70 deallocate(
void*
const ptr, std::size_t
const, std::size_t
const )
override
73 auto const pval = std::bit_cast< std::size_t >( ptr );
74 auto const bval = std::bit_cast< std::size_t >( &pools_ );
76 std::size_t
const spot_i = ( pval - bval ) / PoolSize;
78 if ( spot_i >= PoolCount )
80 free_.push_back(
static_cast< uint16_t
>( spot_i ) );
81 return result::SUCCESS;
86 return this == &other;
89 [[nodiscard]]
bool is_full() const noexcept
override
97 using pool = std::array< std::byte, PoolSize >;
100 std::array< pool, PoolCount > pools_;
Definition: memory_resource.h:33
Definition: pool_resource.h:36
result deallocate(void *const ptr, std::size_t const, std::size_t const) override
Definition: pool_resource.h:70
bool is_equal(pmr::memory_resource const &other) const noexcept override
Definition: pool_resource.h:84
pool_resource()
Definition: pool_resource.h:38
pool_resource & operator=(pool_resource const &)=delete
pool_resource & operator=(pool_resource &&)=delete
pool_resource(pool_resource &&)=delete
~pool_resource() override=default
bool is_full() const noexcept override
Definition: pool_resource.h:89
pool_resource(pool_resource const &)=delete
void * allocate(std::size_t const bytes, std::size_t const alignment) override
Definition: pool_resource.h:50
MIT License.
Definition: aliases.h:36
void * align(void *const ptr, std::size_t const alignment)
TODO: this needs tests.
Definition: util.h:41
constexpr std::array< std::byte, N > bytes(Args const &... args)
Conveft the provided arguments into array of std::byte.
Definition: algorithm.h:524
constexpr view< iterators::numeric_iterator< Numeric > > range(Numeric from, Numeric to)
Builds numeric view over interval [from, to)
Definition: range.h:34
physical_quantity< 0, 0, 0, 0, 0, 0, 0, 0, 1 > byte
Definition: physical_quantity.h:118
result represents an result of some operation, as an alternative to returning just bool with true/fal...
Definition: result.h:42