From 44ed10c50b89dd79675ebe816307fd3d792bfb4b Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Fri, 28 Apr 2023 15:55:33 +0200 Subject: [PATCH] view: stable multi type view ::find/::back/::front functions --- src/entt/entity/view.hpp | 4 ++++ test/entt/entity/view.cpp | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/src/entt/entity/view.hpp b/src/entt/entity/view.hpp index 9601b13f7..6a9d2ebc2 100644 --- a/src/entt/entity/view.hpp +++ b/src/entt/entity/view.hpp @@ -423,11 +423,15 @@ public: * otherwise. */ [[nodiscard]] entity_type back() const noexcept { + if(view) { auto it = view->rbegin(); for(const auto last = view->rend(); it != last && !contains(*it); ++it) {} return it == view->rend() ? null : *it; } + return null; + } + /** * @brief Finds an entity. * @param entt A valid identifier. diff --git a/test/entt/entity/view.cpp b/test/entt/entity/view.cpp index 7fb0ac917..7b6175e4f 100644 --- a/test/entt/entity/view.cpp +++ b/test/entt/entity/view.cpp @@ -632,6 +632,10 @@ TEST(MultiComponentView, InvalidView) { ASSERT_EQ(view.size_hint(), 0u); ASSERT_FALSE(view.contains(entt::null)); + ASSERT_EQ(view.find(entt::null), view.end()); + + ASSERT_EQ(view.front(), static_cast(entt::null)); + ASSERT_EQ(view.back(), static_cast(entt::null)); ASSERT_EQ(view.begin(), typename decltype(view)::iterator{}); ASSERT_EQ(view.begin(), view.end());