From f1356db1111a9bf7801fcf0469c81d6046b338df Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Tue, 10 Dec 2024 10:55:33 +0100 Subject: [PATCH] view: internal changes --- src/entt/entity/view.hpp | 41 ++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/entt/entity/view.hpp b/src/entt/entity/view.hpp index c588b37a0..48ef35938 100644 --- a/src/entt/entity/view.hpp +++ b/src/entt/entity/view.hpp @@ -270,27 +270,19 @@ protected: return pools[pos]; } - [[nodiscard]] const Type *storage(const std::size_t pos) const noexcept { - if(pos < Get) { - return pools[pos]; - } - - if(const auto idx = pos - Get; filter[idx] != internal::view_placeholder()) { - return filter[idx]; - } - - return nullptr; + void pool_at(const std::size_t pos, const Type *elem) noexcept { + ENTT_ASSERT(elem != nullptr, "Unexpected element"); + pools[pos] = elem; + refresh(); } - void storage(const std::size_t pos, const Type *elem) noexcept { - ENTT_ASSERT(elem != nullptr, "Unexpected element"); + [[nodiscard]] const Type *filter_at(const std::size_t pos) const noexcept { + return (filter[pos] == internal::view_placeholder()) ? nullptr : filter[pos]; + } - if(pos < Get) { - pools[pos] = elem; - refresh(); - } else { - filter[pos - Get] = elem; - } + void filter_at(const std::size_t pos, const Type *elem) noexcept { + ENTT_ASSERT(elem != nullptr, "Unexpected element"); + filter[pos] = elem; } [[nodiscard]] bool none_of(const typename Type::entity_type entt) const noexcept { @@ -544,7 +536,11 @@ public: */ template [[nodiscard]] auto *storage() const noexcept { - return static_cast *>(const_cast> *>(base_type::storage(Index))); + if constexpr(Index < sizeof...(Get)) { + return static_cast *>(const_cast> *>(base_type::pool_at(Index))); + } else { + return static_cast *>(const_cast> *>(base_type::filter_at(Index - sizeof...(Get)))); + } } /** @@ -566,7 +562,12 @@ public: template void storage(Type &elem) noexcept { static_assert(std::is_convertible_v &>, "Unexpected type"); - base_type::storage(Index, &elem); + + if constexpr(Index < sizeof...(Get)) { + base_type::pool_at(Index, &elem); + } else { + base_type::filter_at(Index - sizeof...(Get), &elem); + } } /**