v2.0.0
Loading...
Searching...
No Matches
observerpattern.h
Go to the documentation of this file.
1//=============================================================================================================
29
30#ifndef OBSERVERPATTERN_H
31#define OBSERVERPATTERN_H
32
33//=============================================================================================================
34// INCLUDES
35//=============================================================================================================
36
37#include "../utils_global.h"
38#include <set>
39
40//=============================================================================================================
41// QT INCLUDES
42//=============================================================================================================
43
44#include <QSet>
45#include <QSharedPointer>
46
47//=============================================================================================================
48// DEFINE NAMESPACE UTILSLIB
49//=============================================================================================================
50
51namespace UTILSLIB
52{
53
54//=============================================================================================================
55// FORWARD DECLARATIONS
56//=============================================================================================================
57
58class Subject;
59
60//=============================================================================================================
69{
70public:
71 typedef QSharedPointer<IObserver> SPtr;
72 typedef QSharedPointer<const IObserver> ConstSPtr;
73
74 //=========================================================================================================
78 virtual ~IObserver() {};
79
80 //=========================================================================================================
86 virtual void update(Subject* pSubject) = 0;
87};
88
89//=========================================================================================================
98{
99public:
100 typedef QSharedPointer<Subject> SPtr;
101 typedef QSharedPointer<const Subject> ConstSPtr;
102
103 typedef QSet<IObserver*> t_Observers;
104
105 //=========================================================================================================
109 virtual ~Subject();
110
111 //=========================================================================================================
117 void attach(IObserver* pObserver);
118
119 //=========================================================================================================
125 void detach(IObserver* pObserver);
126
127 //=========================================================================================================
132 void notify();
133
134 //=========================================================================================================
139 static bool notifyEnabled;
140
141 //=========================================================================================================
147 inline t_Observers& observers();
148
149 // //=========================================================================================================
150 // /**
151 // * Returns attached observers.
152
153 // * @return attached observers.
154 // */
155 // inline std::set<IObserver*>& observers();
156
157 //=========================================================================================================
164 {
165 return m_Observers.size();
166 };
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
Public umbrella header for UTILSLIB exposing the UTILSSHARED_EXPORT macro and build-info accessors.
#define UTILSSHARED_EXPORT
Shared utilities (I/O helpers, spectral analysis, layout management, warp algorithms).
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
void attach(IObserver *pObserver)
void detach(IObserver *pObserver)
QSharedPointer< Subject > SPtr
static bool notifyEnabled