From d856f3f5bd938a8d522aec30d0616622410a6f60 Mon Sep 17 00:00:00 2001 From: chaoticgd <43898262+chaoticgd@users.noreply.github.com> Date: Mon, 16 Mar 2026 22:37:04 +0000 Subject: [PATCH] HeapArray: Fix comparison operators --- common/HeapArray.h | 50 +++++++++++++++------------------------------- 1 file changed, 16 insertions(+), 34 deletions(-) diff --git a/common/HeapArray.h b/common/HeapArray.h index 8b1a5eb3ae..367256ddf6 100644 --- a/common/HeapArray.h +++ b/common/HeapArray.h @@ -87,24 +87,15 @@ public: return *this; } -#define RELATIONAL_OPERATOR(op) \ - bool operator op(const this_type& rhs) const \ - { \ - for (size_type i = 0; i < SIZE; i++) \ - { \ - if (!(m_data[i] op rhs.m_data[i])) \ - return false; \ - } \ + bool operator==(const this_type& rhs) const + { + return std::equal(m_data, m_data + SIZE, rhs.m_data, rhs.m_data + SIZE); } - RELATIONAL_OPERATOR(==); - RELATIONAL_OPERATOR(!=); - RELATIONAL_OPERATOR(<); - RELATIONAL_OPERATOR(<=); - RELATIONAL_OPERATOR(>); - RELATIONAL_OPERATOR(>=); - -#undef RELATIONAL_OPERATOR + auto operator<=>(const this_type& rhs) const + { + return std::lexicographical_compare_three_way(m_data, m_data + SIZE, rhs.m_data, rhs.m_data + SIZE); + } private: void allocate() @@ -337,26 +328,17 @@ public: return *this; } -#define RELATIONAL_OPERATOR(op, size_op) \ - bool operator op(const this_type& rhs) const \ - { \ - if (m_size != rhs.m_size) \ - return m_size size_op rhs.m_size; \ - for (size_type i = 0; i < m_size; i++) \ - { \ - if (!(m_data[i] op rhs.m_data[i])) \ - return false; \ - } \ + bool operator==(const this_type& rhs) const + { + return std::equal(m_data, m_data + m_size, rhs.m_data, rhs.m_data + rhs.m_size); } - RELATIONAL_OPERATOR(==, !=); - RELATIONAL_OPERATOR(!=, ==); - RELATIONAL_OPERATOR(<, <); - RELATIONAL_OPERATOR(<=, <=); - RELATIONAL_OPERATOR(>, >); - RELATIONAL_OPERATOR(>=, >=); - -#undef RELATIONAL_OPERATOR + auto operator<=>(const this_type& rhs) const + { + return std::lexicographical_compare_three_way( + m_data, m_data + m_size, + rhs.m_data, rhs.m_data + rhs.m_size); + } private: void internal_resize(size_t size, T* prev_ptr, size_t prev_size)