31#ifndef ETL_ENDIAN_INCLUDED
32#define ETL_ENDIAN_INCLUDED
40#if ETL_USING_CPP20 && ETL_USING_STL
49#if !defined(ETL_ENDIAN_NATIVE)
51 #if ETL_USING_CPP20 && ETL_USING_STL
52 #define ETL_ENDIAN_LITTLE static_cast<int>(std::endian::little)
53 #define ETL_ENDIAN_BIG static_cast<int>(std::endian::big)
54 #define ETL_ENDIAN_NATIVE static_cast<int>(std::endian::native)
56 #elif defined(ETL_COMPILER_IAR) && defined(__LITTLE_ENDIAN__)
57 #define ETL_ENDIAN_LITTLE 0
58 #define ETL_ENDIAN_BIG 1
59 #if __LITTLE_ENDIAN__ == 1
60 #define ETL_ENDIAN_NATIVE ETL_ENDIAN_LITTLE
61 #elif __LITTLE_ENDIAN__ == 0
62 #define ETL_ENDIAN_NATIVE ETL_ENDIAN_BIG
65 #elif defined(__BYTE_ORDER__)
67 #if defined(__ORDER_LITTLE_ENDIAN__)
68 #define ETL_ENDIAN_LITTLE __ORDER_LITTLE_ENDIAN__
69 #define ETL_ENDIAN_BIG __ORDER_BIG_ENDIAN__
70 #define ETL_ENDIAN_NATIVE __BYTE_ORDER__
71 #elif defined(__LITTLE_ENDIAN__)
72 #define ETL_ENDIAN_LITTLE __LITTLE_ENDIAN__
73 #define ETL_ENDIAN_BIG __BIG_ENDIAN__
74 #define ETL_ENDIAN_NATIVE __BYTE_ORDER__
78 #error Unable to determine native endianness at compile time. ETL_ENDIAN_NATIVE must be defined either as 0 for 'little endian' or 1 for 'big endian'.
82 #define ETL_ENDIAN_LITTLE 0
83 #define ETL_ENDIAN_BIG 1
87#if (ETL_USING_CPP11 && defined(ETL_ENDIAN_NATIVE))
88 #define ETL_HAS_CONSTEXPR_ENDIANNESS 1
90 #define ETL_HAS_CONSTEXPR_ENDIANNESS 0
108 ETL_DECLARE_ENUM_TYPE(
endian,
int)
109 ETL_ENUM_TYPE(little,
"little")
110 ETL_ENUM_TYPE(big,
"big")
125#if ETL_HAS_CONSTEXPR_ENDIANNESS
133#if ETL_HAS_CONSTEXPR_ENDIANNESS
144#if ETL_HAS_CONSTEXPR_ENDIANNESS
147 return etl::endian::native;
154 return (*
reinterpret_cast<const unsigned char*
>(&
i) == 0) ? etl::endian::little : etl::endian::big;
160 template <
typename T>
165 if (endianness::value() == endian::little)
176 template <
typename T>
181 if (endianness::value() == endian::little)
ETL_CONSTEXPR14 etl::enable_if< etl::is_integral< T >::value &&etl::is_unsigned< T >::value &&(etl::integral_limits< T >::bits==16U), T >::type reverse_bytes(T value)
Definition binary.h:739
Definition endianness.h:100
Definition endianness.h:119
bitset_ext
Definition absolute.h:38
pair holds two objects of arbitrary type
Definition utility.h:164