bool NotificationCenter::hasObserver(const AbstractObserver& observer) const { Mutex::ScopedLock lock(_mutex); for (ObserverList::const_iterator it = _observers.begin(); it != _observers.end(); ++it) if (observer.equals(**it)) return true; return false; }
void NotificationCenter::removeObserver(const AbstractObserver& observer) { Mutex::ScopedLock lock(_mutex); for (ObserverList::iterator it = _observers.begin(); it != _observers.end(); ++it) { if (observer.equals(**it)) { (*it)->disable(); _observers.erase(it); return; } } }
void NotificationCenter::RemoveObserver(const NString& name, AbstractObserver* ob, bool exact/*=true*/) { _cs.lock(); NotifyMap::iterator it = _observers.find(name); if( it != _observers.end() ){ if( exact ){ it->second.erase( ob ); delete ob; } else { NotifySet::iterator sit = it->second.begin(); while( sit!=it->second.end() ){ AbstractObserver* pRef = (AbstractObserver*)(*sit); if( pRef->EqualTo(ob) ){ it->second.erase(sit); delete pRef; break; } sit++; } } } _cs.unlock(); }
void NotificationCenter::addObserver(const AbstractObserver& observer) { Mutex::ScopedLock lock(_mutex); _observers.push_back(observer.clone()); }