Przeglądaj źródła

sparse_set: added const_iterator/const_reverse_iterator and cbegin/cend/crbegin/crend

Michele Caini 4 lat temu
rodzic
commit
cc9b1b0a05
2 zmienionych plików z 30 dodań i 6 usunięć
  1. 26 2
      src/entt/entity/sparse_set.hpp
  2. 4 4
      test/entt/entity/sparse_set.cpp

+ 26 - 2
src/entt/entity/sparse_set.hpp

@@ -284,8 +284,12 @@ public:
     using pointer = typename packed_container_type::const_pointer;
     using pointer = typename packed_container_type::const_pointer;
     /*! @brief Random access iterator type. */
     /*! @brief Random access iterator type. */
     using iterator = internal::sparse_set_iterator<packed_container_type>;
     using iterator = internal::sparse_set_iterator<packed_container_type>;
+    /*! @brief Constant random access iterator type. */
+    using const_iterator = iterator;
     /*! @brief Reverse iterator type. */
     /*! @brief Reverse iterator type. */
     using reverse_iterator = std::reverse_iterator<iterator>;
     using reverse_iterator = std::reverse_iterator<iterator>;
+    /*! @brief Constant reverse iterator type. */
+    using const_reverse_iterator = reverse_iterator;
 
 
     /*! @brief Default constructor. */
     /*! @brief Default constructor. */
     basic_sparse_set()
     basic_sparse_set()
@@ -482,11 +486,16 @@ public:
      *
      *
      * @return An iterator to the first entity of the sparse set.
      * @return An iterator to the first entity of the sparse set.
      */
      */
-    [[nodiscard]] iterator begin() const ENTT_NOEXCEPT {
+    [[nodiscard]] const_iterator begin() const ENTT_NOEXCEPT {
         const auto pos = static_cast<typename iterator::difference_type>(packed.size());
         const auto pos = static_cast<typename iterator::difference_type>(packed.size());
         return iterator{&packed, pos};
         return iterator{&packed, pos};
     }
     }
 
 
+    /*! @brief begin */
+    [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT {
+        return begin();
+    }
+
     /**
     /**
      * @brief Returns an iterator to the end.
      * @brief Returns an iterator to the end.
      *
      *
@@ -501,6 +510,11 @@ public:
         return iterator{&packed, {}};
         return iterator{&packed, {}};
     }
     }
 
 
+    /*! @brief end */
+    [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT {
+        return end();
+    }
+
     /**
     /**
      * @brief Returns a reverse iterator to the beginning.
      * @brief Returns a reverse iterator to the beginning.
      *
      *
@@ -511,10 +525,15 @@ public:
      * @return An iterator to the first entity of the reversed internal packed
      * @return An iterator to the first entity of the reversed internal packed
      * array.
      * array.
      */
      */
-    [[nodiscard]] reverse_iterator rbegin() const ENTT_NOEXCEPT {
+    [[nodiscard]] const_reverse_iterator rbegin() const ENTT_NOEXCEPT {
         return std::make_reverse_iterator(end());
         return std::make_reverse_iterator(end());
     }
     }
 
 
+    /*! @brief rbegin */
+    [[nodiscard]] const_reverse_iterator crbegin() const ENTT_NOEXCEPT {
+        return rbegin();
+    }
+
     /**
     /**
      * @brief Returns a reverse iterator to the end.
      * @brief Returns a reverse iterator to the end.
      *
      *
@@ -529,6 +548,11 @@ public:
         return std::make_reverse_iterator(begin());
         return std::make_reverse_iterator(begin());
     }
     }
 
 
+    /*! @brief rend */
+    [[nodiscard]] const_reverse_iterator crend() const ENTT_NOEXCEPT {
+        return rend();
+    }
+
     /**
     /**
      * @brief Finds an entity.
      * @brief Finds an entity.
      * @param entt A valid identifier.
      * @param entt A valid identifier.

+ 4 - 4
test/entt/entity/sparse_set.cpp

@@ -804,8 +804,8 @@ TEST(SparseSet, Iterator) {
     begin = set.end();
     begin = set.end();
     std::swap(begin, end);
     std::swap(begin, end);
 
 
-    ASSERT_EQ(begin, set.begin());
-    ASSERT_EQ(end, set.end());
+    ASSERT_EQ(begin, set.cbegin());
+    ASSERT_EQ(end, set.cend());
     ASSERT_NE(begin, end);
     ASSERT_NE(begin, end);
 
 
     ASSERT_EQ(begin++, set.begin());
     ASSERT_EQ(begin++, set.begin());
@@ -859,8 +859,8 @@ TEST(SparseSet, ReverseIterator) {
     begin = set.rend();
     begin = set.rend();
     std::swap(begin, end);
     std::swap(begin, end);
 
 
-    ASSERT_EQ(begin, set.rbegin());
-    ASSERT_EQ(end, set.rend());
+    ASSERT_EQ(begin, set.crbegin());
+    ASSERT_EQ(end, set.crend());
     ASSERT_NE(begin, end);
     ASSERT_NE(begin, end);
 
 
     ASSERT_EQ(begin++, set.rbegin());
     ASSERT_EQ(begin++, set.rbegin());