crash fix
This commit is contained in:
parent
6974862125
commit
c0400d31c3
1 changed files with 12 additions and 12 deletions
|
|
@ -70,19 +70,23 @@ namespace Crafter {
|
|||
EventBase(EventBase&& other) : listeners(std::move(other.listeners)) {
|
||||
for (const auto& listenerSlice : listeners) {
|
||||
for (const auto& listener : listenerSlice.second) {
|
||||
if(listener) {
|
||||
listener->eventToListenTo = this;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
EventBase(EventBase&) = delete;
|
||||
EventBase& operator=(EventBase&) = delete;
|
||||
virtual ~EventBase() {
|
||||
for (const auto& listenerSlice : listeners) {
|
||||
for (const auto& listener : listenerSlice.second) {
|
||||
if(listener) {
|
||||
listener->eventToListenTo = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AddListener(EventListener<T>* listener, int priority = 0) {
|
||||
if (listeners.contains(priority)) {
|
||||
|
|
@ -94,12 +98,8 @@ namespace Crafter {
|
|||
}
|
||||
|
||||
void RemoveListener(EventListener<T>* listener) {
|
||||
listeners[listener->priority].erase(
|
||||
std::remove(listeners[listener->priority].begin(),
|
||||
listeners[listener->priority].end(),
|
||||
listener),
|
||||
listeners[listener->priority].end()
|
||||
);
|
||||
auto pos = listeners.find(listener->priority);
|
||||
std::replace(pos->second.begin(), pos->second.end(), listener, static_cast<EventListener<T>*>(nullptr));
|
||||
}
|
||||
|
||||
#ifdef CRAFTER_TIMING
|
||||
|
|
@ -159,8 +159,8 @@ namespace Crafter {
|
|||
// Clear previous timing data
|
||||
this->listenerTimes.clear();
|
||||
|
||||
auto listenersCopy = this->listeners;
|
||||
for (const auto& listenerSlice : listenersCopy) {
|
||||
this->listeners.erase(std::remove(this->listeners.begin(), this->listeners.end(), nullptr), this->listeners.end());
|
||||
for (const auto& listenerSlice : this->listeners) {
|
||||
for (const auto& listener : listenerSlice.second) {
|
||||
auto start = std::chrono::high_resolution_clock::now();
|
||||
listener->function();
|
||||
|
|
@ -191,8 +191,8 @@ namespace Crafter {
|
|||
// Clear previous timing data
|
||||
this->listenerTimes.clear();
|
||||
|
||||
auto listenersCopy = this->listeners;
|
||||
for (const auto& listenerSlice : listenersCopy) {
|
||||
this->listeners.erase(std::remove(this->listeners.begin(), this->listeners.end(), nullptr), this->listeners.end());
|
||||
for (const auto& listenerSlice : this->listeners) {
|
||||
for (const auto& listener : listenerSlice.second) {
|
||||
auto start = std::chrono::high_resolution_clock::now();
|
||||
listener->function(data);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue