21#include "pw_assert/assert.h"
22#include "pw_bytes/span.h"
23#include "pw_multibuf/config.h"
24#include "pw_multibuf/v1/chunk.h"
26namespace pw::multibuf::v1 {
51 PW_DASSERT(region_.empty());
61 std::optional<OwnedChunk>
GetChunk(
size_t size) {
62 PW_DASSERT(size <= region_.size());
65 std::optional<OwnedChunk> chunk = CreateFirstChunk();
66 if (chunk.has_value() && size < region_.size()) {
67 (*chunk)->Truncate(size);
74 PW_ASSERT(!chunk_in_use_);
81 if (!chunk_in_use_.compare_exchange_strong(in_use,
true)) {
84 return &chunk_storage_;
88 PW_ASSERT(chunk == chunk_storage_.data());
89 chunk_in_use_ =
false;
94 std::atomic<bool> chunk_in_use_ =
false;
95 alignas(
Chunk) std::array<std::byte,
sizeof(
Chunk)> chunk_storage_;
Definition: single_chunk_region_tracker.h:34
ByteSpan Region() const override
Definition: single_chunk_region_tracker.h:77
std::optional< OwnedChunk > GetChunk(size_t size)
Definition: single_chunk_region_tracker.h:61
void Destroy() override
Definition: single_chunk_region_tracker.h:72
void * AllocateChunkClass() override
Definition: single_chunk_region_tracker.h:79
SingleChunkRegionTracker()=default
void SetRegion(ByteSpan region)
Definition: single_chunk_region_tracker.h:50
SingleChunkRegionTracker(ByteSpan region)
Definition: single_chunk_region_tracker.h:43
void DeallocateChunkClass(void *chunk) override
Deallocates a pointer returned by AllocateChunkClass.
Definition: single_chunk_region_tracker.h:87