Removed signalUnreffed interface

This commit is contained in:
Robert Osfield
2010-05-17 14:21:53 +00:00
parent f832198128
commit ccd9f31309
5 changed files with 12 additions and 61 deletions

View File

@@ -48,25 +48,6 @@ void ObserverSet::removeObserver(Observer* observer)
_observers.erase(observer);
}
void ObserverSet::signalObjectUnreferenced(void* ptr)
{
for(Observers::iterator itr = _observers.begin();
itr != _observers.end();
)
{
if ((*itr)->objectUnreferenced(ptr))
{
Observers::iterator orig_itr = itr;
++itr;
_observers.erase(orig_itr);
}
else
{
++itr;
}
}
}
void ObserverSet::signalObjectDeleted(void* ptr)
{
for(Observers::iterator itr = _observers.begin();

View File

@@ -238,7 +238,7 @@ Referenced::~Referenced()
}
// signal observers that we are being deleted.
signalObserversAndDelete(false, true, false);
signalObserversAndDelete(true, false);
// delete the ObserverSet
#if defined(_OSG_REFERENCED_USE_ATOMIC_OPERATIONS)
@@ -278,7 +278,7 @@ ObserverSet* Referenced::getOrCreateObserverSet() const
#endif
}
void Referenced::signalObserversAndDelete(bool signalUnreferened, bool signalDelete, bool doDelete) const
void Referenced::signalObserversAndDelete(bool signalDelete, bool doDelete) const
{
#if defined(_OSG_REFERENCED_USE_ATOMIC_OPERATIONS)
ObserverSet* observerSet = static_cast<ObserverSet*>(_observerSet.get());
@@ -286,18 +286,10 @@ void Referenced::signalObserversAndDelete(bool signalUnreferened, bool signalDel
ObserverSet* observerSet = static_cast<ObserverSet*>(_observerSet);
#endif
if (observerSet)
if (observerSet && signalDelete)
{
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(*(observerSet->getObserverSetMutex()));
if (signalUnreferened)
{
observerSet->signalObjectUnreferenced(const_cast<Referenced*>(this));
}
if (signalDelete)
{
observerSet->signalObjectDeleted(const_cast<Referenced*>(this));
}
observerSet->signalObjectDeleted(const_cast<Referenced*>(this));
}
if (doDelete)
@@ -334,32 +326,22 @@ void Referenced::setThreadSafeRefUnref(bool threadSafe)
#endif
}
int Referenced::unref_nodelete(bool signalObserversOnZeroRefCount) const
int Referenced::unref_nodelete() const
{
int result;
#if defined(_OSG_REFERENCED_USE_ATOMIC_OPERATIONS)
result = --_refCount;
bool needUnreferencedSignal = (result == 0);
return --_refCount;
#else
bool needUnreferencedSignal = false;
if (_refMutex)
{
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(*_refMutex);
result = --_refCount;
needUnreferencedSignal = (result == 0);
return --_refCount;
}
else
{
result = --_refCount;
needUnreferencedSignal = (result == 0);
return --_refCount;
}
#endif
if (needUnreferencedSignal && signalObserversOnZeroRefCount)
{
signalObserversAndDelete(true,false,false);
}
return result;
}
void Referenced::deleteUsingDeleteHandler() const