move and copy constructors
This commit is contained in:
parent
5a2c9d9b1a
commit
dd3b2a4b9a
1 changed files with 24 additions and 4 deletions
|
|
@ -33,6 +33,8 @@ namespace Crafter {
|
|||
public:
|
||||
int priority;
|
||||
EventListener();
|
||||
EventListener(EventListener&) = delete;
|
||||
EventListener& operator=(EventListener&) = delete;
|
||||
void SetEvent(Event<T>* eventToListenTo, std::function<void(T)> function, int priority = 0);
|
||||
EventListener(Event<T>* eventToListenTo, std::function<void(T)> 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<void>* eventToListenTo, std::function<void()> function, int priority = 0);
|
||||
EventListener(Event<void>* eventToListenTo, std::function<void()> function, int priority = 0);
|
||||
~EventListener();
|
||||
|
|
@ -56,10 +60,18 @@ namespace Crafter {
|
|||
class Event {
|
||||
public:
|
||||
std::map<int, std::vector<EventListener<T>*>> 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<EventListener<T>*> 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<EventListener<T>*> 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<void> {
|
||||
public:
|
||||
std::map<int, std::vector<EventListener<void>*>> 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<EventListener<void>*> slice = listenerSlice.second;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue