From 578e7c3dabcc54f302069e1bf86dace3f62ec00e Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 15 Aug 2025 12:37:47 +0200 Subject: Core/Utils: Added .contains member function to FlatSet (cherry picked from commit a27e3a52a0cdfae8cf5cbb787e944f4f76319f26) --- src/common/Containers/FlatSet.h | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/src/common/Containers/FlatSet.h b/src/common/Containers/FlatSet.h index 346e5c2556b..e2ffd2ed75c 100644 --- a/src/common/Containers/FlatSet.h +++ b/src/common/Containers/FlatSet.h @@ -39,11 +39,17 @@ public: auto end() { return _storage.end(); } auto end() const { return _storage.end(); } + bool contains(Key const& value) const + { + return std::binary_search(this->begin(), this->end(), value, Compare()); + } + auto find(Key const& value) const { + auto compare = Compare(); auto end = this->end(); - auto itr = std::lower_bound(this->begin(), end, value, Compare()); - if (itr != end && Compare()(value, *itr)) + auto itr = std::lower_bound(this->begin(), end, value, compare); + if (itr != end && compare(value, *itr)) itr = end; return itr; @@ -51,9 +57,10 @@ public: auto find(Key const& value) { + auto compare = Compare(); auto end = this->end(); - auto itr = std::lower_bound(this->begin(), end, value, Compare()); - if (itr != end && Compare()(value, *itr)) + auto itr = std::lower_bound(this->begin(), end, value, compare); + if (itr != end && compare(value, *itr)) itr = end; return itr; @@ -63,9 +70,10 @@ public: std::pair emplace(Args&&... args) { Key newElement(std::forward(args)...); + auto compare = Compare(); auto end = this->end(); - auto itr = std::lower_bound(this->begin(), end, newElement, Compare()); - if (itr != end && !Compare()(newElement, *itr)) + auto itr = std::lower_bound(this->begin(), end, newElement, compare); + if (itr != end && !compare(newElement, *itr)) return { itr, false }; return { _storage.emplace(itr, std::move(newElement)), true }; @@ -88,15 +96,8 @@ public: void shrink_to_fit() { _storage.shrink_to_fit(); } - friend bool operator==(FlatSet const& left, FlatSet const& right) - { - return left._storage == right._storage; - } - - friend bool operator!=(FlatSet const& left, FlatSet const& right) - { - return !(left == right); - } + friend std::strong_ordering operator<=>(FlatSet const& left, FlatSet const& right) = default; + friend bool operator==(FlatSet const& left, FlatSet const& right) = default; private: KeyContainer _storage; -- cgit v1.2.3