From 97fe978d14fca896cbb34c6dd98da5d5c965574c Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Wed, 29 Dec 2021 00:25:11 +0100 Subject: [PATCH] runtime_view: removed redundant validity check --- src/entt/entity/fwd.hpp | 2 +- src/entt/entity/registry.hpp | 12 ++++++++---- src/entt/entity/runtime_view.hpp | 18 +++++++----------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/entt/entity/fwd.hpp b/src/entt/entity/fwd.hpp index 0bbcc49b8..3f84419e9 100644 --- a/src/entt/entity/fwd.hpp +++ b/src/entt/entity/fwd.hpp @@ -20,7 +20,7 @@ template class basic_view; template -class basic_runtime_view; +struct basic_runtime_view; template class basic_group; diff --git a/src/entt/entity/registry.hpp b/src/entt/entity/registry.hpp index f3d941893..b9019ae18 100644 --- a/src/entt/entity/registry.hpp +++ b/src/entt/entity/registry.hpp @@ -1193,13 +1193,17 @@ public: filter.reserve(std::distance(from, to)); for(; first != last; ++first) { - const auto it = pools.find(*first); - component.emplace_back(it == pools.cend() ? nullptr : it->second.get()); + if(const auto it = pools.find(*first); it == pools.cend()) { + return {}; + } else { + component.emplace_back(it->second.get()); + } } for(; from != to; ++from) { - const auto it = pools.find(*from); - filter.emplace_back(it == pools.cend() ? nullptr : it->second.get()); + if(const auto it = pools.find(*from); it != pools.cend()) { + filter.emplace_back(it->second.get()); + } } return {std::move(component), std::move(filter)}; diff --git a/src/entt/entity/runtime_view.hpp b/src/entt/entity/runtime_view.hpp index b3334c3c0..b66dfc232 100644 --- a/src/entt/entity/runtime_view.hpp +++ b/src/entt/entity/runtime_view.hpp @@ -105,7 +105,7 @@ private: * compile-time error, but for a few reasonable cases. */ template -class basic_runtime_view; +struct basic_runtime_view; /** * @brief Generic runtime view. @@ -147,12 +147,7 @@ class basic_runtime_view; * @tparam Allocator Type of allocator used to manage memory and elements. */ template -class basic_runtime_view> final { - [[nodiscard]] bool valid() const { - return !pools.empty() && pools.front(); - } - -public: +struct basic_runtime_view> final { /*! @brief Underlying entity identifier. */ using entity_type = Entity; /*! @brief Unsigned integer type. */ @@ -188,7 +183,7 @@ public: * @return Estimated number of entities iterated by the view. */ [[nodiscard]] size_type size_hint() const { - return valid() ? pools.front()->size() : size_type{}; + return pools.empty() ? size_type{} : pools.front()->size(); } /** @@ -202,7 +197,7 @@ public: * @return An iterator to the first entity that has the given components. */ [[nodiscard]] iterator begin() const { - return valid() ? iterator{pools, filter, pools[0]->begin()} : iterator{}; + return pools.empty() ? iterator{} : iterator{pools, filter, pools[0]->begin()}; } /** @@ -217,7 +212,7 @@ public: * given components. */ [[nodiscard]] iterator end() const { - return valid() ? iterator{pools, filter, pools[0]->end()} : iterator{}; + return pools.empty() ? iterator{} : iterator{pools, filter, pools[0]->end()}; } /** @@ -226,7 +221,8 @@ public: * @return True if the view contains the given entity, false otherwise. */ [[nodiscard]] bool contains(const entity_type entt) const { - return valid() && std::all_of(pools.cbegin(), pools.cend(), [entt](const auto *curr) { return curr->contains(entt); }) + return !pools.empty() + && std::all_of(pools.cbegin(), pools.cend(), [entt](const auto *curr) { return curr->contains(entt); }) && std::none_of(filter.cbegin(), filter.cend(), [entt](const auto *curr) { return curr && curr->contains(entt); }); }