29#ifndef ETL_TYPE_LOOKUP_INCLUDED
30#define ETL_TYPE_LOOKUP_INCLUDED
35#include "static_assert.h"
44 template <
typename T,
int ID_>
58 template <
typename T1,
typename T2>
65#if ETL_USING_CPP11 && !defined(ETL_TYPE_SELECT_FORCE_CPP03_IMPLEMENTATION)
69 template <
typename... TTypes>
80 template <
int Id,
typename T1,
typename... TRest>
81 struct type_from_id_helper
83 using type =
typename etl::conditional< Id == T1::Id,
typename T1::type,
typename type_from_id_helper<Id, TRest...>
::type>
::type;
87 template <
int Id,
typename T1>
88 struct type_from_id_helper<Id, T1>
90 using type =
typename etl::conditional<Id == T1::Id, typename T1::type, nulltype>::type;
101 using type =
typename type_from_id_helper<Id, TTypes...>
::type;
103 static_assert(!(etl::is_same<nulltype, type>::value),
"Invalid id");
107 using type_from_id_t =
typename type_from_id<Id>::type;
114 template <
typename T,
typename T1,
typename... TRest>
115 struct id_from_type_helper
117 static constexpr size_t value = etl::is_same<T, typename T1::type>::value ? size_t(T1::Id) : id_from_type_helper<T, TRest...>::value;
121 template <
typename T,
typename T1>
122 struct id_from_type_helper<T, T1>
124 static constexpr size_t value = etl::is_same<T, typename T1::type>::value ? size_t(T1::Id) : UNKNOWN;
132 template <
typename T>
135 static constexpr size_t value = id_from_type_helper<T, TTypes...>::value;
137 static_assert(value != UNKNOWN,
"Invalid type");
141 template <
typename T>
142 static constexpr size_t id_from_type_v = id_from_type<T>::value;
146 template <
typename T>
147 static unsigned int get_id_from_type(
const T&)
149 return get_id_from_type<T>();
153 template <
typename T>
154 static unsigned int get_id_from_type()
156 return id_from_type<T>::value;
163 template <
typename... TTypes>
173 template <
typename T,
typename T1,
typename... TRest>
174 struct type_from_type_helper
176 using type =
typename etl::conditional< etl::is_same<T, typename T1::type1>::value,
typename T1::type2,
177 typename type_from_type_helper<T, TRest...>::type>::type;
180 template <
typename T,
typename T1>
181 struct type_from_type_helper<T, T1>
183 using type =
typename etl::conditional<etl::is_same<T, typename T1::type1>::value,
typename T1::type2, nulltype>::type;
188 template <
typename T>
194 using type =
typename type_from_type_helper<T, TTypes...>::type;
196 static_assert(!etl::is_same<type, nulltype>::value,
"Type match not found");
200 template <
typename T>
201 using type_from_type_t =
typename type_from_type<T>::type;
205 #include "private/type_lookup_cpp03.h"
Definition integral_limits.h:518
bitset_ext
Definition absolute.h:40
Definition type_lookup.h:60
Definition type_lookup.h:54
The type/id pair type to use for type/id lookup template parameters.
Definition type_lookup.h:46
Definition type_lookup.h:161
Definition type_lookup.h:155
The type/type pair type to use for type/type lookup template parameters.
Definition type_lookup.h:60