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__