observeEvent.h
Go to the documentation of this file.
00001 /******************************************************************************
00002 ** Copyright (c) 1992-2010 VT MAK
00003 ** All rights reserved.
00004 ******************************************************************************/
00005 
00008 
00009 #ifndef observeEvent_H_
00010 #define observeEvent_H_
00011 
00012 #include <list>
00013 #include <algorithm>
00014 #include <vlutil/vlSmartPointers.h>
00015 
00016 #include <vlutil/vlExceptions.h>
00017 #include "observeConnection.h"
00018 #include "observe.h"
00019 
00020 namespace MAKLogger
00021 {
00022 
00026    template<typename SubjectType>
00027    class DtObserveEvent : public DtObserveConnectionComponent
00028    {
00029 
00030    public:
00032       typedef DtObserver<SubjectType> SubjectObserver;
00033       typedef std::list<DtObserver<SubjectType>*> ObserverList;
00034 
00036       DtObserveEvent() :
00037          myObservers()
00038       {
00039       }
00040 
00042       virtual ~DtObserveEvent()
00043       {
00044       }
00045 
00054       virtual void connect(DtObserveConnectionSP con)
00055       {
00056          if(!con)
00057          {
00058             throw DtInvalidInput("Connection may not be null.");
00059          }
00060          DtObserveConnectionComponent::connect(con);
00061          SubjectObserver* observer = reinterpret_cast<SubjectObserver*>
00062             (con->observer());
00063          typename ObserverList::iterator it;
00064          it = std::find(myObservers.begin(),myObservers.end(),observer);
00065          if(it == myObservers.end())
00066          {
00067             myObservers.push_back(observer);
00068          }
00069       }
00070 
00071 
00085 
00086       virtual void disconnect(DtObserveConnectionSP con)
00087       {
00088          if(!con)
00089          {
00090             throw DtInvalidInput("Connection may not be null.");
00091          }
00092          DtObserveConnectionComponent::disconnect(con);
00093          SubjectObserver* observer = reinterpret_cast<SubjectObserver*>
00094             (con->observer());
00095          myObservers.remove(observer);
00096       }
00097 
00099       virtual void disconnect(SubjectObserver* observer)
00100       {
00101          DtObserveConnectionSP sharedCon = findEventObserverConnection(this,
00102             reinterpret_cast<DtObserveConnectionComponent*>(observer));
00103          if(sharedCon)
00104          {
00105             sharedCon->disconnect(sharedCon);
00106          }
00107       }
00108 
00111       void observeSubject(const SubjectType& value)
00112       {
00113          typename ObserverList::iterator obs;
00114          obs = myObservers.begin();
00115          for(;obs != myObservers.end();++obs)
00116          {
00117             (*obs)->observe(value);
00118          }
00119       }
00120 
00121    protected:
00122 
00124       ObserverList myObservers;
00125    };
00126 
00127 }
00128 
00129 #endif
00130 

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)