aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-08-15 12:37:47 +0200
committerShauren <shauren.trinity@gmail.com>2025-08-15 13:08:23 +0200
commit578e7c3dabcc54f302069e1bf86dace3f62ec00e (patch)
treec5fbe9fecb2d4a59e6da227b00a11b39e388eaff
parent611527b32f70d22e11ad05446810034c0bcd91d1 (diff)
Core/Utils: Added .contains member function to FlatSet
(cherry picked from commit a27e3a52a0cdfae8cf5cbb787e944f4f76319f26)
-rw-r--r--src/common/Containers/FlatSet.h31
1 files 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<iterator, bool> emplace(Args&&... args)
{
Key newElement(std::forward<Args>(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;