diff --git a/src/entt/entity/view.hpp b/src/entt/entity/view.hpp index 95bfe8913..cf9cbccdc 100644 --- a/src/entt/entity/view.hpp +++ b/src/entt/entity/view.hpp @@ -404,7 +404,7 @@ public: * @return An iterator to the first entity of the view. */ [[nodiscard]] iterator begin() const noexcept { - return view ? iterator{view->begin(), view->end(), opaque_check_set(), filter} : iterator{}; + return view ? iterator{view->begin(0), view->end(0), opaque_check_set(), filter} : iterator{}; } /** @@ -412,7 +412,7 @@ public: * @return An iterator to the entity following the last entity of the view. */ [[nodiscard]] iterator end() const noexcept { - return view ? iterator{view->end(), view->end(), opaque_check_set(), filter} : iterator{}; + return view ? iterator{view->end(0), view->end(0), opaque_check_set(), filter} : iterator{}; } /** @@ -535,12 +535,7 @@ public: * @return An iterable object to use to _visit_ the view. */ [[nodiscard]] iterable each() const noexcept { - if(view) { - const auto check = opaque_check_set(); - return iterable{internal::extended_view_iterator{iterator{view->begin(0), view->end(0), check, filter}, pools}, internal::extended_view_iterator{iterator{view->end(0), view->end(0), check, filter}, pools}}; - } - - return iterable{}; + return {internal::extended_view_iterator{begin(), pools}, internal::extended_view_iterator{end(), pools}}; } /** diff --git a/test/entt/entity/registry.cpp b/test/entt/entity/registry.cpp index 61f66afc8..11bbd1bbd 100644 --- a/test/entt/entity/registry.cpp +++ b/test/entt/entity/registry.cpp @@ -907,22 +907,18 @@ TEST(Registry, ExcludeOnlyView) { registry.emplace(entity[2u], 0); registry.emplace(entity[3u], 0); - registry.destroy(entity[3u], entt::to_version(entity[3u])); + registry.destroy(entity[3u]); ASSERT_EQ(view.size_hint(), 4u); ASSERT_NE(view.begin(), view.end()); - // returns all matching identifiers, both in-use and available ones - ASSERT_EQ(std::distance(view.begin(), view.end()), 2); - ASSERT_EQ(*view.begin(), entity[3u]); - ASSERT_EQ(*(++view.begin()), entity[1u]); + ASSERT_EQ(std::distance(view.begin(), view.end()), 1); + ASSERT_EQ(*view.begin(), entity[1u]); - // skips available identifiers automatically, only returns in-use elements for(auto [entt]: view.each()) { ASSERT_EQ(entt, entity[1u]); } - // skips available identifiers automatically, only returns in-use elements view.each([&entity](auto entt) { ASSERT_EQ(entt, entity[1u]); }); diff --git a/test/entt/entity/view.cpp b/test/entt/entity/view.cpp index 5bb8e09b4..2bc4a2917 100644 --- a/test/entt/entity/view.cpp +++ b/test/entt/entity/view.cpp @@ -578,22 +578,18 @@ TEST(SingleComponentView, StorageEntity) { const auto entity = registry.create(); const auto other = registry.create(); - registry.destroy(entity, entt::to_version(entity)); + registry.destroy(entity); ASSERT_EQ(view.size_hint(), 2u); ASSERT_NE(view.begin(), view.end()); - // returns all matching identifiers, both in-use and available ones - ASSERT_EQ(std::distance(view.begin(), view.end()), 2); - ASSERT_EQ(*view.begin(), entity); - ASSERT_EQ(*(++view.begin()), other); + ASSERT_EQ(std::distance(view.begin(), view.end()), 1); + ASSERT_EQ(*view.begin(), other); - // skips available identifiers automatically, only returns in-use elements for(auto elem: view.each()) { ASSERT_EQ(std::get<0>(elem), other); } - // skips available identifiers automatically, only returns in-use elements view.each([other](auto entt) { ASSERT_EQ(entt, other); }); @@ -1604,22 +1600,18 @@ TEST(MultiComponentView, StorageEntityExcludeOnly) { registry.emplace(excluded); - registry.destroy(entity, entt::to_version(entity)); + registry.destroy(entity); ASSERT_EQ(view.size_hint(), 3u); ASSERT_NE(view.begin(), view.end()); - // returns all matching identifiers, both in-use and available ones - ASSERT_EQ(std::distance(view.begin(), view.end()), 2); - ASSERT_EQ(*view.begin(), entity); - ASSERT_EQ(*(++view.begin()), other); + ASSERT_EQ(std::distance(view.begin(), view.end()), 1); + ASSERT_EQ(*view.begin(), other); - // skips available identifiers automatically, only returns in-use elements for(auto [entt]: view.each()) { ASSERT_EQ(entt, other); } - // skips available identifiers automatically, only returns in-use elements view.each([other](auto entt) { ASSERT_EQ(entt, other); });