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)) {
|
EventBase(EventBase&& other) : listeners(std::move(other.listeners)) {
|
||||||
for (const auto& listenerSlice : listeners) {
|
for (const auto& listenerSlice : listeners) {
|
||||||
for (const auto& listener : listenerSlice.second) {
|
for (const auto& listener : listenerSlice.second) {
|
||||||
|
if(listener) {
|
||||||
listener->eventToListenTo = this;
|
listener->eventToListenTo = this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
EventBase(EventBase&) = delete;
|
EventBase(EventBase&) = delete;
|
||||||
EventBase& operator=(EventBase&) = delete;
|
EventBase& operator=(EventBase&) = delete;
|
||||||
virtual ~EventBase() {
|
virtual ~EventBase() {
|
||||||
for (const auto& listenerSlice : listeners) {
|
for (const auto& listenerSlice : listeners) {
|
||||||
for (const auto& listener : listenerSlice.second) {
|
for (const auto& listener : listenerSlice.second) {
|
||||||
|
if(listener) {
|
||||||
listener->eventToListenTo = nullptr;
|
listener->eventToListenTo = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AddListener(EventListener<T>* listener, int priority = 0) {
|
void AddListener(EventListener<T>* listener, int priority = 0) {
|
||||||
if (listeners.contains(priority)) {
|
if (listeners.contains(priority)) {
|
||||||
|
|
@ -94,12 +98,8 @@ namespace Crafter {
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoveListener(EventListener<T>* listener) {
|
void RemoveListener(EventListener<T>* listener) {
|
||||||
listeners[listener->priority].erase(
|
auto pos = listeners.find(listener->priority);
|
||||||
std::remove(listeners[listener->priority].begin(),
|
std::replace(pos->second.begin(), pos->second.end(), listener, static_cast<EventListener<T>*>(nullptr));
|
||||||
listeners[listener->priority].end(),
|
|
||||||
listener),
|
|
||||||
listeners[listener->priority].end()
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CRAFTER_TIMING
|
#ifdef CRAFTER_TIMING
|
||||||
|
|
@ -159,8 +159,8 @@ namespace Crafter {
|
||||||
// Clear previous timing data
|
// Clear previous timing data
|
||||||
this->listenerTimes.clear();
|
this->listenerTimes.clear();
|
||||||
|
|
||||||
auto listenersCopy = this->listeners;
|
this->listeners.erase(std::remove(this->listeners.begin(), this->listeners.end(), nullptr), this->listeners.end());
|
||||||
for (const auto& listenerSlice : listenersCopy) {
|
for (const auto& listenerSlice : this->listeners) {
|
||||||
for (const auto& listener : listenerSlice.second) {
|
for (const auto& listener : listenerSlice.second) {
|
||||||
auto start = std::chrono::high_resolution_clock::now();
|
auto start = std::chrono::high_resolution_clock::now();
|
||||||
listener->function();
|
listener->function();
|
||||||
|
|
@ -191,8 +191,8 @@ namespace Crafter {
|
||||||
// Clear previous timing data
|
// Clear previous timing data
|
||||||
this->listenerTimes.clear();
|
this->listenerTimes.clear();
|
||||||
|
|
||||||
auto listenersCopy = this->listeners;
|
this->listeners.erase(std::remove(this->listeners.begin(), this->listeners.end(), nullptr), this->listeners.end());
|
||||||
for (const auto& listenerSlice : listenersCopy) {
|
for (const auto& listenerSlice : this->listeners) {
|
||||||
for (const auto& listener : listenerSlice.second) {
|
for (const auto& listener : listenerSlice.second) {
|
||||||
auto start = std::chrono::high_resolution_clock::now();
|
auto start = std::chrono::high_resolution_clock::now();
|
||||||
listener->function(data);
|
listener->function(data);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue