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
This commit is contained in:
parent
8f9ea9db17
commit
911babc283
|
|
@ -50,8 +50,6 @@ class NAZARA_API NzResource
|
||||||
private:
|
private:
|
||||||
using ResourceListenerMap = std::unordered_map<NzResourceListener*, std::pair<int, unsigned int>>;
|
using ResourceListenerMap = std::unordered_map<NzResourceListener*, std::pair<int, unsigned int>>;
|
||||||
|
|
||||||
void RemoveResourceListenerIterator(ResourceListenerMap::iterator iterator) const;
|
|
||||||
|
|
||||||
NazaraMutexAttrib(m_mutex, mutable)
|
NazaraMutexAttrib(m_mutex, mutable)
|
||||||
|
|
||||||
// Je fais précéder le nom par 'resource' pour éviter les éventuels conflits de noms
|
// Je fais précéder le nom par 'resource' pour éviter les éventuels conflits de noms
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,11 @@ void NzResource::RemoveResourceListener(NzResourceListener* listener) const
|
||||||
{
|
{
|
||||||
ResourceListenerMap::iterator it = m_resourceListeners.find(listener);
|
ResourceListenerMap::iterator it = m_resourceListeners.find(listener);
|
||||||
if (it != m_resourceListeners.end())
|
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())
|
while (it != m_resourceListeners.end())
|
||||||
{
|
{
|
||||||
if (!it->first->OnResourceCreated(this, it->second.first))
|
if (!it->first->OnResourceCreated(this, it->second.first))
|
||||||
RemoveResourceListenerIterator(it++);
|
m_resourceListeners.erase(it++);
|
||||||
else
|
else
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
|
|
@ -137,7 +141,7 @@ void NzResource::NotifyDestroy()
|
||||||
while (it != m_resourceListeners.end())
|
while (it != m_resourceListeners.end())
|
||||||
{
|
{
|
||||||
if (!it->first->OnResourceDestroy(this, it->second.first))
|
if (!it->first->OnResourceDestroy(this, it->second.first))
|
||||||
RemoveResourceListenerIterator(it++);
|
m_resourceListeners.erase(it++);
|
||||||
else
|
else
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
|
|
@ -155,7 +159,7 @@ void NzResource::NotifyModified(unsigned int code)
|
||||||
while (it != m_resourceListeners.end())
|
while (it != m_resourceListeners.end())
|
||||||
{
|
{
|
||||||
if (!it->first->OnResourceModified(this, it->second.first, code))
|
if (!it->first->OnResourceModified(this, it->second.first, code))
|
||||||
RemoveResourceListenerIterator(it++);
|
m_resourceListeners.erase(it++);
|
||||||
else
|
else
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
|
|
@ -163,11 +167,3 @@ void NzResource::NotifyModified(unsigned int code)
|
||||||
m_resourceListenersLocked = false;
|
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--;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue