00001 00002 #ifndef CStateObservable_h 00003 #define CStateObservable_h 1 00004 00005 // EState 00006 #include "jic/base/EState.hpp" 00007 // CObserver 00008 #include "jic/base/CObserver.hpp" 00009 // stl_base 00010 #include "jic/base/stl_base.hpp" 00011 #include <iostream> 00012 00013 class CStateObservable 00014 { 00015 00016 public: 00017 CStateObservable(); 00018 00019 CStateObservable(const CStateObservable &right); 00020 00021 ~CStateObservable(); 00022 00023 CStateObservable & operator=(const CStateObservable &right); 00024 00025 friend std::ostream & operator<<(std::ostream &stream,const CStateObservable &right); 00026 00027 friend std::istream & operator>>(std::istream &stream,CStateObservable &object); 00028 00029 void removeObserver (CObserver& observer); 00030 00031 void addObserver (CObserver& observer); 00032 00033 void changeState (EState newState); 00034 00035 EState getState () const; 00036 00037 const VECTOR_pCObserver get_observers () const; 00038 void set_observers (VECTOR_pCObserver value); 00039 00040 // Additional Public Declarations 00041 00042 protected: 00043 // Additional Protected Declarations 00044 00045 private: 00046 00047 void notifyObservers (); 00048 00049 const EState get_state () const; 00050 void set_state (EState value); 00051 00052 // Additional Private Declarations 00053 00054 private: 00055 // Data Members for Associations 00056 00057 EState m_state; 00058 00059 VECTOR_pCObserver m_observers; 00060 00061 // Additional Implementation Declarations 00062 00063 }; 00064 00065 // Class CStateObservable 00066 00067 inline const EState CStateObservable::get_state () const 00068 { 00069 return m_state; 00070 } 00071 00072 inline void CStateObservable::set_state (EState value) 00073 { 00074 m_state = value; 00075 } 00076 00077 inline const VECTOR_pCObserver CStateObservable::get_observers () const 00078 { 00079 return m_observers; 00080 } 00081 00082 inline void CStateObservable::set_observers (VECTOR_pCObserver value) 00083 { 00084 m_observers = value; 00085 } 00086 00087 #endif