Iros
 
Loading...
Searching...
No Matches
infallible_allocator.h
Go to the documentation of this file.
1#pragma once
2
7#include "di/util/std_new.h"
8
9namespace di::container {
11 static auto allocate(usize size, usize alignment) noexcept -> AllocationResult<> {
12 auto* result =
13 ::operator new(size, std::align_val_t { container::max(alignment, alignof(void*)) }, std::nothrow);
14 DI_ASSERT(result);
15 return AllocationResult<> { result, size };
16 }
17
18 static void deallocate(void* data, usize size, usize alignment) noexcept {
19 ::operator delete(data, size, std::align_val_t { container::max(alignment, alignof(void*)) });
20 }
21};
22
23static_assert(di::concepts::Allocator<InfallibleAllocator>, "InfallibleAllocator is must model di::Allocator");
24}
25
26namespace di {
27using container::InfallibleAllocator;
28}
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition allocator.h:9
Definition sequence.h:12
constexpr auto size
Definition size.h:54
constexpr auto data
Definition data.h:51
constexpr auto max
Definition max.h:47
size_t usize
Definition integers.h:33
Definition zstring_parser.h:9
Definition allocation_result.h:7
Definition infallible_allocator.h:10
static void deallocate(void *data, usize size, usize alignment) noexcept
Definition infallible_allocator.h:18
static auto allocate(usize size, usize alignment) noexcept -> AllocationResult<>
Definition infallible_allocator.h:11