43#pragma warning(push, 3)
55template<
typename Event>
class Notifier;
56template<
typename Event>
class Observer;
76 NotifierColl::iterator pos = std::find(mNotifiers.begin(),
77 mNotifiers.end(), ¬ifier);
79 if (pos != mNotifiers.end())
81 mNotifiers.erase(pos);
92 while (mNotifiers.size() > 0)
95 assert(notifier &&
"ERROR: NULL pointer in collection.");
110#define DECLARE_OBSERVER(Event) \
111 virtual void NotifyMe(Notifier<Event>& observer) \
112 {Notifier<Event>::AddObserver(observer);}
125 for (
int index = mObservers.size(); index--;)
127 mObservers[index]->NotificationEnded(*
this);
134 for (
unsigned int index = 0; index < mObservers.size(); index++)
136 mObservers[index]->HandleNotification(event);
143 ObserverColl::iterator pos = std::find(mObservers.begin(),
144 mObservers.end(), &observer);
146 if (pos == mObservers.end())
148 observer.mNotifiers.push_back(
this);
149 mObservers.push_back(&observer);
156 ObserverColl::iterator pos = std::find(mObservers.begin(),
157 mObservers.end(), &observer);
159 if (pos != mObservers.end())
162 mObservers.erase(pos);
167 {
return !mObservers.empty();}
175#define DECLARE_NOTIFIER(Event) \
176 virtual void NotifyObservers(Event& event) \
177 {Notifier<Event>::NotifyObservers(event);} \
178 virtual void AddObserver(Observer<Event>& observer) \
179 {Notifier<Event>::AddObserver(observer);} \
180 virtual void RemoveObserver(Observer<Event>& observer) \
181 {Notifier<Event>::RemoveObserver(observer);}
200template<
typename T,
typename V>
218template<
typename T,
typename O>
236template<
typename A,
typename O>
256template<
typename A,
typename B>
virtual void RemoveObserver(Observer< Event > &observer)
Remove an observer of this event.
virtual void AddObserver(Observer< Event > &observer)
Add an observer of this event.
virtual bool HasObservers(void) const
virtual void NotifyObservers(Event &event)
Send event notification to all observers of this event.
std::vector< Observer< Event > * > ObserverColl
void StopObserving()
Stop observing event.
virtual void NotifyMe(Notifier< Event > ¬ifier)
Request notification of this event.
virtual void HandleNotification(Event &)=0
Handle event notification.
virtual void NotificationEnded(const Notifier< Event > ¬ifier)
Notifier has ended notification of this event.
Observer(const Observer< Event > &observer)
const Observer< Event > & operator=(const Observer< Event > &)
std::vector< Notifier< Event > * > NotifierColl
TypedActionPtr(A action, O *data)
TypedEventPair(A itemA, B itemB)
TypedEventPtr(O *subject)