Iros
 
Loading...
Searching...
No Matches
atom.h
Go to the documentation of this file.
1#pragma once
2
4#include "di/meta/language.h"
6#include "di/meta/util.h"
7
8namespace di::reflection {
9template<typename T>
10struct Atom {
11 using Type = T;
12
13 template<typename U>
15 constexpr static auto get(U&& value) -> decltype(auto) {
17 return (util::forward<U>(value));
18 } else {
19 return T(util::forward<U>(value));
20 }
21 }
22
23 constexpr static auto is_fields() -> bool { return false; }
24 constexpr static auto is_field() -> bool { return false; }
25 constexpr static auto is_enumerator() -> bool { return false; }
26 constexpr static auto is_enumerators() -> bool { return false; }
27 constexpr static auto is_atom() -> bool { return true; }
28 constexpr static auto is_integer() -> bool { return concepts::Integer<T>; }
29 constexpr static auto is_bool() -> bool { return concepts::SameAs<T, bool>; }
30 constexpr static auto is_string() -> bool { return concepts::detail::ConstantString<T>; }
31 constexpr static auto is_list() -> bool { return concepts::Container<T> && !is_string() && !is_map(); }
32 constexpr static auto is_map() -> bool {
33 return requires {
36 };
37 }
38
39 auto operator==(Atom const&) const -> bool = default;
40 auto operator<=>(Atom const&) const = default;
41};
42
43template<typename T>
44constexpr inline auto atom = Atom<T> {};
45}
46
47namespace di {
48using reflection::Atom;
50}
Definition operations.h:11
Definition container.h:8
Definition language.h:215
Definition core.h:114
Definition tuple_like.h:38
Definition constant_string.h:8
constexpr auto TupleSize
Definition tuple_size.h:23
Definition atom.h:8
constexpr auto atom
Definition atom.h:44
Definition zstring_parser.h:9
Definition atom.h:10
static constexpr auto is_enumerator() -> bool
Definition atom.h:25
static constexpr auto is_map() -> bool
Definition atom.h:32
static constexpr auto is_integer() -> bool
Definition atom.h:28
static constexpr auto is_fields() -> bool
Definition atom.h:23
static constexpr auto is_string() -> bool
Definition atom.h:30
auto operator==(Atom const &) const -> bool=default
static constexpr auto is_list() -> bool
Definition atom.h:31
auto operator<=>(Atom const &) const =default
static constexpr auto is_bool() -> bool
Definition atom.h:29
static constexpr auto is_field() -> bool
Definition atom.h:24
static constexpr auto get(U &&value) -> decltype(auto)
Definition atom.h:15
T Type
Definition atom.h:11
static constexpr auto is_enumerators() -> bool
Definition atom.h:26
static constexpr auto is_atom() -> bool
Definition atom.h:27