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 1872368 : 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 1872368 : else return host_16bits; 22 : } 23 103351 : inline BSWAP_CONSTEXPR uint16_t be16toh_internal(uint16_t big_endian_16bits) 24 : { 25 103351 : if constexpr (std::endian::native == std::endian::little) return internal_bswap_16(big_endian_16bits); 26 : else return big_endian_16bits; 27 : } 28 4307435 : 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 4307435 : else return little_endian_16bits; 32 : } 33 266032746 : inline BSWAP_CONSTEXPR uint32_t htobe32_internal(uint32_t host_32bits) 34 : { 35 266032746 : if constexpr (std::endian::native == std::endian::little) return internal_bswap_32(host_32bits); 36 : else return host_32bits; 37 : } 38 412101638 : 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 412101638 : else return host_32bits; 42 : } 43 4777391963 : inline BSWAP_CONSTEXPR uint32_t be32toh_internal(uint32_t big_endian_32bits) 44 : { 45 4777391963 : if constexpr (std::endian::native == std::endian::little) return internal_bswap_32(big_endian_32bits); 46 : else return big_endian_32bits; 47 : } 48 725648138 : 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 725648138 : else return little_endian_32bits; 52 : } 53 2825454718 : inline BSWAP_CONSTEXPR uint64_t htobe64_internal(uint64_t host_64bits) 54 : { 55 2825454718 : if constexpr (std::endian::native == std::endian::little) return internal_bswap_64(host_64bits); 56 : else return host_64bits; 57 : } 58 130761920 : 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 130761920 : else return host_64bits; 62 : } 63 5217176232 : inline BSWAP_CONSTEXPR uint64_t be64toh_internal(uint64_t big_endian_64bits) 64 : { 65 5217176232 : if constexpr (std::endian::native == std::endian::little) return internal_bswap_64(big_endian_64bits); 66 : else return big_endian_64bits; 67 : } 68 1096819651 : 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 1096819651 : else return little_endian_64bits; 72 : } 73 : 74 : #endif // BITCOIN_COMPAT_ENDIAN_H