hash_type.h raw
1 // Copyright (c) 2020-present 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_UTIL_HASH_TYPE_H
6 #define BITCOIN_UTIL_HASH_TYPE_H
7
8 template <typename HashType>
9 class BaseHash
10 {
11 protected:
12 HashType m_hash;
13
14 public:
15 BaseHash() : m_hash() {}
16 explicit BaseHash(const HashType& in) : m_hash(in) {}
17
18 unsigned char* begin()
19 {
20 return m_hash.begin();
21 }
22
23 const unsigned char* begin() const
24 {
25 return m_hash.begin();
26 }
27
28 unsigned char* end()
29 {
30 return m_hash.end();
31 }
32
33 const unsigned char* end() const
34 {
35 return m_hash.end();
36 }
37
38 operator std::vector<unsigned char>() const
39 {
40 return std::vector<unsigned char>{m_hash.begin(), m_hash.end()};
41 }
42
43 std::string ToString() const
44 {
45 return m_hash.ToString();
46 }
47
48 bool operator==(const BaseHash<HashType>& other) const noexcept
49 {
50 return m_hash == other.m_hash;
51 }
52
53 bool operator<(const BaseHash<HashType>& other) const noexcept
54 {
55 return m_hash < other.m_hash;
56 }
57
58 size_t size() const
59 {
60 return m_hash.size();
61 }
62
63 unsigned char* data() { return m_hash.data(); }
64 const unsigned char* data() const { return m_hash.data(); }
65 };
66
67 #endif // BITCOIN_UTIL_HASH_TYPE_H
68