Iros
Loading...
Searching...
No Matches
allocate.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/container/allocator/allocation_result.h
"
4
#include "
di/function/tag_invoke.h
"
5
#include "
di/meta/vocab.h
"
6
#include "
di/types/prelude.h
"
7
8
namespace
di::container
{
9
namespace
detail
{
10
struct
AllocateFunction
{
11
template
<
typename
A>
12
constexpr
auto
operator()
(A& allocator,
usize
size
,
usize
alignment)
const
13
->
concepts::MaybeFallible<AllocationResult<>
>
auto
14
requires
(
concepts::TagInvocable<AllocateFunction, A&, usize, usize>
||
15
requires
{ allocator.allocate(
size
, alignment); })
16
{
17
if
constexpr
(
concepts::TagInvocable<AllocateFunction, A&, usize, usize>
) {
18
return
function::tag_invoke
(*
this
, allocator,
size
, alignment);
19
}
else
{
20
return
allocator.allocate(
size
, alignment);
21
}
22
}
23
};
24
}
25
26
constexpr
inline
auto
allocate
=
detail::AllocateFunction
{};
27
}
28
29
namespace
di
{
30
using
container::allocate
;
31
}
allocation_result.h
di::concepts::MaybeFallible
Definition
vocab.h:74
di::concepts::TagInvocable
Definition
tag_invoke.h:33
prelude.h
di::container::detail
Definition
sequence.h:13
di::container
Definition
sequence.h:12
di::container::allocate
constexpr auto allocate
Definition
allocate.h:26
di::container::size
constexpr auto size
Definition
size.h:54
di::function::tag_invoke_ns::tag_invoke
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition
tag_invoke.h:22
di::types::usize
size_t usize
Definition
integers.h:33
di
Definition
zstring_parser.h:9
di::container::detail::AllocateFunction
Definition
allocate.h:10
di::container::detail::AllocateFunction::operator()
constexpr auto operator()(A &allocator, usize size, usize alignment) const -> concepts::MaybeFallible< AllocationResult<> > auto requires(concepts::TagInvocable< AllocateFunction, A &, usize, usize >||
Definition
allocate.h:12
tag_invoke.h
vocab.h
libs
di
include
di
container
allocator
allocate.h
Generated by
1.13.0