Bitcoin ABC 0.32.5
P2P Digital Currency
endian.h
Go to the documentation of this file.
1// Copyright (c) 2014-2016 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
13inline BSWAP_CONSTEXPR uint16_t htobe16_internal(uint16_t host_16bits) {
14 if constexpr (std::endian::native == std::endian::little) {
15 return internal_bswap_16(host_16bits);
16 } else {
17 return host_16bits;
18 }
19}
20inline BSWAP_CONSTEXPR uint16_t htole16_internal(uint16_t host_16bits) {
21 if constexpr (std::endian::native == std::endian::big) {
22 return internal_bswap_16(host_16bits);
23 } else {
24 return host_16bits;
25 }
26}
27inline BSWAP_CONSTEXPR uint16_t be16toh_internal(uint16_t big_endian_16bits) {
28 if constexpr (std::endian::native == std::endian::little) {
29 return internal_bswap_16(big_endian_16bits);
30 } else {
31 return big_endian_16bits;
32 }
33}
34inline BSWAP_CONSTEXPR uint16_t
35le16toh_internal(uint16_t little_endian_16bits) {
36 if constexpr (std::endian::native == std::endian::big) {
37 return internal_bswap_16(little_endian_16bits);
38 } else {
39 return little_endian_16bits;
40 }
41}
42inline BSWAP_CONSTEXPR uint32_t htobe32_internal(uint32_t host_32bits) {
43 if constexpr (std::endian::native == std::endian::little) {
44 return internal_bswap_32(host_32bits);
45 } else {
46 return host_32bits;
47 }
48}
49inline BSWAP_CONSTEXPR uint32_t htole32_internal(uint32_t host_32bits) {
50 if constexpr (std::endian::native == std::endian::big) {
51 return internal_bswap_32(host_32bits);
52 } else {
53 return host_32bits;
54 }
55}
56inline BSWAP_CONSTEXPR uint32_t be32toh_internal(uint32_t big_endian_32bits) {
57 if constexpr (std::endian::native == std::endian::little) {
58 return internal_bswap_32(big_endian_32bits);
59 } else {
60 return big_endian_32bits;
61 }
62}
63inline BSWAP_CONSTEXPR uint32_t
64le32toh_internal(uint32_t little_endian_32bits) {
65 if constexpr (std::endian::native == std::endian::big) {
66 return internal_bswap_32(little_endian_32bits);
67 } else {
68 return little_endian_32bits;
69 }
70}
71inline BSWAP_CONSTEXPR uint64_t htobe64_internal(uint64_t host_64bits) {
72 if constexpr (std::endian::native == std::endian::little) {
73 return internal_bswap_64(host_64bits);
74 } else {
75 return host_64bits;
76 }
77}
78inline BSWAP_CONSTEXPR uint64_t htole64_internal(uint64_t host_64bits) {
79 if constexpr (std::endian::native == std::endian::big) {
80 return internal_bswap_64(host_64bits);
81 } else {
82 return host_64bits;
83 }
84}
85inline BSWAP_CONSTEXPR uint64_t be64toh_internal(uint64_t big_endian_64bits) {
86 if constexpr (std::endian::native == std::endian::little) {
87 return internal_bswap_64(big_endian_64bits);
88 } else {
89 return big_endian_64bits;
90 }
91}
92inline BSWAP_CONSTEXPR uint64_t
93le64toh_internal(uint64_t little_endian_64bits) {
94 if constexpr (std::endian::native == std::endian::big) {
95 return internal_bswap_64(little_endian_64bits);
96 } else {
97 return little_endian_64bits;
98 }
99}
100
101#endif // BITCOIN_COMPAT_ENDIAN_H
BSWAP_CONSTEXPR uint32_t internal_bswap_32(uint32_t x)
Definition: byteswap.h:51
BSWAP_CONSTEXPR uint16_t internal_bswap_16(uint16_t x)
Definition: byteswap.h:43
BSWAP_CONSTEXPR uint64_t internal_bswap_64(uint64_t x)
Definition: byteswap.h:60
#define BSWAP_CONSTEXPR
Definition: byteswap.h:38
BSWAP_CONSTEXPR uint32_t be32toh_internal(uint32_t big_endian_32bits)
Definition: endian.h:56
BSWAP_CONSTEXPR uint16_t be16toh_internal(uint16_t big_endian_16bits)
Definition: endian.h:27
BSWAP_CONSTEXPR uint64_t htobe64_internal(uint64_t host_64bits)
Definition: endian.h:71
BSWAP_CONSTEXPR uint16_t htobe16_internal(uint16_t host_16bits)
Definition: endian.h:13
BSWAP_CONSTEXPR uint32_t htole32_internal(uint32_t host_32bits)
Definition: endian.h:49
BSWAP_CONSTEXPR uint16_t htole16_internal(uint16_t host_16bits)
Definition: endian.h:20
BSWAP_CONSTEXPR uint64_t be64toh_internal(uint64_t big_endian_64bits)
Definition: endian.h:85
BSWAP_CONSTEXPR uint16_t le16toh_internal(uint16_t little_endian_16bits)
Definition: endian.h:35
BSWAP_CONSTEXPR uint64_t htole64_internal(uint64_t host_64bits)
Definition: endian.h:78
BSWAP_CONSTEXPR uint64_t le64toh_internal(uint64_t little_endian_64bits)
Definition: endian.h:93
BSWAP_CONSTEXPR uint32_t le32toh_internal(uint32_t little_endian_32bits)
Definition: endian.h:64
BSWAP_CONSTEXPR uint32_t htobe32_internal(uint32_t host_32bits)
Definition: endian.h:42