v2.0.0
Loading...
Searching...
No Matches
observerpattern.h
Go to the documentation of this file.
1//=============================================================================================================
35
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;
77
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;
104
105 typedef QSet<IObserver*> t_Observers;
106
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;
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 //=========================================================================================================
165 int observerNumDebug(){return m_Observers.size();};
166
167protected:
168 //=========================================================================================================
173
174private:
175 t_Observers m_Observers;
176// std::set<IObserver*> m_Observers; /**< Holds the attached observers.*/
177};
178
179//=============================================================================================================
180// INLINE DEFINITIONS
181//=============================================================================================================
182
184{
185 return m_Observers;
186}
187
188//inline std::set<IObserver*>& Subject::observers()
189//{
190// return m_Observers;
191//}
192
193} // Namespace
194
195#endif // OBSERVERPATTERN_H
utils library export/import macros.
#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