Merge pull request #4342 from lioncash/endian
common/swap: Make use of std::endian
This commit is contained in:
		| @@ -17,43 +17,14 @@ | |||||||
|  |  | ||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
| #include <type_traits> |  | ||||||
|  |  | ||||||
| #if defined(_MSC_VER) | #if defined(_MSC_VER) | ||||||
| #include <cstdlib> | #include <cstdlib> | ||||||
| #endif | #endif | ||||||
|  | #include <bit> | ||||||
| #include <cstring> | #include <cstring> | ||||||
|  | #include <type_traits> | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
|  |  | ||||||
| // GCC |  | ||||||
| #ifdef __GNUC__ |  | ||||||
|  |  | ||||||
| #if __BYTE_ORDER__ && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && !defined(COMMON_LITTLE_ENDIAN) |  | ||||||
| #define COMMON_LITTLE_ENDIAN 1 |  | ||||||
| #elif __BYTE_ORDER__ && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) && !defined(COMMON_BIG_ENDIAN) |  | ||||||
| #define COMMON_BIG_ENDIAN 1 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| // LLVM/clang |  | ||||||
| #elif defined(__clang__) |  | ||||||
|  |  | ||||||
| #if __LITTLE_ENDIAN__ && !defined(COMMON_LITTLE_ENDIAN) |  | ||||||
| #define COMMON_LITTLE_ENDIAN 1 |  | ||||||
| #elif __BIG_ENDIAN__ && !defined(COMMON_BIG_ENDIAN) |  | ||||||
| #define COMMON_BIG_ENDIAN 1 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| // MSVC |  | ||||||
| #elif defined(_MSC_VER) && !defined(COMMON_BIG_ENDIAN) && !defined(COMMON_LITTLE_ENDIAN) |  | ||||||
|  |  | ||||||
| #define COMMON_LITTLE_ENDIAN 1 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| // Worst case, default to little endian. |  | ||||||
| #if !COMMON_BIG_ENDIAN && !COMMON_LITTLE_ENDIAN |  | ||||||
| #define COMMON_LITTLE_ENDIAN 1 |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| namespace Common { | namespace Common { | ||||||
|  |  | ||||||
| #ifdef _MSC_VER | #ifdef _MSC_VER | ||||||
| @@ -675,17 +646,8 @@ struct AddEndian<T, SwapTag> { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| // Alias LETag/BETag as KeepTag/SwapTag depending on the system | // Alias LETag/BETag as KeepTag/SwapTag depending on the system | ||||||
| #if COMMON_LITTLE_ENDIAN | using LETag = std::conditional_t<std::endian::native == std::endian::little, KeepTag, SwapTag>; | ||||||
|  | using BETag = std::conditional_t<std::endian::native == std::endian::big, KeepTag, SwapTag>; | ||||||
| using LETag = KeepTag; |  | ||||||
| using BETag = SwapTag; |  | ||||||
|  |  | ||||||
| #else |  | ||||||
|  |  | ||||||
| using BETag = KeepTag; |  | ||||||
| using LETag = SwapTag; |  | ||||||
|  |  | ||||||
| #endif |  | ||||||
|  |  | ||||||
| // Aliases for LE types | // Aliases for LE types | ||||||
| using u16_le = AddEndian<u16, LETag>::type; | using u16_le = AddEndian<u16, LETag>::type; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Rodrigo Locatti
					Rodrigo Locatti