7 #ifndef CPPWAMP_ENDIAN_HPP
8 #define CPPWAMP_ENDIAN_HPP
12 #if defined(__has_include) && __has_include(<bit>)
14 #ifdef __cpp_lib_endian
15 #define CPPWAMP_HAS_STD_ENDIAN
28 inline uint32_t flip(uint32_t n)
31 return ((n & 0xFF000000u) >> 24u) | ((n & 0x00FF0000u) >> 8u) |
32 ((n & 0x0000FF00u) << 8u) | ((n & 0x0000000FF) << 24u);
35 constexpr
bool nativeIsLittle()
37 #ifdef CPPWAMP_HAS_STD_ENDIAN
38 return (std::endian::native == std::endian::little);
39 #elif defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__)
40 return __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__;
43 #elif defined(CPPWAMP_ASSUME_LITTLE_ENDIAN)
45 #elif defined(CPPWAMP_ASSUME_BIG_ENDIAN)
48 #warning Cannot detect endianness; assuming little endian
49 #warning Please define either CPPWAMP_ASSUME_LITTLE_ENDIAN or CPPWAMP_ASSUME_BIG_ENDIAN
54 inline uint32_t nativeToBig32(uint32_t native)
56 return nativeIsLittle() ? flip(native) : native;
59 inline uint32_t bigToNative32(uint32_t big)
61 return nativeIsLittle() ? flip(big) : big;
72 #endif // CPPWAMP_ENDIAN_HPP