Bitcoin Core  21.99.0
P2P Digital Currency
common.h
Go to the documentation of this file.
1 // Copyright (c) 2014-2020 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_CRYPTO_COMMON_H
6 #define BITCOIN_CRYPTO_COMMON_H
7 
8 #if defined(HAVE_CONFIG_H)
10 #endif
11 
12 #include <stdint.h>
13 #include <string.h>
14 
15 #include <compat/endian.h>
16 
17 uint16_t static inline ReadLE16(const unsigned char* ptr)
18 {
19  uint16_t x;
20  memcpy((char*)&x, ptr, 2);
21  return le16toh(x);
22 }
23 
24 uint32_t static inline ReadLE32(const unsigned char* ptr)
25 {
26  uint32_t x;
27  memcpy((char*)&x, ptr, 4);
28  return le32toh(x);
29 }
30 
31 uint64_t static inline ReadLE64(const unsigned char* ptr)
32 {
33  uint64_t x;
34  memcpy((char*)&x, ptr, 8);
35  return le64toh(x);
36 }
37 
38 void static inline WriteLE16(unsigned char* ptr, uint16_t x)
39 {
40  uint16_t v = htole16(x);
41  memcpy(ptr, (char*)&v, 2);
42 }
43 
44 void static inline WriteLE32(unsigned char* ptr, uint32_t x)
45 {
46  uint32_t v = htole32(x);
47  memcpy(ptr, (char*)&v, 4);
48 }
49 
50 void static inline WriteLE64(unsigned char* ptr, uint64_t x)
51 {
52  uint64_t v = htole64(x);
53  memcpy(ptr, (char*)&v, 8);
54 }
55 
56 uint16_t static inline ReadBE16(const unsigned char* ptr)
57 {
58  uint16_t x;
59  memcpy((char*)&x, ptr, 2);
60  return be16toh(x);
61 }
62 
63 uint32_t static inline ReadBE32(const unsigned char* ptr)
64 {
65  uint32_t x;
66  memcpy((char*)&x, ptr, 4);
67  return be32toh(x);
68 }
69 
70 uint64_t static inline ReadBE64(const unsigned char* ptr)
71 {
72  uint64_t x;
73  memcpy((char*)&x, ptr, 8);
74  return be64toh(x);
75 }
76 
77 void static inline WriteBE32(unsigned char* ptr, uint32_t x)
78 {
79  uint32_t v = htobe32(x);
80  memcpy(ptr, (char*)&v, 4);
81 }
82 
83 void static inline WriteBE64(unsigned char* ptr, uint64_t x)
84 {
85  uint64_t v = htobe64(x);
86  memcpy(ptr, (char*)&v, 8);
87 }
88 
90 uint64_t static inline CountBits(uint64_t x)
91 {
92 #if HAVE_BUILTIN_CLZL
93  if (sizeof(unsigned long) >= sizeof(uint64_t)) {
94  return x ? 8 * sizeof(unsigned long) - __builtin_clzl(x) : 0;
95  }
96 #endif
97 #if HAVE_BUILTIN_CLZLL
98  if (sizeof(unsigned long long) >= sizeof(uint64_t)) {
99  return x ? 8 * sizeof(unsigned long long) - __builtin_clzll(x) : 0;
100  }
101 #endif
102  int ret = 0;
103  while (x) {
104  x >>= 1;
105  ++ret;
106  }
107  return ret;
108 }
109 
110 #endif // BITCOIN_CRYPTO_COMMON_H
htole16
uint16_t htole16(uint16_t host_16bits)
Definition: endian.h:163
htole64
uint64_t htole64(uint64_t host_64bits)
Definition: endian.h:219
string.h
WriteLE32
static void WriteLE32(unsigned char *ptr, uint32_t x)
Definition: common.h:44
WriteLE64
static void WriteLE64(unsigned char *ptr, uint64_t x)
Definition: common.h:50
le32toh
uint32_t le32toh(uint32_t little_endian_32bits)
Definition: endian.h:205
ReadLE16
static uint16_t ReadLE16(const unsigned char *ptr)
Definition: common.h:17
WriteBE64
static void WriteBE64(unsigned char *ptr, uint64_t x)
Definition: common.h:83
bitcoin-config.h
ReadBE64
static uint64_t ReadBE64(const unsigned char *ptr)
Definition: common.h:70
be64toh
uint64_t be64toh(uint64_t big_endian_64bits)
Definition: endian.h:226
be32toh
uint32_t be32toh(uint32_t big_endian_32bits)
Definition: endian.h:198
ReadBE16
static uint16_t ReadBE16(const unsigned char *ptr)
Definition: common.h:56
ReadBE32
static uint32_t ReadBE32(const unsigned char *ptr)
Definition: common.h:63
le16toh
uint16_t le16toh(uint16_t little_endian_16bits)
Definition: endian.h:177
htobe32
uint32_t htobe32(uint32_t host_32bits)
Definition: endian.h:184
be16toh
uint16_t be16toh(uint16_t big_endian_16bits)
Definition: endian.h:170
WriteBE32
static void WriteBE32(unsigned char *ptr, uint32_t x)
Definition: common.h:77
htole32
uint32_t htole32(uint32_t host_32bits)
Definition: endian.h:191
CountBits
static uint64_t CountBits(uint64_t x)
Return the smallest number n such that (x >> n) == 0 (or 64 if the highest bit in x is set.
Definition: common.h:90
ReadLE64
static uint64_t ReadLE64(const unsigned char *ptr)
Definition: common.h:31
ReadLE32
static uint32_t ReadLE32(const unsigned char *ptr)
Definition: common.h:24
le64toh
uint64_t le64toh(uint64_t little_endian_64bits)
Definition: endian.h:233
WriteLE16
static void WriteLE16(unsigned char *ptr, uint16_t x)
Definition: common.h:38
htobe64
uint64_t htobe64(uint64_t host_64bits)
Definition: endian.h:212
endian.h