18#include "pw_async2/dispatcher.h"
19#include "pw_async2/poll.h"
20#include "pw_multibuf/allocator.h"
21#include "pw_multibuf/config.h"
23namespace pw::multibuf {
25class MultiBufAllocationFuture;
31 : mbuf_allocator_(mbuf_allocator) {}
91 :
public MultiBufAllocator::MemoryAvailableDelegate {
94 : allocator_(&allocator),
97 contiguity_requirement_(kAllowDiscontiguous) {}
101 ContiguityRequirement contiguity_requirement)
102 : allocator_(&allocator),
104 desired_size_(desired_size),
105 contiguity_requirement_(contiguity_requirement) {}
111 void SetDesiredSize(
size_t min_size) {
112 SetDesiredSizes(min_size, min_size, kAllowDiscontiguous);
114 void SetDesiredSizes(
size_t min_size,
116 ContiguityRequirement contiguity_requirement);
121 size_t min_size()
const {
return min_size_; }
122 size_t desired_size()
const {
return desired_size_; }
123 bool needs_contiguous()
const {
124 return contiguity_requirement_ == kNeedsContiguous;
128 friend class MultiBufAllocator;
132 bool HandleMemoryAvailable(MultiBufAllocator& alloc,
133 size_t size_available,
134 size_t contiguous_size_available)
const override;
137 async2::Poll<std::optional<MultiBuf>> TryAllocate();
140 MultiBufAllocator* allocator_;
143 async2::Waker waker_;
154 size_t desired_size_;
155 ContiguityRequirement contiguity_requirement_;
Definition: allocator_async.h:91
MultiBufAllocator & allocator()
Returns the allocator associated with this future.
Definition: allocator_async.h:120
Definition: allocator_async.h:27
MultiBufAllocationFuture AllocateContiguousAsync(size_t min_size, size_t desired_size)
MultiBufAllocationFuture AllocateAsync(size_t size)
MultiBufAllocatorAsync(MultiBufAllocatorAsync &)=delete
`MultiBufAllocatorAsync is not copyable or movable.
MultiBufAllocationFuture AllocateAsync(size_t min_size, size_t desired_size)
MultiBufAllocationFuture AllocateContiguousAsync(size_t size)
Definition: allocator.h:55