EnTT 4.0.0
Loading...
Searching...
No Matches
ident.hpp
1#ifndef ENTT_CORE_IDENT_HPP
2#define ENTT_CORE_IDENT_HPP
3
4#include "../stl/cstddef.hpp"
5#include "../stl/type_traits.hpp"
6#include "../stl/utility.hpp"
7#include "fwd.hpp"
8#include "type_traits.hpp"
9
10namespace entt {
11
16template<typename... Type>
17class ident {
18 template<typename Curr, stl::size_t... Index>
19 [[nodiscard]] static ENTT_CONSTEVAL id_type get(stl::index_sequence<Index...>) noexcept {
20 return (0 + ... + (stl::is_same_v<Curr, type_list_element_t<Index, type_list<stl::decay_t<Type>...>>> ? id_type{Index} : id_type{}));
21 }
22
23public:
26
28 template<typename Curr>
29 requires (stl::is_same_v<stl::remove_cvref_t<Curr>, Type> || ...)
30 static constexpr value_type value = get<stl::remove_cvref_t<Curr>>(stl::index_sequence_for<Type...>{});
31};
32
33} // namespace entt
34
35#endif
Type integral identifiers.
Definition ident.hpp:17
id_type value_type
Unsigned integer type.
Definition ident.hpp:25
static constexpr value_type value
Statically generated unique identifier for the given type.
Definition ident.hpp:30
EnTT default namespace.
Definition dense_map.hpp:25
type_list_element< Index, List >::type type_list_element_t
Helper type.
constexpr get_t< Type... > get
Variable template for lists of observed elements.
Definition fwd.hpp:168
stl::uint32_t id_type
Alias declaration for type identifiers.
Definition fwd.hpp:29
A class to use to push around lists of types, nothing more.