Simpatico  v1.10
Notifier.h
1 #ifndef UTIL_NOTIFIER_H
2 #define UTIL_NOTIFIER_H
3 
4 /*
5 * Util Package - C++ Utilities for Scientific Computation
6 *
7 * Copyright 2010 - 2017, The Regents of the University of Minnesota
8 * Distributed under the terms of the GNU General Public License.
9 */
10 
11 #include <list>
12 
13 namespace Util
14 {
15 
16  using std::list;
17 
18  // Base class for component observers
19  template <typename Event> class Observer;
20 
40  template <typename Event>
41  class Notifier
42  {
43 
44  public:
45 
46  // Compiler default constructor.
47 
48  // Compiler destructor.
49 
55  void registerObserver(Observer<Event>& observer);
56 
62  void removeObserver(Observer<Event>& observer);
63 
67  void notifyObservers(const Event& event);
68 
69  private:
70 
72  std::list<Observer<Event>*> observerPtrs_;
73 
74  };
75 
76  /*
77  * Register an observer (add to list).
78  */
79  template <typename Event>
81  {
82  observerPtrs_.push_back(&observer);
83  }
84 
85  /*
86  * Remove an observer from the list.
87  */
88  template <typename Event>
90  {
91  observerPtrs_.remove(&observer);
92  }
93 
94  /*
95  * Notify observers by calling their update methods.
96  */
97  template <typename Event>
98  void Notifier<Event>::notifyObservers(const Event& event)
99  {
100  typename std::list< Observer<Event>* >::iterator pos;
101  pos = observerPtrs_.begin();
102  while (pos != observerPtrs_.end())
103  {
104  (*pos)->update(event);
105  ++pos;
106  }
107  }
108 
109 
110 }
111 #endif
void notifyObservers(const Event &event)
Notify the list of observers about an Event.
Definition: Notifier.h:98
Abstract class template for observer in the observer design pattern.
Definition: Notifier.h:19
void registerObserver(Observer< Event > &observer)
Register an observer.
Definition: Notifier.h:80
void removeObserver(Observer< Event > &observer)
Remove an analyzer observer from the container list.
Definition: Notifier.h:89
Utility classes for scientific computation.
Definition: accumulators.mod:1
Abstract template for a notifier (or subject) in the Observer design pattern.
Definition: Notifier.h:41