00001 #if !defined(__SUBJECTOBSERVER_HPP)
00002 #define __SUBJECTOBSERVER_HPP
00003
00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022
00023
00024 #if !defined(__COMMON_HPP)
00025 #include <corelinux/Common.hpp>
00026 #endif
00027
00028 #if !defined(__SUBJECT_HPP)
00029 #include <corelinux/Subject.hpp>
00030 #endif
00031
00032 #if !defined(__OBSERVER_HPP)
00033 #include <corelinux/Observer.hpp>
00034 #endif
00035
00036 #if !defined(__MAP_HPP)
00037 #include <corelinux/Map.hpp>
00038 #endif
00039
00040 DECLARE_CLASS( SubjectObserver );
00041
00048 class SubjectObserver : public CORELINUX( Subject ), CORELINUX( Observer )
00049 {
00050 CORELINUX_MULTIMAP
00051 (
00052 DwordIdentifier,
00053 CORELINUX(ObserverPtr),
00054 less<DwordIdentifier>,
00055 ObserverMap
00056 );
00057
00058 public:
00059
00060
00061
00062
00063
00065
00066 SubjectObserver( void );
00067
00069
00070 virtual ~SubjectObserver( void );
00071
00072
00073
00074 00076
00077 bool operator=( SubjectObserverCref ) const;
00078
00079
00080
00081
00082
00089 virtual void addObserver
00090 (
00091 CORELINUX( ObserverPtr ),
00092 CORELINUX( Event<corelinux::Identifier> ) *
00093 )
00094 throw ( CORELINUX( NullPointerException ) ) ;
00095
00102 virtual void removeObserver( CORELINUX( ObserverPtr ) )
00103 throw ( CORELINUX( NullPointerException ) ) ;
00104
00111 virtual void removeObserver
00112 (
00113 CORELINUX( ObserverPtr ),
00114 CORELINUX( Event<corelinux::Identifier> ) *
00115 )
00116 throw ( CORELINUX( NullPointerException ) ) ;
00117
00118
00119
00120 00126 virtual CORELINUX(Iterator< corelinux::ObserverPtr >)
00127 *createIterator( void );
00128
00136 virtual CORELINUX(Iterator< corelinux::ObserverPtr >) *createIterator
00137 (
00138 CORELINUX( Event<corelinux::Identifier> ) *
00139 )
00140 throw ( CORELINUX( NullPointerException ) ) ;
00141
00148 virtual void destroyIterator
00149 (
00150 CORELINUX(Iterator< corelinux::ObserverPtr >) *
00151 )
00152 throw ( CORELINUX( NullPointerException ) ) ;
00153
00154 protected:
00155
00157
00158 SubjectObserver( SubjectObserverCref )
00159 throw ( CORELINUX( Assertion ) );
00160
00162
00163 SubjectObserverRef operator=( SubjectObserverCref )
00164 throw ( CORELINUX( Assertion ) );
00165
00166 private:
00168
00169 ObserverMap theObserverMap;
00170
00171 };
00172
00173
00174 #endif // if !defined(__SUBJECTOBSERVER_HPP)
00175
00176 00177 00178 00179 00180 00181 00182
00183