Merge pull request #10833 from obsidiansystems/hash-ordering

Modernize `Hash` ordering with C++20 `<=>`
This commit is contained in:
John Ericson 2024-06-03 09:50:04 -04:00 committed by GitHub
commit 4e62629a2d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 8 additions and 20 deletions

View file

@ -50,21 +50,14 @@ bool Hash::operator == (const Hash & h2) const
} }
bool Hash::operator != (const Hash & h2) const std::strong_ordering Hash::operator <=> (const Hash & h) const
{ {
return !(*this == h2); if (auto cmp = algo <=> h.algo; cmp != 0) return cmp;
} if (auto cmp = hashSize <=> h.hashSize; cmp != 0) return cmp;
bool Hash::operator < (const Hash & h) const
{
if (hashSize < h.hashSize) return true;
if (hashSize > h.hashSize) return false;
for (unsigned int i = 0; i < hashSize; i++) { for (unsigned int i = 0; i < hashSize; i++) {
if (hash[i] < h.hash[i]) return true; if (auto cmp = hash[i] <=> h.hash[i]; cmp != 0) return cmp;
if (hash[i] > h.hash[i]) return false;
} }
return false; return std::strong_ordering::equivalent;
} }

View file

@ -86,19 +86,14 @@ private:
public: public:
/** /**
* Check whether two hash are equal. * Check whether two hashes are equal.
*/ */
bool operator == (const Hash & h2) const; bool operator == (const Hash & h2) const;
/** /**
* Check whether two hash are not equal. * Compare how two hashes are ordered.
*/ */
bool operator != (const Hash & h2) const; std::strong_ordering operator <=> (const Hash & h2) const;
/**
* For sorting.
*/
bool operator < (const Hash & h) const;
/** /**
* Returns the length of a base-16 representation of this hash. * Returns the length of a base-16 representation of this hash.