From dd3b2a4b9ad34aed7e551546e22e81e12fac5d81 Mon Sep 17 00:00:00 2001 From: Jorijn van der Graaf Date: Tue, 25 Nov 2025 01:53:40 +0100 Subject: [PATCH] move and copy constructors --- interfaces/Crafter.Event.cppm | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/interfaces/Crafter.Event.cppm b/interfaces/Crafter.Event.cppm index fb99b2c..b5aad46 100644 --- a/interfaces/Crafter.Event.cppm +++ b/interfaces/Crafter.Event.cppm @@ -33,6 +33,8 @@ namespace Crafter { public: int priority; EventListener(); + EventListener(EventListener&) = delete; + EventListener& operator=(EventListener&) = delete; void SetEvent(Event* eventToListenTo, std::function function, int priority = 0); EventListener(Event* eventToListenTo, std::function function, int priority = 0); ~EventListener(); @@ -45,6 +47,8 @@ namespace Crafter { public: int priority; EventListener(); + EventListener(EventListener&) = delete; + EventListener& operator=(EventListener&) = delete; void SetEvent(Event* eventToListenTo, std::function function, int priority = 0); EventListener(Event* eventToListenTo, std::function function, int priority = 0); ~EventListener(); @@ -56,10 +60,18 @@ namespace Crafter { class Event { public: std::map*>> listeners; + Event(Event&& other) : listeners(std::move(other.listeners)) { + for (const auto& listenerSlice : listeners) { + for (const auto& listener : listenerSlice.second) { + listener->eventToListenTo = this; + } + } + } + Event(Event&) = delete; + Event& operator=(Event&) = delete; ~Event() { for (const auto& listenerSlice : listeners) { - const std::vector*> slice = listenerSlice.second; - for (const auto& listener : slice) { + for (const auto& listener : listenerSlice.second) { listener->eventToListenTo = nullptr; } } @@ -80,8 +92,7 @@ namespace Crafter { void Invoke(T data) { for (const auto& listenerSlice : listeners) { - const std::vector*> slice = listenerSlice.second; - for (const auto& listener : slice) { + for (const auto& listener : listenerSlice.second) { listener->function(data); } } @@ -117,6 +128,15 @@ namespace Crafter { class Event { public: std::map*>> listeners; + Event(Event&& other) : listeners(std::move(other.listeners)) { + for (const auto& listenerSlice : listeners) { + for (const auto& listener : listenerSlice.second) { + listener->eventToListenTo = this; + } + } + } + Event(Event&) = delete; + Event& operator=(Event&) = delete; ~Event() { for (const auto& listenerSlice : listeners) { const std::vector*> slice = listenerSlice.second;