Bitcoin Core 22.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
17uint16_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
24uint32_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
31uint64_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
38void static inline WriteLE16(unsigned char* ptr, uint16_t x)
39{
40 uint16_t v = htole16(x);
41 memcpy(ptr, (char*)&v, 2);
42}
43
44void static inline WriteLE32(unsigned char* ptr, uint32_t x)
45{
46 uint32_t v = htole32(x);
47 memcpy(ptr, (char*)&v, 4);
48}
49
50void static inline WriteLE64(unsigned char* ptr, uint64_t x)
51{
52 uint64_t v = htole64(x);
53 memcpy(ptr, (char*)&v, 8);
54}
55
56uint16_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
63uint32_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
70uint64_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
77void static inline WriteBE32(unsigned char* ptr, uint32_t x)
78{
79 uint32_t v = htobe32(x);
80 memcpy(ptr, (char*)&v, 4);
81}
82
83void static inline WriteBE64(unsigned char* ptr, uint64_t x)
84{
85 uint64_t v = htobe64(x);
86 memcpy(ptr, (char*)&v, 8);
87}
88
90uint64_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
static uint16_t ReadLE16(const unsigned char *ptr)
Definition: common.h:17
static void WriteLE16(unsigned char *ptr, uint16_t x)
Definition: common.h:38
static uint64_t ReadBE64(const unsigned char *ptr)
Definition: common.h:70
static uint64_t ReadLE64(const unsigned char *ptr)
Definition: common.h:31
static uint16_t ReadBE16(const unsigned char *ptr)
Definition: common.h:56
static uint32_t ReadLE32(const unsigned char *ptr)
Definition: common.h:24
static void WriteBE32(unsigned char *ptr, uint32_t x)
Definition: common.h:77
static void WriteLE32(unsigned char *ptr, uint32_t x)
Definition: common.h:44
static void WriteBE64(unsigned char *ptr, uint64_t x)
Definition: common.h:83
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
static uint32_t ReadBE32(const unsigned char *ptr)
Definition: common.h:63
static void WriteLE64(unsigned char *ptr, uint64_t x)
Definition: common.h:50
uint16_t be16toh(uint16_t big_endian_16bits)
Definition: endian.h:170
uint32_t le32toh(uint32_t little_endian_32bits)
Definition: endian.h:205
uint32_t htobe32(uint32_t host_32bits)
Definition: endian.h:184
uint16_t le16toh(uint16_t little_endian_16bits)
Definition: endian.h:177
uint64_t htobe64(uint64_t host_64bits)
Definition: endian.h:212
uint64_t be64toh(uint64_t big_endian_64bits)
Definition: endian.h:226
uint32_t be32toh(uint32_t big_endian_32bits)
Definition: endian.h:198
uint64_t htole64(uint64_t host_64bits)
Definition: endian.h:219
uint32_t htole32(uint32_t host_32bits)
Definition: endian.h:191
uint16_t htole16(uint16_t host_16bits)
Definition: endian.h:163
uint64_t le64toh(uint64_t little_endian_64bits)
Definition: endian.h:233