capydi
Loading...
Searching...
No Matches
MetaArity.hpp
Go to the documentation of this file.
1
#ifndef ARITY_HPP_
2
#define ARITY_HPP_
3
4
#include <cstddef>
5
#include <optional>
6
7
namespace
capy::meta
8
{
9
10
enum class
MetaArity
11
{
12
N1
,
13
N2
,
14
N3
,
15
N4
,
16
N5
,
17
N6
,
18
N7
,
19
N8
,
20
N9
,
21
N10
,
22
N11
,
23
N12
,
24
N13
,
25
N14
,
26
N15
,
27
N16
,
28
29
LINEAR_ARITIES_COUNT
,
30
};
31
32
constexpr
std::size_t
MAX_LINEAR_META_ARITY
=
static_cast<
std::size_t
>
(
33
MetaArity::LINEAR_ARITIES_COUNT
34
);
35
36
consteval
std::optional<MetaArity>
37
meta_arity_from_args_count
(
const
std::size_t args_count)
38
{
39
if
(args_count < 1 || args_count >
MAX_LINEAR_META_ARITY
) {
40
return
std::nullopt;
41
}
42
43
return
static_cast<
MetaArity
>
(args_count - 1);
44
}
45
46
template
<std::
size_t
ARGS_COUNT>
47
requires
(
meta_arity_from_args_count
(ARGS_COUNT).has_value())
48
constexpr
MetaArity
meta_arity_from_args_count_v
49
=
meta_arity_from_args_count
(ARGS_COUNT).value();
50
51
template
<
typename
... Args>
52
constexpr
MetaArity
meta_arity_from_args_v
=
meta_arity_from_args_count_v
<
sizeof
...(Args)>;
53
54
}
55
56
#endif
// !ARITY_HPP_
capy::meta
Definition
Rebind.hpp:7
capy::meta::MAX_LINEAR_META_ARITY
constexpr std::size_t MAX_LINEAR_META_ARITY
Definition
MetaArity.hpp:32
capy::meta::meta_arity_from_args_count_v
constexpr MetaArity meta_arity_from_args_count_v
Definition
MetaArity.hpp:49
capy::meta::MetaArity
MetaArity
Definition
MetaArity.hpp:11
capy::meta::MetaArity::N10
@ N10
Definition
MetaArity.hpp:21
capy::meta::MetaArity::N6
@ N6
Definition
MetaArity.hpp:17
capy::meta::MetaArity::N16
@ N16
Definition
MetaArity.hpp:27
capy::meta::MetaArity::N15
@ N15
Definition
MetaArity.hpp:26
capy::meta::MetaArity::N8
@ N8
Definition
MetaArity.hpp:19
capy::meta::MetaArity::N14
@ N14
Definition
MetaArity.hpp:25
capy::meta::MetaArity::LINEAR_ARITIES_COUNT
@ LINEAR_ARITIES_COUNT
Definition
MetaArity.hpp:29
capy::meta::MetaArity::N1
@ N1
Definition
MetaArity.hpp:12
capy::meta::MetaArity::N11
@ N11
Definition
MetaArity.hpp:22
capy::meta::MetaArity::N3
@ N3
Definition
MetaArity.hpp:14
capy::meta::MetaArity::N4
@ N4
Definition
MetaArity.hpp:15
capy::meta::MetaArity::N5
@ N5
Definition
MetaArity.hpp:16
capy::meta::MetaArity::N7
@ N7
Definition
MetaArity.hpp:18
capy::meta::MetaArity::N2
@ N2
Definition
MetaArity.hpp:13
capy::meta::MetaArity::N13
@ N13
Definition
MetaArity.hpp:24
capy::meta::MetaArity::N12
@ N12
Definition
MetaArity.hpp:23
capy::meta::MetaArity::N9
@ N9
Definition
MetaArity.hpp:20
capy::meta::meta_arity_from_args_v
constexpr MetaArity meta_arity_from_args_v
Definition
MetaArity.hpp:52
capy::meta::meta_arity_from_args_count
consteval std::optional< MetaArity > meta_arity_from_args_count(const std::size_t args_count)
Definition
MetaArity.hpp:37
core
capymeta
include
capymeta
primitives
MetaArity.hpp
Generated by
1.15.0