Go to the documentation of this file.00001
00002
00003
00004
00005
00009
00010 #ifndef observe_H_
00011 #define observe_H_
00012
00013 #include "observeConnection.h"
00014 #include "observeEvent.h"
00015
00016 namespace MAKLogger
00017 {
00018
00021 template <typename SubjectType>
00022 class DtObserver : public DtObserveConnectionComponent
00023 {
00024 public:
00025
00027 virtual ~DtObserver()
00028 {
00029 disconnectAll();
00030 }
00031
00033 virtual void disconnect(DtObserveEvent<SubjectType>* event)
00034 {
00035 DtObserveConnectionSP sharedCon = findEventObserverConnection(event,this);
00036 if(sharedCon)
00037 {
00038 sharedCon->disconnect(sharedCon);
00039 }
00040 }
00041
00043 virtual void observe(const SubjectType&) = 0;
00044 };
00045
00046
00050 template <typename SubjectType>
00051 class DtObserverCallback : public DtObserver<SubjectType>
00052 {
00053 public:
00054
00055 typedef void (*ObserverFunction)(const SubjectType&,void*);
00056
00057 DtObserverCallback(ObserverFunction function,void* userData) :
00058 myFunction(function),
00059 myData(userData)
00060 {
00061 }
00062
00063 virtual ~DtObserverCallback(){}
00064
00065 void observe(const SubjectType& subject)
00066 {
00067 (*myFunction)(subject,myData);
00068 }
00069
00070 protected:
00071
00073 DtObserverCallback(const DtObserverCallback&);
00075 DtObserverCallback& operator=(const DtObserverCallback&);
00076
00077
00078 ObserverFunction myFunction;
00079 void* myData;
00080 };
00081
00091 template <typename ClassType,typename SubjectType>
00092 class DtObserverFunctor : public DtObserver<SubjectType>
00093 {
00094 public:
00095
00096 typedef void (ClassType::*ObserverMemberFunction)(const SubjectType&);
00097
00098 DtObserverFunctor(ClassType& object,ObserverMemberFunction function) :
00099 myObject(object),
00100 myFunction(function)
00101 {
00102 }
00103
00104 virtual ~DtObserverFunctor(){}
00105
00106 void observe(const SubjectType& subject)
00107 {
00108 (myObject.*myFunction)(subject);
00109 }
00110
00111 protected:
00112
00114 DtObserverFunctor(const DtObserverFunctor&);
00116 DtObserverFunctor& operator=(const DtObserverFunctor&);
00117
00118 ClassType& myObject;
00119 ObserverMemberFunction myFunction;
00120 };
00121 }
00122
00123 #endif