WoW Model Viewer
Your premiere tool for viewing, equipping and animating World of Warcraft models.
Loading...
Searching...
No Matches
Observable.cpp
Go to the documentation of this file.
1#include "Observable.h"
2#include "Event.h"
3#include "Observer.h"
4
9
11{
12 // we send an event to observers attached in order to react to observable destruction
13 Event l_event(this, Event::DESTROYED);
14 notify(l_event);
15
16 // we remove
17 for (std::list<Observer*>::iterator l_it = m_observerList.begin(); l_it != m_observerList.end();)
18 {
19 (*l_it)->removeObservable(this);
20 l_it = m_observerList.erase(l_it);
21 }
22}
23
25{
26 if (observerAttached(observer) == m_observerList.end())
27 {
28 m_observerList.push_back(observer);
29 observer->addObservable(this);
30 }
31}
32
34{
35 const std::list<Observer*>::iterator l_it = observerAttached(observer);
36
37 if (l_it != m_observerList.end())
38 {
39 m_observerList.erase(l_it);
40 observer->removeObservable(this);
41 }
42}
43
45{
46 for (std::list<Observer*>::iterator l_it = m_observerList.begin(); l_it != m_observerList.end(); ++l_it)
47 {
48 (*l_it)->treatEvent(&event);
49 }
50}
51
52std::list<Observer*>::iterator Observable::observerAttached(Observer* observer)
53{
54 std::list<Observer*>::iterator l_result = m_observerList.end();
55 if (observer != nullptr)
56 {
57 for (std::list<Observer*>::iterator l_it = m_observerList.begin(); l_it != m_observerList.end(); ++l_it)
58 {
59 if ((*l_it) == observer)
60 {
61 l_result = l_it;
62 break;
63 }
64 }
65 }
66 return l_result;
67}
Lightweight event object carrying a type tag and sender reference.
Definition Event.h:9
@ DESTROYED
Definition Event.h:13
void attach(Observer *)
Subscribe an observer to receive events from this object.
std::list< Observer * > m_observerList
Definition Observable.h:29
std::list< Observer * >::iterator observerAttached(Observer *)
virtual ~Observable()
void detach(Observer *)
Unsubscribe an observer.
void notify(Event &)
Broadcast an event to all attached observers.
Listener in the Observer pattern; receives events from Observable subjects.
Definition Observer.h:12
void addObservable(Observable *)
Definition Observer.cpp:36
void removeObservable(Observable *)
Definition Observer.cpp:45