From 3340cf1b3e44ebc49f42a7e91cbc1c9350e175b5 Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Sun, 23 Jun 2024 00:38:11 +0200 Subject: [PATCH] observer: drop unnecessary delegate --- src/entt/entity/observer.hpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/entt/entity/observer.hpp b/src/entt/entity/observer.hpp index dbb43eb30..1663a1ced 100644 --- a/src/entt/entity/observer.hpp +++ b/src/entt/entity/observer.hpp @@ -7,7 +7,6 @@ #include #include #include "../core/type_traits.hpp" -#include "../signal/delegate.hpp" #include "fwd.hpp" #include "storage.hpp" @@ -251,7 +250,6 @@ class basic_observer { void connect(Registry ®, std::index_sequence) { static_assert(sizeof...(Matcher) < std::numeric_limits::digits, "Too many matchers"); (matcher_handler::template connect(storage, reg), ...); - release.template connect<&basic_observer::disconnect>(reg); } public: @@ -276,6 +274,7 @@ public: */ explicit basic_observer(const allocator_type &allocator) : release{}, + parent{}, storage{allocator} {} /*! @brief Default copy constructor, deleted on purpose. */ @@ -292,7 +291,9 @@ public: */ template basic_observer(registry_type ®, basic_collector, const allocator_type &allocator = allocator_type{}) - : basic_observer{allocator} { + : release{&basic_observer::disconnect}, + parent{®}, + storage{allocator} { connect(reg, std::index_sequence_for{}); } @@ -319,6 +320,8 @@ public: template void connect(registry_type ®, basic_collector) { disconnect(); + parent = ® + release = &basic_observer::disconnect; connect(reg, std::index_sequence_for{}); storage.clear(); } @@ -326,8 +329,8 @@ public: /*! @brief Disconnects an observer from the registry it keeps track of. */ void disconnect() { if(release) { - release(storage); - release.reset(); + release(*parent, storage); + release = nullptr; } } @@ -424,7 +427,8 @@ public: } private: - delegate release; + void (*release)(registry_type &, storage_type &); + registry_type *parent; storage_type storage; };