#ifdef HAVE_CONFIG_H #include #endif #include "isubject.h" #include "interfaces/observer.h" #include #include namespace KMail { ISubject::~ISubject() { mObserverList.clear(); } void ISubject::attach( Interface::Observer * pObserver ) { if ( tqFind( mObserverList.begin(), mObserverList.end(), pObserver ) == mObserverList.end() ) mObserverList.push_back( pObserver ); } void ISubject::detach( Interface::Observer * pObserver ) { TQValueVector::iterator it = tqFind( mObserverList.begin(), mObserverList.end(), pObserver ); if ( it != mObserverList.end() ) mObserverList.erase( it ); } void ISubject::notify() { kdDebug(5006) << "ISubject::notify " << mObserverList.size() << endl; // iterate over a copy (to prevent crashes when // {attach(),detach()} is called from an Observer::update() const TQValueVector copy = mObserverList; for ( TQValueVector::const_iterator it = copy.begin() ; it != copy.end() ; ++it ) { if ( (*it) ) { (*it)->update( this ); } } } }