20#include "pw_allocator/allocator.h"
21#include "pw_allocator/capability.h"
22#include "pw_allocator/internal/control_block.h"
23#include "pw_allocator/layout.h"
24#include "pw_assert/assert.h"
25#include "pw_bytes/span.h"
26#include "pw_containers/dynamic_vector.h"
27#include "pw_containers/storage.h"
28#include "pw_multibuf/v1_adapter/chunk.h"
29#include "pw_preprocessor/compiler.h"
30#include "pw_result/result.h"
32namespace pw::multibuf::v1_adapter::internal {
50 constexpr Allocator& metadata_allocator()
const {
51 return metadata_allocator_;
54 constexpr size_t alignment()
const {
return 1u << alignment_log2_; }
56 constexpr size_t available()
const {
return available_; }
58 constexpr ByteSpan buffer()
const {
return buffer_; }
62 std::optional<OwnedChunk>
AllocateChunk(
size_t min_size,
size_t desired_size);
71 using ControlBlock = allocator::internal::ControlBlock;
79 constexpr Region() : data(nullptr), size(0), free(true) {}
82 ChunkAllocator(
Allocator& metadata_allocator,
size_t alignment);
84 constexpr size_t num_allocations()
const {
85 return static_cast<size_t>(num_allocations_);
124 uint16_t num_allocations_ = 0;
128 uint8_t alignment_log2_;
142 constexpr bool control_block_free()
const {
return control_block_free_; }
167 bool control_block_free_ =
true;
Definition: allocator.h:42
InfoType
Definition: deallocator.h:173
Definition: chunk_allocator.h:46
void DoDeallocate(void *ptr) override
void * DoAllocate(allocator::Layout layout) override
void SetRegion(ByteSpan region)
std::optional< OwnedChunk > AllocateChunk(size_t size)
Definition: chunk_allocator.h:66
std::optional< OwnedChunk > AllocateChunk(size_t min_size, size_t desired_size)
virtual Region * AllocateRegion(size_t min_size, size_t desired_size)=0
virtual size_t TryDeallocateRegion(void *ptr)=0
Result< Layout > DoGetInfo(InfoType info_type, const void *ptr) const override
Definition: chunk_allocator.h:135
virtual void Destroy()
Definition: chunk_allocator.h:160
void * DoAllocate(Layout layout) override
void DoDeallocate(void *ptr) override
size_t TryDeallocateRegion(void *ptr) override
void DeallocateControlBlock(void *ptr)
Release the chunk shared pointer metadata.
Region * AllocateRegion(size_t min_size, size_t desired_size) override
#define PW_PACKED(declaration)
Definition: compiler.h:54