35 template < std::
size_t Capacity >
44 static constexpr std::size_t node_size =
sizeof( node );
45 using buffer = std::array< std::byte, Capacity >;
50 top_ = buff_.data() + node_size;
51 set_node( top_,
nullptr,
nullptr );
60 allocate( std::size_t
const bytes, std::size_t
const alignment )
override
64 node
const prev_node = get_node( prev_ptr );
66 auto*
const p =
reinterpret_cast< std::byte*
>(
align( top_, alignment ) );
70 if ( new_top + node_size > buff_.end() )
75 set_node( top_, prev_ptr,
nullptr );
76 set_node( prev_ptr, prev_node.prev_ptr, top_ );
82 deallocate(
void*
const ptr, std::size_t
const bytes, std::size_t
const )
override
85 auto [prev_ptr, next_ptr] = get_node( node_ptr );
87 auto [prev_prev_ptr, prev_next_ptr] = get_node( prev_ptr );
88 set_node( prev_ptr, prev_prev_ptr, next_ptr );
90 if ( next_ptr ==
nullptr ) {
93 auto [next_prev_ptr, next_next_ptr] = get_node( next_ptr );
94 set_node( next_ptr, prev_ptr, next_next_ptr );
97 return result::SUCCESS;
102 return this == &other;
105 [[nodiscard]]
bool is_full() const noexcept
override
107 return top_ == buff_.end();
118 std::memcpy(
static_cast< void*
>( &prev ), ptr,
sizeof(
std::byte* ) );
123 std::memcpy(
static_cast< void*
>( &
next ), ptr,
sizeof(
std::byte* ) );
124 return { prev,
next };
130 std::memcpy( ptr,
static_cast< void const*
>( &prev ),
sizeof(
std::byte* ) );
132 std::memcpy( ptr,
static_cast< void const*
>( &
next ),
sizeof(
std::byte* ) );
Definition: memory_resource.h:33
Definition: stack_resource.h:37
bool is_full() const noexcept override
Definition: stack_resource.h:105
stack_resource & operator=(stack_resource const &)=delete
stack_resource(stack_resource const &)=delete
stack_resource()
Definition: stack_resource.h:48
stack_resource & operator=(stack_resource &&)=delete
void * allocate(std::size_t const bytes, std::size_t const alignment) override
Definition: stack_resource.h:60
bool is_equal(pmr::memory_resource const &other) const noexcept override
Definition: stack_resource.h:100
~stack_resource() override=default
result deallocate(void *const ptr, std::size_t const bytes, std::size_t const) override
Definition: stack_resource.h:82
stack_resource(stack_resource &&)=delete
hdr_state next(hdr_state cs) noexcept
Definition: page.h:43
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
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