observe.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 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

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)