From 9665ab21c1daebd60c6571f639fda3d0ed92d2e1 Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Mon, 3 Jan 2022 18:22:08 +0000 Subject: [PATCH] Updated endianness for C++20 --- include/etl/endianness.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/include/etl/endianness.h b/include/etl/endianness.h index 99522171..14b48b8c 100644 --- a/include/etl/endianness.h +++ b/include/etl/endianness.h @@ -37,6 +37,10 @@ SOFTWARE. #include "enum_type.h" #include "binary.h" +#if ETL_CPP20_SUPPORTED && ETL_USING_STL + #include +#endif + ///\defgroup endian endian /// Constants & utilities for endianess ///\ingroup utilities @@ -49,12 +53,36 @@ namespace etl //*************************************************************************** struct endian { +#if ETL_CPP20_SUPPORTED && ETL_USING_STL + enum enum_type + { + little = static_cast(std::endian::little), + big = static_cast(std::endian::big), + native = static_cast(std::endian::native) + }; +#elif defined(__BYTE_ORDER__) + #if defined(__ORDER_LITTLE_ENDIAN__) + #defined ETL_LITTLE_ENDIAN __ORDER_LITTLE_ENDIAN__ + #defined ETL_BIG_ENDIAN __ORDER_BIG_ENDIAN__ + #elif defined(__LITTLE_ENDIAN__) + #defined ETL_LITTLE_ENDIAN __LITTLE_ENDIAN__ + #defined ETL_BIG_ENDIAN __BIG_ENDIAN__ + #endif + + enum enum_type + { + little = ETL_LITTLE_ENDIAN, + big = ETL_BIG_ENDIAN, + native = __BYTE_ORDER__ + }; +#else enum enum_type { little, big, native }; +#endif ETL_DECLARE_ENUM_TYPE(endian, int) ETL_ENUM_TYPE(little, "little")