MNE-CPP  0.1.9
A Framework for Electrophysiology
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 
57 namespace UTILSLIB
58 {
59 
60 //=============================================================================================================
61 // FORWARD DECLARATIONS
62 //=============================================================================================================
63 
64 class Subject;
65 
66 //=============================================================================================================
72 class IObserver
73 {
74 public:
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 {
101 public:
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 
168 protected:
169  //=========================================================================================================
173  Subject() {};
174 
175 private:
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
The Subject class provides the base class of every subject of the observer design pattern...
QSet< IObserver * > t_Observers
QSharedPointer< const IObserver > ConstSPtr
t_Observers & observers()
The IObserver interface provides the base class of every observer of the observer design pattern...
static bool notifyEnabled
#define UTILSSHARED_EXPORT
Definition: utils_global.h:58
virtual void update(Subject *pSubject)=0
QSharedPointer< const Subject > ConstSPtr
QSharedPointer< Subject > SPtr
QSharedPointer< IObserver > SPtr