source/Lib/Observer.h
Go to the documentation of this file.
00001 
00006 #ifndef __OBSERVER_H__
00007 #define __OBSERVER_H__
00008 
00009 #include <list>
00010 #include <iterator>
00011 
00016 class Information
00017 {
00018 };
00019 
00024 class Observer
00025 {
00026 public:
00032     virtual bool update(Information* i_pcInformation=0) = 0;
00033 };
00034 
00035 
00036 
00041 class Subject
00042 {
00043 public:
00044     Subject(){ }
00045     virtual ~Subject(){ }
00046 
00052     virtual void attach(Observer* i_pcObserver)
00053     {
00054         m_pcObserverList.push_back(i_pcObserver);
00055     }
00056 
00062     virtual void detach(Observer* i_pcObserver)
00063     {
00064         std::list<Observer*>::iterator a_Iterator;
00065         for(a_Iterator=m_pcObserverList.begin(); a_Iterator!=m_pcObserverList.end(); ++a_Iterator)
00066         {
00067             if( (*a_Iterator)==i_pcObserver ) m_pcObserverList.erase(a_Iterator);
00068         }
00069     }
00070 
00078     virtual bool hasObserver(Observer* i_pcObserver)
00079     {
00080         std::list<Observer*>::iterator a_Iterator;
00081         for(a_Iterator=m_pcObserverList.begin(); a_Iterator!=m_pcObserverList.end(); ++a_Iterator)
00082         {
00083             if( (*a_Iterator)==i_pcObserver ) return true;
00084         }
00085 
00086         return false;
00087     }
00088 
00089 protected:
00095     virtual void notify(Information* i_pcInformation=0)
00096     {
00097         bool a_bRet=false;
00098 
00099         std::list<Observer*>::iterator a_Iterator;
00100         for(a_Iterator=m_pcObserverList.begin(); a_Iterator!=m_pcObserverList.end(); ++a_Iterator)
00101         {
00102             a_bRet = (*a_Iterator)->update(i_pcInformation);
00103         }
00104     }
00105 
00109     std::list<Observer*> m_pcObserverList;
00110 private:
00111 
00112 };
00113 
00114 #endif  //__OBSERVER_H__
 All Classes Files Functions Variables Enumerations Enumerator Defines