cel_observable.h

Go to the documentation of this file.
00001 //----------------------------------------------------------------------------
00004 //
00005 // (C) 2003-2006 Celartem Technology Inc. All rights reserved.
00006 //----------------------------------------------------------------------------
00007 
00008 #ifndef _cel_observable_h_
00009 #define _cel_observable_h_
00010 
00011 #include "cel_types.h"
00012 #include "cel_referable.h"
00013 #include "cel_syncobjs.h"
00014 #include <vector>
00015 
00016 namespace Celartem
00017 {
00018     class Observer;
00019 
00026     class Observable : public Referable
00027     {
00028     public:
00033         virtual void notify();
00034 
00040         void attachObserver(Observer *inObserver);
00041 
00047         void detachObserver(Observer *inObserver);
00048 
00053         void detachAllObservers();
00054 
00055     protected:
00056         Observable();
00057         virtual ~Observable();
00058 
00059     private:
00060         Mutex m_mutex;
00061         std::vector<Observer*> m_observers;
00062         typedef std::vector<Observer*>::iterator Iterator;
00063 
00064         // duplication is not permitted
00065         Observable(const Observable&);
00066         Observable& operator=(const Observable&);
00067     };
00068 
00073     class Observer
00074     {
00075     public:
00079         virtual ~Observer() {}
00080 
00088         virtual void update(Observable *inObservable) = 0;
00089     };
00090 
00096     class ObserverImpl : public Observer
00097     {
00098     public:
00102         ObserverImpl();
00103 
00107         virtual ~ObserverImpl();
00108 
00116         void attachObservable(Observable *inObservable);
00117 
00125         void detachObservable(Observable *inObservable);
00126 
00132         void detachAllObservables();
00133 
00141         virtual void update(Observable *inObservable) = 0;
00142 
00143     private:
00144         Mutex m_mutex;
00145         std::vector<Observable *> m_observables;
00146         typedef std::vector<Observable *>::iterator Iterator;
00147     };
00148 
00149 } // namespace Celartem
00150 
00151 #endif // _cel_observable_h_

This document is automatically generated using doxygen 1.5.4 at Fri Jun 27 18:21:54 2008.