19#include "pw_containers/intrusive_forward_list.h"
20#include "pw_multibuf/multibuf.h"
21#include "pw_result/result.h"
22#include "pw_sync/mutex.h"
24namespace pw::multibuf {
26enum class ContiguityRequirement {
31inline constexpr ContiguityRequirement kAllowDiscontiguous =
32 ContiguityRequirement::kAllowDiscontiguous;
33inline constexpr ContiguityRequirement kNeedsContiguous =
34 ContiguityRequirement::kNeedsContiguous;
87 std::optional<MultiBuf>
Allocate(
size_t min_size,
size_t desired_size);
114 size_t desired_size);
133 size_t contiguous_size_available);
139 class MemoryAvailableDelegate
142 explicit MemoryAvailableDelegate() =
default;
143 MemoryAvailableDelegate(MemoryAvailableDelegate&) =
delete;
144 MemoryAvailableDelegate& operator=(MemoryAvailableDelegate&) =
delete;
145 MemoryAvailableDelegate(MemoryAvailableDelegate&&) =
delete;
146 MemoryAvailableDelegate& operator=(MemoryAvailableDelegate&&) =
delete;
147 virtual ~MemoryAvailableDelegate() =
default;
153 size_t size_available,
154 size_t contiguous_size_available)
const
155 PW_EXCLUSIVE_LOCKS_REQUIRED(lock_) = 0;
158 void AddMemoryAvailableDelegate(MemoryAvailableDelegate& delegate)
159 PW_EXCLUSIVE_LOCKS_REQUIRED(lock_) {
163 void RemoveMemoryAvailableDelegate(MemoryAvailableDelegate& delegate)
164 PW_EXCLUSIVE_LOCKS_REQUIRED(lock_) {
165 mem_delegates_.
remove(delegate);
188 ContiguityRequirement contiguity_requirement) = 0;
195 PW_GUARDED_BY(lock_);
Definition: intrusive_forward_list.h:86
bool remove(const T &item)
Definition: intrusive_forward_list.h:282
void push_front(T &item)
Inserts the item at the start of the list.
Definition: intrusive_forward_list.h:229
Definition: allocator_async.h:90
Definition: allocator.h:54
std::optional< size_t > GetBackingCapacity()
Definition: allocator.h:123
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)