observeConnection.h
Go to the documentation of this file.
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 

Document ID: Generated on Tue Oct 11 19:41:03 EDT 2011 from SVN revision 107422
Copyright © 2005-2011 VT MÄK Inc. All Rights Reserved (www.mak.com)