Branch data Line data Source code
1 : : // Copyright (c) 2019-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_SCRIPT_KEYORIGIN_H
6 : : #define BITCOIN_SCRIPT_KEYORIGIN_H
7 : :
8 : : #include <serialize.h>
9 : : #include <vector>
10 : :
11 [ + - ][ - - : 28581559 : struct KeyOriginInfo
- - - - -
- - - ][ +
- + - + -
+ - - + +
- + - + -
+ - ][ - -
+ - + - -
- - - + -
+ - # # #
# ][ - - -
- + + - -
# # # # #
# ][ + - +
- + - + -
+ - + + +
+ + + + -
+ + ][ # #
# # # # #
# # # # #
# # # # #
# # # ]
[ + - - - ]
12 : : {
13 : : unsigned char fingerprint[4]; //!< First 32 bits of the Hash160 of the public key at the root of the path
14 : : std::vector<uint32_t> path;
15 : :
16 : 24 : friend bool operator==(const KeyOriginInfo& a, const KeyOriginInfo& b)
17 : : {
18 [ + - - + ]: 24 : return std::equal(std::begin(a.fingerprint), std::end(a.fingerprint), std::begin(b.fingerprint)) && a.path == b.path;
19 : : }
20 : :
21 : 297743 : friend bool operator<(const KeyOriginInfo& a, const KeyOriginInfo& b)
22 : : {
23 : : // Compare the fingerprints lexicographically
24 : 297743 : int fpr_cmp = memcmp(a.fingerprint, b.fingerprint, 4);
25 [ + + ]: 297743 : if (fpr_cmp < 0) {
26 : : return true;
27 [ + + ]: 196845 : } else if (fpr_cmp > 0) {
28 : : return false;
29 : : }
30 : : // Compare the sizes of the paths, shorter is "less than"
31 [ - + - + : 142043 : if (a.path.size() < b.path.size()) {
+ + ]
32 : : return true;
33 [ + + ]: 133430 : } else if (a.path.size() > b.path.size()) {
34 : : return false;
35 : : }
36 : : // Paths same length, compare them lexicographically
37 : 129795 : return a.path < b.path;
38 : : }
39 : :
40 : 28492 : SERIALIZE_METHODS(KeyOriginInfo, obj) { READWRITE(obj.fingerprint, obj.path); }
41 : :
42 : 11143 : void clear()
43 : : {
44 [ - + ]: 11143 : memset(fingerprint, 0, 4);
45 [ - + ]: 11143 : path.clear();
46 : 11143 : }
47 : : };
48 : :
49 : : #endif // BITCOIN_SCRIPT_KEYORIGIN_H
|