18#include "pw_allocator/bucket/base.h"
19#include "pw_containers/intrusive_forward_list.h"
21namespace pw::allocator {
44template <
typename Derived,
typename BlockType>
56 void DoAdd(BlockType& block) {
57 auto* item_to_add =
new (block.UsableSpace())
SortedItem();
60 Derived::MakeAddPredicate(block.InnerSize()));
61 items_.insert_after(prev, *item_to_add);
65 BlockType* DoRemoveAny() {
68 return BlockType::FromUsableSpace(&item);
72 bool DoRemove(BlockType& block) {
77 BlockType* DoRemoveCompatible(
Layout layout) {
82 if (block !=
nullptr) {
83 items_.erase_after(prev);
100template <
typename BlockType>
111 auto* block = BlockType::FromUsableSpace(&item);
112 return inner_size < block->InnerSize();
124template <
typename BlockType>
135 auto* block = BlockType::FromUsableSpace(&item);
136 return block->InnerSize() < inner_size;
Definition: intrusive_forward_list.h:86
static constexpr auto MakeAddPredicate(size_t inner_size)
Definition: sorted.h:109
static constexpr auto MakeAddPredicate(size_t inner_size)
Definition: sorted.h:133
static auto MakeCanAllocPredicate(Layout layout)
Definition: base.h:157
constexpr BlockType * GetBlockFromPrev(Iterator prev, Iterator last)
Definition: base.h:174
void Clear()
Removes all blocks from this bucket.
Definition: base.h:124
static ItemType & GetItemFrom(BlockType &block)
Definition: base.h:185
static Iterator FindPrevIf(Iterator before_first, Iterator last, Predicate predicate)
Definition: base.h:138