Browse Source

meta_range_iterator: operator==/operator<=>

skypjack 2 months ago
parent
commit
20f395ba36
1 changed files with 10 additions and 36 deletions
  1. 10 36
      src/entt/meta/range.hpp

+ 10 - 36
src/entt/meta/range.hpp

@@ -1,6 +1,7 @@
 #ifndef ENTT_META_RANGE_HPP
 #ifndef ENTT_META_RANGE_HPP
 #define ENTT_META_RANGE_HPP
 #define ENTT_META_RANGE_HPP
 
 
+#include <compare>
 #include <cstddef>
 #include <cstddef>
 #include <iterator>
 #include <iterator>
 #include <utility>
 #include <utility>
@@ -86,50 +87,23 @@ struct meta_range_iterator final {
         return operator[](0);
         return operator[](0);
     }
     }
 
 
-    template<typename... Args>
-    friend constexpr std::ptrdiff_t operator-(const meta_range_iterator<Args...> &, const meta_range_iterator<Args...> &) noexcept;
+    [[nodiscard]] constexpr std::ptrdiff_t operator-(const meta_range_iterator &other) const noexcept {
+        return it - other.it;
+    }
 
 
-    template<typename... Args>
-    friend constexpr bool operator==(const meta_range_iterator<Args...> &, const meta_range_iterator<Args...> &) noexcept;
+    [[nodiscard]] constexpr bool operator==(const meta_range_iterator &other) const noexcept {
+        return it == other.it;
+    }
 
 
-    template<typename... Args>
-    friend constexpr bool operator<(const meta_range_iterator<Args...> &, const meta_range_iterator<Args...> &) noexcept;
+    [[nodiscard]] constexpr auto operator<=>(const meta_range_iterator &other) const noexcept {
+        return it <=> other.it;
+    }
 
 
 private:
 private:
     It it;
     It it;
     const meta_ctx *ctx;
     const meta_ctx *ctx;
 };
 };
 
 
-template<typename... Args>
-[[nodiscard]] constexpr std::ptrdiff_t operator-(const meta_range_iterator<Args...> &lhs, const meta_range_iterator<Args...> &rhs) noexcept {
-    return lhs.it - rhs.it;
-}
-
-template<typename... Args>
-[[nodiscard]] constexpr bool operator==(const meta_range_iterator<Args...> &lhs, const meta_range_iterator<Args...> &rhs) noexcept {
-    return lhs.it == rhs.it;
-}
-
-template<typename... Args>
-[[nodiscard]] constexpr bool operator<(const meta_range_iterator<Args...> &lhs, const meta_range_iterator<Args...> &rhs) noexcept {
-    return lhs.it < rhs.it;
-}
-
-template<typename... Args>
-[[nodiscard]] constexpr bool operator>(const meta_range_iterator<Args...> &lhs, const meta_range_iterator<Args...> &rhs) noexcept {
-    return rhs < lhs;
-}
-
-template<typename... Args>
-[[nodiscard]] constexpr bool operator<=(const meta_range_iterator<Args...> &lhs, const meta_range_iterator<Args...> &rhs) noexcept {
-    return !(lhs > rhs);
-}
-
-template<typename... Args>
-[[nodiscard]] constexpr bool operator>=(const meta_range_iterator<Args...> &lhs, const meta_range_iterator<Args...> &rhs) noexcept {
-    return !(lhs < rhs);
-}
-
 } // namespace internal
 } // namespace internal
 /*! @endcond */
 /*! @endcond */