Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Observer
- #include <list>
- template <typename Event>
- class IObserver {
- public:
- virtual void Notify(Event& e) = 0;
- };
- template <typename Event>
- class Observer {
- typedef typename IObserver<Event> Interface;
- private:
- std::list<Interface*> _observers;
- public:
- Observer() {}
- virtual ~Observer() {
- deleteObservers();
- }
- void HookObserver(Interface* pObj) {
- std::list<Interface*>::iterator iter = _observers.begin();
- while (iter != _observers.end()) {
- if ((*iter) == pObj) {
- return;
- }
- }
- _observers.push_back(pObj);
- }
- int countObservers() {
- return _observers.size();
- }
- void UnHookObserver(Interface* pObj) {
- std::list<Interface*>::iterator iter = _observers.begin();
- while (iter != _observers.end()) {
- if ((*iter) == pObj) {
- _observers.erase(iter);
- return;
- }
- }
- }
- void deleteObservers() {
- _observers.clear();
- }
- void Notify(Event& e) {
- std::list<Interface*>::iterator iter = _observers.begin();
- while (iter != _observers.end()) {
- (*iter)->Notify(e);
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement