diff options
Diffstat (limited to 'src/common/swap.h')
| -rw-r--r-- | src/common/swap.h | 46 |
1 files changed, 4 insertions, 42 deletions
diff --git a/src/common/swap.h b/src/common/swap.h index 71932c2bb..7665942a2 100644 --- a/src/common/swap.h +++ b/src/common/swap.h | |||
| @@ -17,43 +17,14 @@ | |||
| 17 | 17 | ||
| 18 | #pragma once | 18 | #pragma once |
| 19 | 19 | ||
| 20 | #include <type_traits> | ||
| 21 | |||
| 22 | #if defined(_MSC_VER) | 20 | #if defined(_MSC_VER) |
| 23 | #include <cstdlib> | 21 | #include <cstdlib> |
| 24 | #endif | 22 | #endif |
| 23 | #include <bit> | ||
| 25 | #include <cstring> | 24 | #include <cstring> |
| 25 | #include <type_traits> | ||
| 26 | #include "common/common_types.h" | 26 | #include "common/common_types.h" |
| 27 | 27 | ||
| 28 | // GCC | ||
| 29 | #ifdef __GNUC__ | ||
| 30 | |||
| 31 | #if __BYTE_ORDER__ && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) && !defined(COMMON_LITTLE_ENDIAN) | ||
| 32 | #define COMMON_LITTLE_ENDIAN 1 | ||
| 33 | #elif __BYTE_ORDER__ && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__) && !defined(COMMON_BIG_ENDIAN) | ||
| 34 | #define COMMON_BIG_ENDIAN 1 | ||
| 35 | #endif | ||
| 36 | |||
| 37 | // LLVM/clang | ||
| 38 | #elif defined(__clang__) | ||
| 39 | |||
| 40 | #if __LITTLE_ENDIAN__ && !defined(COMMON_LITTLE_ENDIAN) | ||
| 41 | #define COMMON_LITTLE_ENDIAN 1 | ||
| 42 | #elif __BIG_ENDIAN__ && !defined(COMMON_BIG_ENDIAN) | ||
| 43 | #define COMMON_BIG_ENDIAN 1 | ||
| 44 | #endif | ||
| 45 | |||
| 46 | // MSVC | ||
| 47 | #elif defined(_MSC_VER) && !defined(COMMON_BIG_ENDIAN) && !defined(COMMON_LITTLE_ENDIAN) | ||
| 48 | |||
| 49 | #define COMMON_LITTLE_ENDIAN 1 | ||
| 50 | #endif | ||
| 51 | |||
| 52 | // Worst case, default to little endian. | ||
| 53 | #if !COMMON_BIG_ENDIAN && !COMMON_LITTLE_ENDIAN | ||
| 54 | #define COMMON_LITTLE_ENDIAN 1 | ||
| 55 | #endif | ||
| 56 | |||
| 57 | namespace Common { | 28 | namespace Common { |
| 58 | 29 | ||
| 59 | #ifdef _MSC_VER | 30 | #ifdef _MSC_VER |
| @@ -675,17 +646,8 @@ struct AddEndian<T, SwapTag> { | |||
| 675 | }; | 646 | }; |
| 676 | 647 | ||
| 677 | // Alias LETag/BETag as KeepTag/SwapTag depending on the system | 648 | // Alias LETag/BETag as KeepTag/SwapTag depending on the system |
| 678 | #if COMMON_LITTLE_ENDIAN | 649 | using LETag = std::conditional_t<std::endian::native == std::endian::little, KeepTag, SwapTag>; |
| 679 | 650 | using BETag = std::conditional_t<std::endian::native == std::endian::big, KeepTag, SwapTag>; | |
| 680 | using LETag = KeepTag; | ||
| 681 | using BETag = SwapTag; | ||
| 682 | |||
| 683 | #else | ||
| 684 | |||
| 685 | using BETag = KeepTag; | ||
| 686 | using LETag = SwapTag; | ||
| 687 | |||
| 688 | #endif | ||
| 689 | 651 | ||
| 690 | // Aliases for LE types | 652 | // Aliases for LE types |
| 691 | using u16_le = AddEndian<u16, LETag>::type; | 653 | using u16_le = AddEndian<u16, LETag>::type; |