29#ifndef ETL_TYPE_LOOKUP_INCLUDED
30#define ETL_TYPE_LOOKUP_INCLUDED
34#include "static_assert.h"
41#error THIS HEADER IS A GENERATOR. DO NOT INCLUDE.
53 template <
typename T,
int ID_>
67 template <
typename T1,
typename T2>
74#if ETL_USING_CPP11 && !defined(ETL_TYPE_SELECT_FORCE_CPP03_IMPLEMENTATION)
78 template <
typename... TTypes>
87 template <
size_t Id,
typename T1,
typename... TRest>
88 struct type_from_id_helper
90 using type =
typename etl::conditional<Id == T1::Id,
92 typename type_from_id_helper<Id, TRest...>::type>::type;
96 template <
size_t Id,
typename T1>
97 struct type_from_id_helper<Id, T1>
99 using type =
typename etl::conditional<Id == T1::Id,
112 using type =
typename type_from_id_helper<Id, TTypes...>::type;
114 static_assert(!(etl::is_same<nulltype, type>::value),
"Invalid id");
118 using type_from_id_t =
typename type_from_id<Id>::type;
122 static constexpr size_t UNKNOWN = etl::integral_limits<size_t>::max;
125 template <
typename T,
typename T1,
typename... TRest>
126 struct id_from_type_helper
128 static constexpr size_t value = etl::is_same<T, typename T1::type>::value ? size_t(T1::Id) : id_from_type_helper<T, TRest...>::value;
132 template <
typename T,
typename T1>
133 struct id_from_type_helper<T, T1>
135 static constexpr size_t value = etl::is_same<T, typename T1::type>::value ? size_t(T1::Id) : UNKNOWN;
143 template <
typename T>
146 static constexpr size_t value = id_from_type_helper<T, TTypes...>::value;
148 static_assert(value != UNKNOWN,
"Invalid type");
152 template <
typename T>
153 static constexpr size_t id_from_type_v = id_from_type<T>::value;
157 template <
typename T>
158 static unsigned int get_id_from_type(
const T&)
160 return get_id_from_type<T>();
164 template <
typename T>
165 static unsigned int get_id_from_type()
167 return id_from_type<T>::value;
174 template <
typename... TTypes>
182 template <
typename T,
typename T1,
typename... TRest>
183 struct type_from_type_helper
185 using type =
typename etl::conditional<etl::is_same<T, typename T1::type1>::value,
187 typename type_from_type_helper<T, TRest...>::type>::type;
190 template <
typename T,
typename T1>
191 struct type_from_type_helper<T, T1>
193 using type =
typename etl::conditional<etl::is_same<T, typename T1::type1>::value,
200 template <
typename T>
206 using type =
typename type_from_type_helper<T, TTypes...>::type;
208 static_assert(!etl::is_same<type, nulltype>::value,
"Type match not found");
212 template <
typename T>
213 using type_from_type_t =
typename type_from_type<T>::type;
221 template <
typename T1,
222 typename T2 = etl::type_id_pair<etl::null_type<0>, -2>,
223 typename T3 = etl::type_id_pair<etl::null_type<0>, -3>,
224 typename T4 = etl::type_id_pair<etl::null_type<0>, -4>,
225 typename T5 = etl::type_id_pair<etl::null_type<0>, -5>,
226 typename T6 = etl::type_id_pair<etl::null_type<0>, -6>,
227 typename T7 = etl::type_id_pair<etl::null_type<0>, -7>,
228 typename T8 = etl::type_id_pair<etl::null_type<0>, -8>,
229 typename T9 = etl::type_id_pair<etl::null_type<0>, -9>,
230 typename T10 = etl::type_id_pair<etl::null_type<0>, -10>,
231 typename T11 = etl::type_id_pair<etl::null_type<0>, -11>,
232 typename T12 = etl::type_id_pair<etl::null_type<0>, -12>,
233 typename T13 = etl::type_id_pair<etl::null_type<0>, -13>,
234 typename T14 = etl::type_id_pair<etl::null_type<0>, -14>,
235 typename T15 = etl::type_id_pair<etl::null_type<0>, -15>,
236 typename T16 = etl::type_id_pair<etl::null_type<0>, -16> >
263 ::type>::type>::type>::type>
264 ::type>::type>::type>::type>
265 ::type>::type>::type>::type type;
276 template <
typename T>
298 (
unsigned int) UNKNOWN
301 ETL_STATIC_ASSERT(((
unsigned int)value != (
unsigned int)UNKNOWN),
"Invalid type");
305 template <
typename T>
306 static unsigned int get_id_from_type(
const T&)
308 return get_id_from_type<T>();
312 template <
typename T>
313 static unsigned int get_id_from_type()
315 return id_from_type<T>::value;
322 template <
typename T1,
323 typename T2 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
324 typename T3 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
325 typename T4 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
326 typename T5 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
327 typename T6 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
328 typename T7 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
329 typename T8 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
330 typename T9 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
331 typename T10 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
332 typename T11 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
333 typename T12 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
334 typename T13 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
335 typename T14 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
336 typename T15 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> >,
337 typename T16 = etl::type_type_pair<etl::null_type<0>, etl::null_type<0> > >
343 template <
typename T>
364 ::type>::type>::type>::type>::type>::type>::type>::type type;
Definition null_type.h:40
conditional
Definition type_traits_generator.h:1223
is_same
Definition type_traits_generator.h:1104
bitset_ext
Definition absolute.h:39
Definition type_lookup.h:278
Definition type_lookup.h:244
Definition type_lookup.h:238
The type/id pair type to use for type/id lookup template parameters.
Definition type_lookup_generator.h:67
Definition type_lookup.h:345
Definition type_lookup.h:339
The type/type pair type to use for type/type lookup template parameters.
Definition type_lookup_generator.h:81