From 911babc283b12e1de1c52b022dbdbdca86eab89c Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 19 Jan 2015 00:00:54 +0100 Subject: [PATCH] Changed meaning of return value from resource events Returning false from a resource event will remove the listener from the resource, instead of decrementing it's counter Former-commit-id: ba47da0e8de5c0adb3d31f29af0ef7835beefd5a --- include/Nazara/Core/Resource.hpp | 2 -- src/Nazara/Core/Resource.cpp | 20 ++++++++------------ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/include/Nazara/Core/Resource.hpp b/include/Nazara/Core/Resource.hpp index 2bc392734..61cbafd1a 100644 --- a/include/Nazara/Core/Resource.hpp +++ b/include/Nazara/Core/Resource.hpp @@ -50,8 +50,6 @@ class NAZARA_API NzResource private: using ResourceListenerMap = std::unordered_map>; - void RemoveResourceListenerIterator(ResourceListenerMap::iterator iterator) const; - NazaraMutexAttrib(m_mutex, mutable) // Je fais précéder le nom par 'resource' pour éviter les éventuels conflits de noms diff --git a/src/Nazara/Core/Resource.cpp b/src/Nazara/Core/Resource.cpp index 5610d9d13..d262b5e8b 100644 --- a/src/Nazara/Core/Resource.cpp +++ b/src/Nazara/Core/Resource.cpp @@ -71,7 +71,11 @@ void NzResource::RemoveResourceListener(NzResourceListener* listener) const { ResourceListenerMap::iterator it = m_resourceListeners.find(listener); if (it != m_resourceListeners.end()) - RemoveResourceListenerIterator(it); + { + unsigned int& referenceCount = it->second.second; + if (--referenceCount == 0) + m_resourceListeners.erase(it); + } } } @@ -119,7 +123,7 @@ void NzResource::NotifyCreated() while (it != m_resourceListeners.end()) { if (!it->first->OnResourceCreated(this, it->second.first)) - RemoveResourceListenerIterator(it++); + m_resourceListeners.erase(it++); else ++it; } @@ -137,7 +141,7 @@ void NzResource::NotifyDestroy() while (it != m_resourceListeners.end()) { if (!it->first->OnResourceDestroy(this, it->second.first)) - RemoveResourceListenerIterator(it++); + m_resourceListeners.erase(it++); else ++it; } @@ -155,7 +159,7 @@ void NzResource::NotifyModified(unsigned int code) while (it != m_resourceListeners.end()) { if (!it->first->OnResourceModified(this, it->second.first, code)) - RemoveResourceListenerIterator(it++); + m_resourceListeners.erase(it++); else ++it; } @@ -163,11 +167,3 @@ void NzResource::NotifyModified(unsigned int code) m_resourceListenersLocked = false; } -void NzResource::RemoveResourceListenerIterator(ResourceListenerMap::iterator iterator) const -{ - unsigned int& referenceCount = iterator->second.second; - if (referenceCount == 1) - m_resourceListeners.erase(iterator); - else - referenceCount--; -}