firmware/src/Observer.h

42 lines
723 B
C
Raw Normal View History

2020-02-06 15:39:21 +00:00
#pragma once
#include <Arduino.h>
#include <list>
class Observable;
class Observer
{
Observable *observed;
public:
2020-02-06 15:39:21 +00:00
Observer() : observed(NULL) {}
virtual ~Observer();
void observe(Observable *o);
private:
friend class Observable;
2020-02-06 15:39:21 +00:00
virtual void onNotify(Observable *o) = 0;
};
class Observable
{
std::list<Observer *> observers;
public:
2020-02-06 15:39:21 +00:00
void notifyObservers()
{
for (std::list<Observer *>::const_iterator iterator = observers.begin(); iterator != observers.end(); ++iterator) {
2020-02-06 15:39:21 +00:00
(*iterator)->onNotify(this);
}
}
void addObserver(Observer *o) { observers.push_back(o); }
2020-02-06 15:39:21 +00:00
void removeObserver(Observer *o) { observers.remove(o); }
2020-02-06 15:39:21 +00:00
};