PSCF v1.1
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
13namespace 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>
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
Abstract template for a notifier (or subject) in the Observer design pattern.
Definition: Notifier.h:42
void removeObserver(Observer< Event > &observer)
Remove an analyzer observer from the container list.
Definition: Notifier.h:89
void notifyObservers(const Event &event)
Notify the list of observers about an Event.
Definition: Notifier.h:98
void registerObserver(Observer< Event > &observer)
Register an observer.
Definition: Notifier.h:80
Abstract class template for observer in the observer design pattern.
Definition: Observer.h:25
Utility classes for scientific computation.
Definition: accumulators.mod:1