observable.h

Go to the documentation of this file.
00001 
00015 #ifndef _TEMPLATES__OBSERVABLE_H_
00016 #define _TEMPLATES__OBSERVABLE_H_
00017 
00018 #include <iterator>
00019 #include <algorithm>
00020 #include <deque>
00021 
00022 #include "observer.h"
00023 
00027 namespace Templates
00028 {
00029         template <class T>
00030         class Observable;
00031 }
00032 
00055 template <class T>
00056 class Templates::Observable
00057 {
00058         private:
00059 
00061                 T *_self;
00062 
00064                 typedef std::deque<Observer<T> *> ObserverContainer;
00065 
00067                 ObserverContainer _observers;
00068 
00069         public:
00075                 Observable(T *self): _self(self), _observers() { }
00076 
00080                 virtual ~Observable() { }
00081 
00087                 void addObserver(Observer<T> *observer)
00088                 {
00089                         _observers.push_back(observer);
00090                 }
00091 
00097                 void deleteObserver(Observer<T> *observer)
00098                 {
00099                         _observers.erase(std::remove_if(_observers.begin(), _observers.end(),
00100                                 std::bind2nd(std::equal_to<Observer<T> *>(), observer)));
00101                 }
00102 
00106                 void cleanObservers()
00107                 {
00108                         _observers.clean();
00109                 }
00110 
00116                 void notifyObservers()
00117                 {
00118                         for (typename ObserverContainer::iterator iter = _observers.begin();
00119                                 iter != _observers.end(); ++iter) {
00120                                 (*iter)->update(_self);
00121                         }
00122                 }
00123 };
00124 
00125 #endif

Generated on Sat Dec 20 19:21:24 2008 for PGR2008 by  doxygen 1.5.6