Pigweed
 
Loading...
Searching...
No Matches
small_alignable_block.h
1// Copyright 2025 The Pigweed Authors
2//
3// Licensed under the Apache License, Version 2.0 (the "License"); you may not
4// use this file except in compliance with the License. You may obtain a copy of
5// the License at
6//
7// https://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12// License for the specific language governing permissions and limitations under
13// the License.
14#pragma once
15
16#include <cstddef>
17#include <cstdint>
18
19#include "pw_allocator/block/alignable.h"
20#include "pw_allocator/block/small_block_base.h"
21
22namespace pw::allocator {
23
26 : public SmallBlockBase<SmallAlignableBlock, uint32_t, 0>,
27 public AlignableBlock<SmallAlignableBlock> {
28 private:
29 friend SmallBlockBase<SmallAlignableBlock, uint32_t, 0>;
30 constexpr explicit SmallAlignableBlock(size_t outer_size)
31 : SmallBlockBase(outer_size) {}
32
34 friend Allocatable;
35
36 // `Alignable` overrides.
38 friend Alignable;
39
40 constexpr StatusWithSize DoCanAlloc(Layout layout) const {
41 return Alignable::DoCanAlloc(layout);
42 }
43
44 static constexpr BlockResult<SmallAlignableBlock> DoAllocFirst(
45 SmallAlignableBlock*&& block, Layout layout) {
46 return Alignable::DoAllocFirst(std::move(block), layout);
47 }
48
49 static constexpr BlockResult<SmallAlignableBlock> DoAllocLast(
50 SmallAlignableBlock*&& block, Layout layout) {
51 return Alignable::DoAllocLast(std::move(block), layout);
52 }
53};
54
55} // namespace pw::allocator
Definition: status_with_size.h:49
Definition: alignable.h:42
constexpr StatusWithSize DoCanAlloc(Layout layout) const
Definition: alignable.h:89
static constexpr BlockResult< SmallAlignableBlock > DoAllocFirst(SmallAlignableBlock *&&block, Layout layout)
Definition: alignable.h:125
static constexpr BlockResult< SmallAlignableBlock > DoAllocLast(SmallAlignableBlock *&&block, Layout layout)
Definition: alignable.h:157
Definition: allocatable.h:49
Definition: result.h:114
Definition: layout.h:56
An alignable version of SmallBlock.
Definition: small_alignable_block.h:27