From 3cae3fbb2b07d841cbc3fc65d14a5409b53ab4a4 Mon Sep 17 00:00:00 2001 From: skypjack Date: Fri, 9 Jan 2026 15:58:09 +0100 Subject: [PATCH] dense_map: operator==/operator<=> --- src/entt/container/dense_map.hpp | 58 ++++++++++---------------------- 1 file changed, 17 insertions(+), 41 deletions(-) diff --git a/src/entt/container/dense_map.hpp b/src/entt/container/dense_map.hpp index a1cfd4a44..a039c6e81 100644 --- a/src/entt/container/dense_map.hpp +++ b/src/entt/container/dense_map.hpp @@ -129,49 +129,25 @@ public: return operator[](0); } - template - friend constexpr std::ptrdiff_t operator-(const dense_map_iterator &, const dense_map_iterator &) noexcept; + template + [[nodiscard]] constexpr std::ptrdiff_t operator-(const dense_map_iterator &other) const noexcept { + return it - other.it; + } - template - friend constexpr bool operator==(const dense_map_iterator &, const dense_map_iterator &) noexcept; + template + [[nodiscard]] constexpr bool operator==(const dense_map_iterator &other) const noexcept { + return it == other.it; + } - template - friend constexpr bool operator<(const dense_map_iterator &, const dense_map_iterator &) noexcept; + template + [[nodiscard]] constexpr auto operator<=>(const dense_map_iterator &other) const noexcept { + return it <=> other.it; + } private: It it; }; -template -[[nodiscard]] constexpr std::ptrdiff_t operator-(const dense_map_iterator &lhs, const dense_map_iterator &rhs) noexcept { - return lhs.it - rhs.it; -} - -template -[[nodiscard]] constexpr bool operator==(const dense_map_iterator &lhs, const dense_map_iterator &rhs) noexcept { - return lhs.it == rhs.it; -} - -template -[[nodiscard]] constexpr bool operator<(const dense_map_iterator &lhs, const dense_map_iterator &rhs) noexcept { - return lhs.it < rhs.it; -} - -template -[[nodiscard]] constexpr bool operator>(const dense_map_iterator &lhs, const dense_map_iterator &rhs) noexcept { - return rhs < lhs; -} - -template -[[nodiscard]] constexpr bool operator<=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) noexcept { - return !(lhs > rhs); -} - -template -[[nodiscard]] constexpr bool operator>=(const dense_map_iterator &lhs, const dense_map_iterator &rhs) noexcept { - return !(lhs < rhs); -} - template class dense_map_local_iterator final { template @@ -217,6 +193,11 @@ public: return {it[idx].element.first, it[idx].element.second}; } + template + [[nodiscard]] constexpr bool operator==(const dense_map_local_iterator &other) const noexcept { + return offset == other.offset; + } + [[nodiscard]] constexpr std::size_t index() const noexcept { return offset; } @@ -226,11 +207,6 @@ private: std::size_t offset{dense_map_placeholder_position}; }; -template -[[nodiscard]] constexpr bool operator==(const dense_map_local_iterator &lhs, const dense_map_local_iterator &rhs) noexcept { - return lhs.index() == rhs.index(); -} - } // namespace internal /*! @endcond */