Address #17 (only)

This commit is contained in:
Caroline Joy Bell 2025-03-04 02:00:50 -08:00
parent 2991a3b698
commit 68543c53c0

View File

@ -2,24 +2,31 @@
#include <cassert> #include <cassert>
template<typename T> #ifdef __clang__
inline T ByteSwap(T value) #define _byte_swap16(value) __builtin_bswap16(static_cast<uint16_t>(value))
#define _byte_swap32(value) __builtin_bswap32(static_cast<uint32_t>(value))
#define _byte_swap64(value) __builtin_bswap64(static_cast<uint64_t>(value))
#elif defined(_MSC_VER)
#define _byte_swap16(value) _byteswap_ushort(static_cast<uint16_t>(value))
#define _byte_swap32(value) _byteswap_ulong(static_cast<uint32_t>(value))
#define _byte_swap64(value) _byteswap_uint64(static_cast<uint64_t>(value))
#endif
template<typename T> T ByteSwap(T value)
{ {
if constexpr (sizeof(T) == 1) if constexpr (sizeof(T) == 1)
return value; return value;
else if constexpr (sizeof(T) == 2) if constexpr (sizeof(T) == 2)
return static_cast<T>(__builtin_bswap16(static_cast<uint16_t>(value))); return static_cast<T>(_byte_swap16(value));
else if constexpr (sizeof(T) == 4) if constexpr (sizeof(T) == 4)
return static_cast<T>(__builtin_bswap32(static_cast<uint32_t>(value))); return static_cast<T>(_byte_swap32(value));
else if constexpr (sizeof(T) == 8) if constexpr (sizeof(T) == 8)
return static_cast<T>(__builtin_bswap64(static_cast<uint64_t>(value))); return static_cast<T>(_byte_swap64(value));
assert(false && "Unexpected byte size."); assert(false && "Unexpected byte size.");
return value;
} }
template<typename T> template<typename T> void ByteSwapInplace(T& value)
inline void ByteSwapInplace(T& value)
{ {
value = ByteSwap(value); value = ByteSwap(value);
} }