MNE-CPP  beta 1.0
observerpattern.h
Go to the documentation of this file.
1 //=============================================================================================================
36 #ifndef OBSERVERPATTERN_H
37 #define OBSERVERPATTERN_H
38 
39 
40 //*************************************************************************************************************
41 //=============================================================================================================
42 // INCLUDES
43 //=============================================================================================================
44 
45 #include "generics_global.h"
46 
47 
48 //*************************************************************************************************************
49 //=============================================================================================================
50 // QT STL INCLUDES
51 //=============================================================================================================
52 
53 #include <QSet>
54 #include <QSharedPointer>
55 
56 
57 //*************************************************************************************************************
58 //=============================================================================================================
59 // FORWARD DECLARATIONS
60 //=============================================================================================================
61 
62 class Subject;
63 
64 
65 //=============================================================================================================
71 class IObserver
72 {
73 public:
74  typedef QSharedPointer<IObserver> SPtr;
75  typedef QSharedPointer<const IObserver> ConstSPtr;
77  //=========================================================================================================
81  virtual ~IObserver() {};
82 
83  //=========================================================================================================
89  virtual void update(Subject* pSubject) = 0;
90 };
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  //=========================================================================================================
158  int observerNumDebug(){return m_Observers.size();};
159 
160 protected:
161  //=========================================================================================================
165  Subject() {};
166 
167 private:
168  t_Observers m_Observers;
169 };
170 
171 
172 //*************************************************************************************************************
173 //=============================================================================================================
174 // INLINE DEFINITIONS
175 //=============================================================================================================
176 
178 {
179  return m_Observers;
180 }
181 
182 #endif // OBSERVERPATTERN_H
static bool notifyEnabled
QSet< IObserver * > t_Observers
#define GENERICSSHARED_EXPORT
t_Observers & observers()
The IObserver interface provides the base class of every observer of the observer design pattern...
generics library export/import macros.
int observerNumDebug()
QSharedPointer< const IObserver > ConstSPtr
The Subject class provides the base class of every subject of the observer design pattern...
QSharedPointer< Subject > SPtr
virtual void update(Subject *pSubject)=0
QSharedPointer< IObserver > SPtr
QSharedPointer< const Subject > ConstSPtr
virtual ~IObserver()