From cc9b1b0a05211dedaa0b2d32fdba6e2271ae74f7 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Thu, 16 Dec 2021 08:52:13 +0100 Subject: [PATCH] sparse_set: added const_iterator/const_reverse_iterator and cbegin/cend/crbegin/crend --- src/entt/entity/sparse_set.hpp | 28 ++++++++++++++++++++++++++-- test/entt/entity/sparse_set.cpp | 8 ++++---- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/entt/entity/sparse_set.hpp b/src/entt/entity/sparse_set.hpp index 313460bee..1c2ea8c2b 100644 --- a/src/entt/entity/sparse_set.hpp +++ b/src/entt/entity/sparse_set.hpp @@ -284,8 +284,12 @@ public: using pointer = typename packed_container_type::const_pointer; /*! @brief Random access iterator type. */ using iterator = internal::sparse_set_iterator; + /*! @brief Constant random access iterator type. */ + using const_iterator = iterator; /*! @brief Reverse iterator type. */ using reverse_iterator = std::reverse_iterator; + /*! @brief Constant reverse iterator type. */ + using const_reverse_iterator = reverse_iterator; /*! @brief Default constructor. */ basic_sparse_set() @@ -482,11 +486,16 @@ public: * * @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(packed.size()); return iterator{&packed, pos}; } + /*! @brief begin */ + [[nodiscard]] const_iterator cbegin() const ENTT_NOEXCEPT { + return begin(); + } + /** * @brief Returns an iterator to the end. * @@ -501,6 +510,11 @@ public: return iterator{&packed, {}}; } + /*! @brief end */ + [[nodiscard]] const_iterator cend() const ENTT_NOEXCEPT { + return end(); + } + /** * @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 * array. */ - [[nodiscard]] reverse_iterator rbegin() const ENTT_NOEXCEPT { + [[nodiscard]] const_reverse_iterator rbegin() const ENTT_NOEXCEPT { 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. * @@ -529,6 +548,11 @@ public: return std::make_reverse_iterator(begin()); } + /*! @brief rend */ + [[nodiscard]] const_reverse_iterator crend() const ENTT_NOEXCEPT { + return rend(); + } + /** * @brief Finds an entity. * @param entt A valid identifier. diff --git a/test/entt/entity/sparse_set.cpp b/test/entt/entity/sparse_set.cpp index 3b6ead378..c36aee458 100644 --- a/test/entt/entity/sparse_set.cpp +++ b/test/entt/entity/sparse_set.cpp @@ -804,8 +804,8 @@ TEST(SparseSet, Iterator) { begin = set.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_EQ(begin++, set.begin()); @@ -859,8 +859,8 @@ TEST(SparseSet, ReverseIterator) { begin = set.rend(); 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_EQ(begin++, set.rbegin());