Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef GDCMCOMMAND_H
00016 #define GDCMCOMMAND_H
00017
00018 #include "gdcmSubject.h"
00019
00020 namespace gdcm
00021 {
00022 class Event;
00023
00028 class GDCM_EXPORT Command : public Subject
00029 {
00030 public :
00032 virtual void Execute(Subject *caller, const Event & event ) = 0;
00033
00038 virtual void Execute(const Subject *caller, const Event & event ) = 0;
00039
00040 protected:
00041 Command();
00042 ~Command();
00043
00044 private:
00045 Command(const Command&);
00046 void operator=(const Command&);
00047 };
00048
00056 template <class T>
00057 class MemberCommand : public Command
00058 {
00059 public:
00061 typedef void (T::*TMemberFunctionPointer)(Subject*, const Event &);
00062 typedef void (T::*TConstMemberFunctionPointer)(const Subject*,
00063 const Event &);
00064
00066 typedef MemberCommand Self;
00067
00068
00070 static SmartPointer<MemberCommand> New()
00071 {
00072 return new MemberCommand;
00073 }
00074
00076
00077
00080 void SetCallbackFunction(T* object,
00081 TMemberFunctionPointer memberFunction)
00082 {
00083 m_This = object;
00084 m_MemberFunction = memberFunction;
00085 }
00086 void SetCallbackFunction(T* object,
00087 TConstMemberFunctionPointer memberFunction)
00088 {
00089 m_This = object;
00090 m_ConstMemberFunction = memberFunction;
00091 }
00092
00094 virtual void Execute(Subject *caller, const Event & event )
00095 {
00096 if( m_MemberFunction )
00097 {
00098 ((*m_This).*(m_MemberFunction))(caller, event);
00099 }
00100 }
00101
00103 virtual void Execute( const Subject *caller, const Event & event )
00104 {
00105 if( m_ConstMemberFunction )
00106 {
00107 ((*m_This).*(m_ConstMemberFunction))(caller, event);
00108 }
00109 }
00110
00111 protected:
00112
00113 T* m_This;
00114 TMemberFunctionPointer m_MemberFunction;
00115 TConstMemberFunctionPointer m_ConstMemberFunction;
00116 MemberCommand():m_MemberFunction(0),m_ConstMemberFunction(0) {}
00117 virtual ~MemberCommand(){}
00118
00119 private:
00120 MemberCommand(const Self&);
00121 void operator=(const Self&);
00122
00123 };
00124
00131 template <typename T>
00132 class SimpleMemberCommand : public Command
00133 {
00134 public:
00136 typedef void (T::*TMemberFunctionPointer)();
00137
00139 typedef SimpleMemberCommand Self;
00140
00141
00143
00144
00146 static SmartPointer<SimpleMemberCommand> New()
00147 {
00148 return new SimpleMemberCommand;
00149 }
00150
00152 void SetCallbackFunction(T* object,
00153 TMemberFunctionPointer memberFunction)
00154 {
00155 m_This = object;
00156 m_MemberFunction = memberFunction;
00157 }
00158
00160 virtual void Execute(Subject *,const Event & )
00161 {
00162 if( m_MemberFunction )
00163 {
00164 ((*m_This).*(m_MemberFunction))();
00165 }
00166 }
00167 virtual void Execute(const Subject *,const Event & )
00168 {
00169 if( m_MemberFunction )
00170 {
00171 ((*m_This).*(m_MemberFunction))();
00172 }
00173 }
00174
00175 protected:
00176 T* m_This;
00177 TMemberFunctionPointer m_MemberFunction;
00178 SimpleMemberCommand():m_MemberFunction(0) {}
00179 virtual ~SimpleMemberCommand() {}
00180
00181 private:
00182 SimpleMemberCommand(const Self&);
00183 void operator=(const Self&);
00184 };
00185
00186 }
00187
00188 #endif //GDCMCOMMAND_H