MNE-CPP 0.1.9
A Framework for Electrophysiology
Loading...
Searching...
No Matches
observerpattern.h
Go to the documentation of this file.
1//=============================================================================================================
36#ifndef OBSERVERPATTERN_H
37#define OBSERVERPATTERN_H
38
39//=============================================================================================================
40// INCLUDES
41//=============================================================================================================
42
43#include "../utils_global.h"
44#include <set>
45
46//=============================================================================================================
47// QT INCLUDES
48//=============================================================================================================
49
50#include <QSet>
51#include <QSharedPointer>
52
53//=============================================================================================================
54// DEFINE NAMESPACE UTILSLIB
55//=============================================================================================================
56
57namespace UTILSLIB
58{
59
60//=============================================================================================================
61// FORWARD DECLARATIONS
62//=============================================================================================================
63
64class Subject;
65
66//=============================================================================================================
73{
74public:
75 typedef QSharedPointer<IObserver> SPtr;
76 typedef QSharedPointer<const IObserver> ConstSPtr;
78 //=========================================================================================================
82 virtual ~IObserver() {};
83
84 //=========================================================================================================
90 virtual void update(Subject* pSubject) = 0;
91};
92
93//=========================================================================================================
100{
101public:
102 typedef QSharedPointer<Subject> SPtr;
103 typedef QSharedPointer<const Subject> ConstSPtr;
105 typedef QSet<IObserver*> t_Observers;
107 //=========================================================================================================
111 virtual ~Subject();
112
113 //=========================================================================================================
119 void attach(IObserver* pObserver);
120
121 //=========================================================================================================
127 void detach(IObserver* pObserver);
128
129 //=========================================================================================================
134 void notify();
135
136 //=========================================================================================================
141 static bool notifyEnabled; //ToDo move this to obeservers + make it thread safe
142
143 //=========================================================================================================
149 inline t_Observers& observers();
150
151// //=========================================================================================================
152// /**
153// * Returns attached observers.
154
155// * @return attached observers.
156// */
157// inline std::set<IObserver*>& observers();
158
159 //=========================================================================================================
166 int observerNumDebug(){return m_Observers.size();};
167
168protected:
169 //=========================================================================================================
174
175private:
176 t_Observers m_Observers;
177// std::set<IObserver*> m_Observers; /**< Holds the attached observers.*/
178};
179
180//=============================================================================================================
181// INLINE DEFINITIONS
182//=============================================================================================================
183
185{
186 return m_Observers;
187}
188
189//inline std::set<IObserver*>& Subject::observers()
190//{
191// return m_Observers;
192//}
193
194} // Namespace
195
196#endif // OBSERVERPATTERN_H
#define UTILSSHARED_EXPORT
The IObserver interface provides the base class of every observer of the observer design pattern.
QSharedPointer< IObserver > SPtr
virtual void update(Subject *pSubject)=0
QSharedPointer< const IObserver > ConstSPtr
The Subject class provides the base class of every subject of the observer design pattern.
QSet< IObserver * > t_Observers
t_Observers & observers()
QSharedPointer< const Subject > ConstSPtr
QSharedPointer< Subject > SPtr
static bool notifyEnabled