Просмотр исходного кода

sparse_set_iterator: operator==/operator<=>

skypjack 2 месяцев назад
Родитель
Сommit
b3eef84102
1 измененных файлов с 15 добавлено и 30 удалено
  1. 15 30
      src/entt/entity/sparse_set.hpp

+ 15 - 30
src/entt/entity/sparse_set.hpp

@@ -1,6 +1,7 @@
 #ifndef ENTT_ENTITY_SPARSE_SET_HPP
 #ifndef ENTT_ENTITY_SPARSE_SET_HPP
 #define ENTT_ENTITY_SPARSE_SET_HPP
 #define ENTT_ENTITY_SPARSE_SET_HPP
 
 
+#include <compare>
 #include <cstddef>
 #include <cstddef>
 #include <iterator>
 #include <iterator>
 #include <memory>
 #include <memory>
@@ -84,6 +85,20 @@ struct sparse_set_iterator final {
         return operator[](0);
         return operator[](0);
     }
     }
 
 
+    [[nodiscard]] constexpr std::ptrdiff_t operator-(const sparse_set_iterator &other) const noexcept {
+        // intentionally reversed due to backward iteration
+        return other.offset - offset;
+    }
+
+    [[nodiscard]] constexpr bool operator==(const sparse_set_iterator &other) const noexcept {
+        return offset == other.offset;
+    }
+
+    [[nodiscard]] constexpr auto operator<=>(const sparse_set_iterator &other) const noexcept {
+        // intentionally reversed due to backward iteration
+        return other.offset <=> offset;
+    }
+
     [[nodiscard]] constexpr pointer data() const noexcept {
     [[nodiscard]] constexpr pointer data() const noexcept {
         return packed ? packed->data() : nullptr;
         return packed ? packed->data() : nullptr;
     }
     }
@@ -97,36 +112,6 @@ private:
     difference_type offset;
     difference_type offset;
 };
 };
 
 
-template<typename Container>
-[[nodiscard]] constexpr std::ptrdiff_t operator-(const sparse_set_iterator<Container> &lhs, const sparse_set_iterator<Container> &rhs) noexcept {
-    return rhs.index() - lhs.index();
-}
-
-template<typename Container>
-[[nodiscard]] constexpr bool operator==(const sparse_set_iterator<Container> &lhs, const sparse_set_iterator<Container> &rhs) noexcept {
-    return lhs.index() == rhs.index();
-}
-
-template<typename Container>
-[[nodiscard]] constexpr bool operator<(const sparse_set_iterator<Container> &lhs, const sparse_set_iterator<Container> &rhs) noexcept {
-    return lhs.index() > rhs.index();
-}
-
-template<typename Container>
-[[nodiscard]] constexpr bool operator>(const sparse_set_iterator<Container> &lhs, const sparse_set_iterator<Container> &rhs) noexcept {
-    return rhs < lhs;
-}
-
-template<typename Container>
-[[nodiscard]] constexpr bool operator<=(const sparse_set_iterator<Container> &lhs, const sparse_set_iterator<Container> &rhs) noexcept {
-    return !(lhs > rhs);
-}
-
-template<typename Container>
-[[nodiscard]] constexpr bool operator>=(const sparse_set_iterator<Container> &lhs, const sparse_set_iterator<Container> &rhs) noexcept {
-    return !(lhs < rhs);
-}
-
 } // namespace internal
 } // namespace internal
 /*! @endcond */
 /*! @endcond */