19#include "pw_containers/intrusive_forward_list.h"
20#include "pw_multibuf/config.h"
21#include "pw_multibuf/multibuf_v1.h"
22#include "pw_result/result.h"
23#include "pw_sync/mutex.h"
25namespace pw::multibuf {
27enum class PW_MULTIBUF_DEPRECATED ContiguityRequirement {
32inline constexpr ContiguityRequirement kAllowDiscontiguous =
33 ContiguityRequirement::kAllowDiscontiguous;
34inline constexpr ContiguityRequirement kNeedsContiguous =
35 ContiguityRequirement::kNeedsContiguous;
88 std::optional<MultiBuf>
Allocate(
size_t min_size,
size_t desired_size);
115 size_t desired_size);
134 size_t contiguous_size_available);
140 class MemoryAvailableDelegate
143 explicit MemoryAvailableDelegate() =
default;
144 MemoryAvailableDelegate(MemoryAvailableDelegate&) =
delete;
145 MemoryAvailableDelegate& operator=(MemoryAvailableDelegate&) =
delete;
146 MemoryAvailableDelegate(MemoryAvailableDelegate&&) =
delete;
147 MemoryAvailableDelegate& operator=(MemoryAvailableDelegate&&) =
delete;
148 virtual ~MemoryAvailableDelegate() =
default;
154 size_t size_available,
155 size_t contiguous_size_available)
const
156 PW_EXCLUSIVE_LOCKS_REQUIRED(lock_) = 0;
159 void AddMemoryAvailableDelegate(MemoryAvailableDelegate& delegate)
160 PW_EXCLUSIVE_LOCKS_REQUIRED(lock_) {
161 mem_delegates_.push_front(delegate);
164 void RemoveMemoryAvailableDelegate(MemoryAvailableDelegate& delegate)
165 PW_EXCLUSIVE_LOCKS_REQUIRED(lock_) {
166 mem_delegates_.remove(delegate);
189 ContiguityRequirement contiguity_requirement) = 0;
196 PW_GUARDED_BY(lock_);
Definition: intrusive_forward_list.h:86
Definition: allocator_async.h:91
Definition: allocator.h:55
std::optional< size_t > GetBackingCapacity()
Definition: allocator.h:124
std::optional< MultiBuf > AllocateContiguous(size_t size)
std::optional< MultiBuf > Allocate(size_t min_size, size_t desired_size)
virtual pw::Result< MultiBuf > DoAllocate(size_t min_size, size_t desired_size, ContiguityRequirement contiguity_requirement)=0
std::optional< MultiBuf > Allocate(size_t size)
virtual std::optional< size_t > DoGetBackingCapacity()=0
MultiBufAllocator(MultiBufAllocator &)=delete
`MultiBufAllocator is not copyable or movable.
std::optional< MultiBuf > AllocateContiguous(size_t min_size, size_t desired_size)
void MoreMemoryAvailable(size_t size_available, size_t contiguous_size_available)