1 // Copyright (c) 2020-2021 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: BaseHash()15 BaseHash() : m_hash() {} BaseHash(const HashType & in)16 explicit BaseHash(const HashType& in) : m_hash(in) {} 17 begin()18 unsigned char* begin() 19 { 20 return m_hash.begin(); 21 } 22 begin()23 const unsigned char* begin() const 24 { 25 return m_hash.begin(); 26 } 27 end()28 unsigned char* end() 29 { 30 return m_hash.end(); 31 } 32 end()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 ToString()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 bool operator<(const BaseHash<HashType>& other) const noexcept 59 { 60 return m_hash < other.m_hash; 61 } 62 size()63 size_t size() const 64 { 65 return m_hash.size(); 66 } 67 data()68 unsigned char* data() { return m_hash.data(); } data()69 const unsigned char* data() const { return m_hash.data(); } 70 }; 71 72 #endif // BITCOIN_UTIL_HASH_TYPE_H 73