19#include "pw_bytes/span.h"
20#include "pw_multibuf/v1_adapter/allocator.h"
21#include "pw_multibuf/v1_adapter/internal/chunk_allocator.h"
22#include "pw_multibuf/v1_adapter/multibuf.h"
23#include "pw_sync/lock_annotations.h"
24#include "pw_sync/mutex.h"
26namespace pw::multibuf::v1_adapter {
40 : chunk_allocator_(region, metadata_allocator, alignment) {}
55 class SimpleChunkAllocator :
public internal::ChunkAllocator {
57 SimpleChunkAllocator(
ByteSpan region,
61 ~SimpleChunkAllocator()
override;
67 [[nodiscard]]
bool Init();
71 size_t CountChunks(
size_t desired_size);
74 [[nodiscard]]
bool TryReserveRegions(
size_t num_regions);
80 Region* AllocateRegion(
size_t min_size,
size_t desired_size)
override;
83 size_t TryDeallocateRegion(
void* ptr)
override;
87 std::tuple<iterator, iterator> Split(iterator iter,
size_t offset);
91 iterator Merge(iterator left, iterator right);
103 bool contiguous)
override
110 pw::sync::Mutex mutex_;
Definition: allocator.h:45
Definition: dynamic_vector.h:53
Definition: ptr_iterator.h:142
Definition: allocator.h:33
Definition: simple_allocator.h:35
std::optional< MultiBuf > DoAllocate(size_t min_size, size_t desired_size, bool contiguous) override
std::optional< size_t > DoGetBackingCapacity() override
bool TryReserveRegions(size_t num_regions)
#define PW_GUARDED_BY(x)
Definition: lock_annotations.h:60
#define PW_LOCKS_EXCLUDED(...)
Definition: lock_annotations.h:176
The Pigweed namespace.
Definition: alignment.h:27