72 typedef TValue value_type;
73 typedef TIdType id_type;
76 ETL_CONSTEXPR type_def() ETL_NOEXCEPT
83 template <typename T, typename = typename etl::enable_if< etl::is_convertible<T, TValue>::value,
void>::type>
87 ETL_CONSTEXPR type_def(T value_) ETL_NOEXCEPT
88 : value(
static_cast<TValue
>(value_))
94 ETL_CONSTEXPR type_def(
const type_def& other) =
default;
98 ETL_CONSTEXPR
operator TValue()
const ETL_NOEXCEPT
104 ETL_CONSTEXPR14 type_def& operator++() ETL_NOEXCEPT
111 ETL_CONSTEXPR14 type_def operator++(
int) ETL_NOEXCEPT
113 type_def temp(*
this);
114 type_def::operator++();
119 ETL_CONSTEXPR14 type_def& operator--() ETL_NOEXCEPT
126 ETL_CONSTEXPR14 type_def operator--(
int) ETL_NOEXCEPT
128 type_def temp(*
this);
129 type_def::operator--();
134 template <
typename T>
135 ETL_CONSTEXPR14 ETL_TYPE_DEF_RETURN(T, TValue, type_def&) operator+=(T rhs)ETL_NOEXCEPT
137 value +=
static_cast<TValue
>(rhs);
142 ETL_CONSTEXPR14 type_def& operator+=(
const type_def& rhs) ETL_NOEXCEPT
149 template <
typename T>
150 ETL_CONSTEXPR14 ETL_TYPE_DEF_RETURN(T, TValue, type_def&) operator-=(T rhs)ETL_NOEXCEPT
152 value -=
static_cast<TValue
>(rhs);
157 ETL_CONSTEXPR14 type_def& operator-=(
const type_def& rhs) ETL_NOEXCEPT
164 template <
typename T>
165 ETL_CONSTEXPR14 ETL_TYPE_DEF_RETURN(T, TValue, type_def&) operator*=(T rhs)ETL_NOEXCEPT
167 value *=
static_cast<TValue
>(rhs);
172 ETL_CONSTEXPR14 type_def& operator*=(
const type_def& rhs) ETL_NOEXCEPT
179 template <
typename T>
180 ETL_CONSTEXPR14 ETL_TYPE_DEF_RETURN(T, TValue, type_def&) operator/=(T rhs)ETL_NOEXCEPT
182 value /=
static_cast<TValue
>(rhs);
187 ETL_CONSTEXPR14 type_def& operator/=(
const type_def& rhs) ETL_NOEXCEPT
194 template <
typename T>
195 ETL_CONSTEXPR14 ETL_TYPE_DEF_RETURN(T, TValue, type_def&) operator%=(T rhs)ETL_NOEXCEPT
197 value %=
static_cast<TValue
>(rhs);
202 ETL_CONSTEXPR14 type_def& operator%=(
const type_def& rhs) ETL_NOEXCEPT
209 template <
typename T>
210 ETL_CONSTEXPR14 ETL_TYPE_DEF_RETURN(T, TValue, type_def&)
operator&=(T rhs)ETL_NOEXCEPT
212 value &=
static_cast<TValue
>(rhs);
217 ETL_CONSTEXPR14 type_def&
operator&=(
const type_def& rhs) ETL_NOEXCEPT
224 template <
typename T>
225 ETL_CONSTEXPR14 ETL_TYPE_DEF_RETURN(T, TValue, type_def&)
operator|=(T rhs)ETL_NOEXCEPT
227 value |=
static_cast<TValue
>(rhs);
232 ETL_CONSTEXPR14 type_def&
operator|=(
const type_def& rhs) ETL_NOEXCEPT
239 template <
typename T>
240 ETL_CONSTEXPR14 ETL_TYPE_DEF_RETURN(T, TValue, type_def&)
operator^=(T rhs)ETL_NOEXCEPT
242 value ^=
static_cast<TValue
>(rhs);
247 ETL_CONSTEXPR14 type_def&
operator^=(
const type_def& rhs) ETL_NOEXCEPT
254 template <
typename T>
255 ETL_CONSTEXPR14
typename etl::enable_if<etl::is_integral<T>::value, type_def&>::type
operator<<=(T rhs) ETL_NOEXCEPT
257 value <<= static_cast<TValue>(rhs);
262 template <
typename T>
263 ETL_CONSTEXPR14
typename etl::enable_if<etl::is_integral<T>::value, type_def&>::type
operator>>=(T rhs) ETL_NOEXCEPT
265 value >>=
static_cast<TValue
>(rhs);
271 ETL_CONSTEXPR14 type_def& operator=(
const type_def& rhs) =
default;
275 TValue&
get() ETL_NOEXCEPT
281 ETL_CONSTEXPR
const TValue&
get()
const ETL_NOEXCEPT
289 template <
typename T>
290 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator+(
const type_def & lhs, T rhs) ETL_NOEXCEPT
292 return type_def(lhs.value +
static_cast<TValue
>(rhs));
296 template <
typename T>
297 friend ETL_CONSTEXPR type_def
operator+(T lhs,
const type_def& rhs) ETL_NOEXCEPT
299 return type_def(
static_cast<TValue
>(lhs) + rhs.value);
303 friend ETL_CONSTEXPR type_def
operator+(
const type_def& lhs,
const type_def& rhs)
305 return type_def(lhs.value + rhs.value);
311 template <
typename T>
312 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator-(
const type_def & lhs, T rhs) ETL_NOEXCEPT
314 return type_def(lhs.value -
static_cast<TValue
>(rhs));
318 template <
typename T>
319 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator-(T lhs,
const type_def & rhs) ETL_NOEXCEPT
321 return type_def(
static_cast<TValue
>(lhs) - rhs.value);
325 friend ETL_CONSTEXPR type_def
operator-(
const type_def& lhs,
const type_def& rhs) ETL_NOEXCEPT
327 return type_def(lhs.value - rhs.value);
333 template <
typename T>
334 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator*(
const type_def & lhs, T rhs) ETL_NOEXCEPT
336 return type_def(lhs.value *
static_cast<TValue
>(rhs));
340 template <
typename T>
341 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator*(T lhs,
const type_def & rhs) ETL_NOEXCEPT
343 return type_def(
static_cast<TValue
>(lhs) * rhs.value);
347 friend ETL_CONSTEXPR type_def
operator*(
const type_def& lhs,
const type_def& rhs) ETL_NOEXCEPT
349 return type_def(lhs.value * rhs.value);
355 template <
typename T>
356 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator/(
const type_def & lhs, T rhs) ETL_NOEXCEPT
358 return type_def(lhs.value /
static_cast<TValue
>(rhs));
362 template <
typename T>
363 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator/(T lhs,
const type_def & rhs) ETL_NOEXCEPT
365 return type_def(
static_cast<TValue
>(lhs) / rhs.value);
369 friend ETL_CONSTEXPR type_def
operator/(
const type_def& lhs,
const type_def& rhs) ETL_NOEXCEPT
371 return type_def(lhs.value / rhs.value);
375 template <
typename T>
376 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator%(
const type_def & lhs, T rhs) ETL_NOEXCEPT
378 return type_def(lhs.value %
static_cast<TValue
>(rhs));
384 template <
typename T>
385 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator%(T lhs,
const type_def & rhs) ETL_NOEXCEPT
387 return type_def(
static_cast<TValue
>(lhs) % rhs.value);
391 friend ETL_CONSTEXPR type_def
operator%(
const type_def& lhs,
const type_def& rhs)
393 return type_def(lhs.value % rhs.value);
399 template <
typename T>
400 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator&(
const type_def & lhs, T rhs) ETL_NOEXCEPT
402 return type_def(lhs.value &
static_cast<TValue
>(rhs));
406 template <
typename T>
407 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator&(T lhs,
const type_def & rhs) ETL_NOEXCEPT
409 return type_def(
static_cast<TValue
>(lhs) & rhs.value);
413 friend ETL_CONSTEXPR type_def
operator&(
const type_def& lhs,
const type_def& rhs) ETL_NOEXCEPT
415 return type_def(lhs.value & rhs.value);
421 template <
typename T>
422 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator|(
const type_def & lhs, T rhs) ETL_NOEXCEPT
424 return type_def(lhs.value |
static_cast<TValue
>(rhs));
428 template <
typename T>
429 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator|(T lhs,
const type_def & rhs) ETL_NOEXCEPT
431 return type_def(
static_cast<TValue
>(lhs) | rhs.value);
435 friend ETL_CONSTEXPR type_def
operator|(
const type_def& lhs,
const type_def& rhs) ETL_NOEXCEPT
437 return type_def(lhs.value | rhs.value);
443 template <
typename T>
444 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator^(
const type_def & lhs, T rhs) ETL_NOEXCEPT
446 return type_def(lhs.value ^
static_cast<TValue
>(rhs));
450 template <
typename T>
451 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue, type_def)
operator^(T lhs,
const type_def & rhs) ETL_NOEXCEPT
453 return type_def(
static_cast<TValue
>(lhs) ^ rhs.value);
457 friend ETL_CONSTEXPR type_def
operator^(
const type_def& lhs,
const type_def& rhs) ETL_NOEXCEPT
459 return type_def(lhs.value ^ rhs.value);
465 template <
typename T>
466 friend ETL_CONSTEXPR
typename etl::enable_if<etl::is_integral<T>::value, type_def>::type
operator<<(
const type_def& lhs, T rhs) ETL_NOEXCEPT
468 return type_def(lhs.value <<
static_cast<TValue
>(rhs));
472 template <
typename T>
473 friend ETL_CONSTEXPR
typename etl::enable_if< (etl::is_integral<T>::value && etl::is_integral<TValue>::value), T>::type
474 operator<<(T lhs,
const type_def& rhs) ETL_NOEXCEPT
476 return lhs << rhs.value;
482 template <
typename T>
483 friend ETL_CONSTEXPR
typename etl::enable_if<etl::is_integral<T>::value, type_def>::type
operator>>(
const type_def& lhs, T rhs) ETL_NOEXCEPT
485 return type_def(lhs.value >>
static_cast<TValue
>(rhs));
489 template <
typename T>
490 friend ETL_CONSTEXPR
typename etl::enable_if< (etl::is_integral<T>::value && etl::is_integral<TValue>::value), T>::type
491 operator>>(T lhs,
const type_def& rhs) ETL_NOEXCEPT
493 return lhs >> rhs.value;
499 template <
typename T>
500 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue,
bool)
operator<(
const type_def & lhs, T rhs) ETL_NOEXCEPT
502 return lhs.value < rhs;
506 template <
typename T>
507 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue,
bool)
operator<(T lhs,
const type_def & rhs) ETL_NOEXCEPT
509 return lhs < rhs.value;
513 friend ETL_CONSTEXPR
bool operator<(
const type_def& lhs,
const type_def& rhs) ETL_NOEXCEPT
515 return lhs.value < rhs.value;
521 template <
typename T>
522 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue,
bool)
operator<=(
const type_def & lhs, T rhs) ETL_NOEXCEPT
524 return lhs.value <= rhs;
528 template <
typename T>
529 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue,
bool)
operator<=(T lhs,
const type_def & rhs) ETL_NOEXCEPT
531 return lhs <= rhs.value;
535 friend ETL_CONSTEXPR
bool operator<=(
const type_def& lhs,
const type_def& rhs) ETL_NOEXCEPT
537 return lhs.value <= rhs.value;
543 template <
typename T>
544 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue,
bool)
operator>(
const type_def & lhs, T rhs) ETL_NOEXCEPT
546 return lhs.value > rhs;
550 template <
typename T>
551 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue,
bool)
operator>(T lhs,
const type_def & rhs) ETL_NOEXCEPT
553 return lhs > rhs.value;
557 friend ETL_CONSTEXPR
bool operator>(
const type_def& lhs,
const type_def& rhs) ETL_NOEXCEPT
559 return lhs.value > rhs.value;
565 template <
typename T>
566 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue,
bool)
operator>=(
const type_def & lhs, T rhs) ETL_NOEXCEPT
568 return lhs.value >= rhs;
572 template <
typename T>
573 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue,
bool)
operator>=(T lhs,
const type_def & rhs) ETL_NOEXCEPT
575 return lhs >= rhs.value;
579 friend ETL_CONSTEXPR
bool operator>=(
const type_def& lhs,
const type_def& rhs)
581 return lhs.value >= rhs.value;
587 template <
typename T>
588 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue,
bool)
operator==(
const type_def & lhs, T rhs) ETL_NOEXCEPT
590 return lhs.value == rhs;
594 template <
typename T>
595 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue,
bool)
operator==(T lhs,
const type_def & rhs)
597 return lhs == rhs.value;
601 friend ETL_CONSTEXPR
bool operator==(
const type_def& lhs,
const type_def& rhs) ETL_NOEXCEPT
603 return lhs.value == rhs.value;
609 template <
typename T>
610 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue,
bool)
operator!=(
const type_def & lhs, T rhs) ETL_NOEXCEPT
612 return lhs.value != rhs;
616 template <
typename T>
617 friend ETL_CONSTEXPR ETL_TYPE_DEF_RETURN(T, TValue,
bool)
operator!=(T lhs,
const type_def & rhs) ETL_NOEXCEPT
619 return lhs != rhs.value;
623 friend ETL_CONSTEXPR
bool operator!=(
const type_def& lhs,
const type_def& rhs) ETL_NOEXCEPT
625 return lhs.value != rhs.value;