00001 /****************************************************************************** 00002 ** Copyright (c) 1992-2010 VT MAK 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 00009 00010 #ifndef observeConnection_H_ 00011 #define observeConnection_H_ 00012 00013 #include "lgrUtil.h" 00014 00015 #include <list> 00016 #include <vlutil/vlSmartPointers.h> 00017 00018 namespace MAKLogger 00019 { 00020 00022 template <typename SubjectType> 00023 class DtObserveEvent; 00024 00025 template <typename SubjectType> 00026 class DtObserver; 00027 00028 class DtObserveConnection; 00029 typedef DtBoost::shared_ptr<DtObserveConnection> DtObserveConnectionSP; 00030 00031 class DtObserveConnectionComponent; 00032 00033 00037 class DT_DLL_LGRUTIL DtObserveConnection 00038 { 00039 public: 00040 00045 template <typename SubjectType> 00046 static void connect(DtObserveEvent<SubjectType>* event, 00047 DtObserver<SubjectType>* observer) 00048 { 00050 if(event->isConnected(observer)) return; 00051 DtObserveConnection* connection = 00052 new DtObserveConnection(event,observer); 00053 DtObserveConnectionSP sharedCon(connection); 00054 event->connect(sharedCon); 00055 observer->connect(sharedCon); 00056 } 00057 00059 void disconnect(DtObserveConnectionSP); 00060 00062 DtObserveConnectionComponent* event(); 00063 00065 DtObserveConnectionComponent* observer(); 00066 00067 protected: 00068 00072 DtObserveConnection(DtObserveConnectionComponent* event,DtObserveConnectionComponent* observer); 00073 00075 DtObserveConnectionComponent* myEvent; 00076 00078 DtObserveConnectionComponent* myObserver; 00079 }; 00080 00084 class DT_DLL_LGRUTIL DtObserveConnectionComponent 00085 { 00086 public: 00087 00088 typedef std::list<DtObserveConnectionSP> ConnectionList; 00089 00090 virtual ~DtObserveConnectionComponent(); 00091 00092 virtual void connect(DtObserveConnectionSP con); 00093 00094 virtual void disconnect(DtObserveConnectionSP con); 00095 00096 virtual void disconnect(DtObserveConnectionComponent* component); 00097 00098 virtual bool isConnected(DtObserveConnectionComponent* component); 00099 00101 void disconnectAll(); 00102 00103 protected: 00104 00106 DtObserveConnectionComponent(); 00107 00109 DtObserveConnectionComponent(const DtObserveConnectionComponent&); 00110 00112 DtObserveConnectionComponent& operator=( 00113 const DtObserveConnectionComponent&); 00114 00115 DtObserveConnectionSP findEventObserverConnection( 00116 DtObserveConnectionComponent* event, 00117 DtObserveConnectionComponent* observer); 00118 00119 ConnectionList myConnections; 00120 }; 00121 00122 } 00123 00124 #endif 00125