C/C++ API Reference
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
25
28 : public SmallBlockBase<SmallAlignableBlock, uint32_t, 0>,
29 public AlignableBlock<SmallAlignableBlock> {
30 private:
31 friend SmallBlockBase<SmallAlignableBlock, uint32_t, 0>;
32 constexpr explicit SmallAlignableBlock(size_t outer_size)
33 : SmallBlockBase(outer_size) {}
34
36 friend Allocatable;
37
38 // `Alignable` overrides.
40 friend Alignable;
41
42 constexpr StatusWithSize DoCanAlloc(Layout layout) const {
43 return Alignable::DoCanAlloc(layout);
44 }
45
46 static constexpr BlockResult<SmallAlignableBlock> DoAllocFirst(
47 SmallAlignableBlock*&& block, Layout layout) {
48 return Alignable::DoAllocFirst(std::move(block), layout);
49 }
50
51 static constexpr BlockResult<SmallAlignableBlock> DoAllocLast(
52 SmallAlignableBlock*&& block, Layout layout) {
53 return Alignable::DoAllocLast(std::move(block), layout);
54 }
55};
56
58
59} // namespace pw::allocator
Definition: status_with_size.h:51
Definition: alignable.h:44
constexpr StatusWithSize DoCanAlloc(Layout layout) const
Definition: alignable.h:93
static constexpr BlockResult< SmallAlignableBlock > DoAllocFirst(SmallAlignableBlock *&&block, Layout layout)
Definition: alignable.h:129
static constexpr BlockResult< SmallAlignableBlock > DoAllocLast(SmallAlignableBlock *&&block, Layout layout)
Definition: alignable.h:161
Definition: allocatable.h:51
Definition: result.h:116
Definition: layout.h:58
An alignable version of SmallBlock.
Definition: small_alignable_block.h:29