コード例 #1
0
ファイル: NotificationCenter.cpp プロジェクト: Chingliu/poco
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;
}
コード例 #2
0
ファイル: NotificationCenter.cpp プロジェクト: as2120/ZPoco
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;
        }
    }
}
コード例 #3
0
	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();
	}
コード例 #4
0
ファイル: NotificationCenter.cpp プロジェクト: as2120/ZPoco
void NotificationCenter::addObserver(const AbstractObserver& observer)
{
    Mutex::ScopedLock lock(_mutex);
    _observers.push_back(observer.clone());
}