common/swap: Make use of std::endian
Allows removing a bunch of defines in favor of a two liner.
This commit is contained in:
parent
b2305dcee0
commit
9f027b1af2
|
@ -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