Line data Source code
1 : // Copyright (c) 2014-2015 The Bitcoin Core developers 2 : // Distributed under the MIT software license, see the accompanying 3 : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 4 : 5 : #ifndef BITCOIN_COMPAT_ENDIAN_H 6 : #define BITCOIN_COMPAT_ENDIAN_H 7 : 8 : #include <compat/byteswap.h> 9 : 10 : #include <bit> 11 : #include <cstdint> 12 : 13 : inline BSWAP_CONSTEXPR uint16_t htobe16_internal(uint16_t host_16bits) 14 : { 15 : if constexpr (std::endian::native == std::endian::little) return internal_bswap_16(host_16bits); 16 : else return host_16bits; 17 : } 18 147675 : inline BSWAP_CONSTEXPR uint16_t htole16_internal(uint16_t host_16bits) 19 : { 20 : if constexpr (std::endian::native == std::endian::big) return internal_bswap_16(host_16bits); 21 147675 : else return host_16bits; 22 : } 23 1375 : inline BSWAP_CONSTEXPR uint16_t be16toh_internal(uint16_t big_endian_16bits) 24 : { 25 1375 : if constexpr (std::endian::native == std::endian::little) return internal_bswap_16(big_endian_16bits); 26 : else return big_endian_16bits; 27 : } 28 545366 : inline BSWAP_CONSTEXPR uint16_t le16toh_internal(uint16_t little_endian_16bits) 29 : { 30 : if constexpr (std::endian::native == std::endian::big) return internal_bswap_16(little_endian_16bits); 31 545366 : else return little_endian_16bits; 32 : } 33 42332493 : inline BSWAP_CONSTEXPR uint32_t htobe32_internal(uint32_t host_32bits) 34 : { 35 42332493 : if constexpr (std::endian::native == std::endian::little) return internal_bswap_32(host_32bits); 36 : else return host_32bits; 37 : } 38 199383472 : inline BSWAP_CONSTEXPR uint32_t htole32_internal(uint32_t host_32bits) 39 : { 40 : if constexpr (std::endian::native == std::endian::big) return internal_bswap_32(host_32bits); 41 199383472 : else return host_32bits; 42 : } 43 175266316 : inline BSWAP_CONSTEXPR uint32_t be32toh_internal(uint32_t big_endian_32bits) 44 : { 45 175266316 : if constexpr (std::endian::native == std::endian::little) return internal_bswap_32(big_endian_32bits); 46 : else return big_endian_32bits; 47 : } 48 321569302 : inline BSWAP_CONSTEXPR uint32_t le32toh_internal(uint32_t little_endian_32bits) 49 : { 50 : if constexpr (std::endian::native == std::endian::big) return internal_bswap_32(little_endian_32bits); 51 321569302 : else return little_endian_32bits; 52 : } 53 123952325 : inline BSWAP_CONSTEXPR uint64_t htobe64_internal(uint64_t host_64bits) 54 : { 55 123952325 : if constexpr (std::endian::native == std::endian::little) return internal_bswap_64(host_64bits); 56 : else return host_64bits; 57 : } 58 12028967 : inline BSWAP_CONSTEXPR uint64_t htole64_internal(uint64_t host_64bits) 59 : { 60 : if constexpr (std::endian::native == std::endian::big) return internal_bswap_64(host_64bits); 61 12028967 : else return host_64bits; 62 : } 63 232287909 : inline BSWAP_CONSTEXPR uint64_t be64toh_internal(uint64_t big_endian_64bits) 64 : { 65 232287909 : if constexpr (std::endian::native == std::endian::little) return internal_bswap_64(big_endian_64bits); 66 : else return big_endian_64bits; 67 : } 68 275601977 : inline BSWAP_CONSTEXPR uint64_t le64toh_internal(uint64_t little_endian_64bits) 69 : { 70 : if constexpr (std::endian::native == std::endian::big) return internal_bswap_64(little_endian_64bits); 71 275601977 : else return little_endian_64bits; 72 : } 73 : 74 : #endif // BITCOIN_COMPAT_ENDIAN_H