SourceXtractorPlusPlus  0.10
Please provide a description of the project.
Observable.h
Go to the documentation of this file.
1 
23 #ifndef _SEUTILS_OBSERVABLE_H
24 #define _SEUTILS_OBSERVABLE_H
25 
26 #include <memory>
27 #include <list>
28 
29 namespace SourceXtractor {
30 
37 template <class T>
38 class Observer {
39 public:
40  virtual ~Observer() = default;
41  virtual void handleMessage(const T& message) = 0;
42 };
43 
50 template<class T>
51 class Observable {
52 
53 public:
54 
56  virtual ~Observable() = default;
57 
59  virtual void addObserver(std::shared_ptr<Observer<T>> observer) {
60  m_observers.push_back(observer);
61  }
62 
64  virtual void removeObserver(std::shared_ptr<Observer<T>> observer) {
65  m_observers.remove(observer);
66  }
67 
68 protected:
69 
70  // Notify all registered Observers with the given message
71  void notifyObservers(const T& message) const {
72  for (auto& observer : m_observers) {
73  observer->handleMessage(message);
74  }
75  }
76 
77 private:
79 
80 }; /* End of Observable class */
81 
82 } /* namespace SourceXtractor */
83 
84 
85 #endif
STL class.
virtual void addObserver(std::shared_ptr< Observer< T >> observer)
Adds an Observer that will be notified when notify Observers is called.
Definition: Observable.h:59
virtual void handleMessage(const T &message)=0
virtual ~Observer()=default
Implements the Observer pattern. Notifications will be made using a message of type T.
Definition: Observable.h:51
void notifyObservers(const T &message) const
Definition: Observable.h:71
STL class.
virtual void removeObserver(std::shared_ptr< Observer< T >> observer)
Removes a previously added Observer from the list of Observers to notify.
Definition: Observable.h:64
std::list< std::shared_ptr< Observer< T > > > m_observers
Definition: Observable.h:78
Observer interface to be used with Observable to implement the Observer pattern.
Definition: Observable.h:38
virtual ~Observable()=default
Destructor.