SensESP 3.3.0
Universal Signal K sensor toolkit ESP32
Loading...
Searching...
No Matches
observable.h
Go to the documentation of this file.
1#ifndef SENSESP_SYSTEM_OBSERVABLE_H
2#define SENSESP_SYSTEM_OBSERVABLE_H
3
4#include <forward_list>
5#include <functional>
6#include <vector>
7
8namespace sensesp {
9
17 public:
19 int id;
20 std::function<void()> callback;
21 };
22
24
27 : observers_{std::move(other.observers_)},
28 next_id_{other.next_id_} {}
29
30 void notify() {
31 for (const ObserverEntry& entry : observers_) {
32 entry.callback();
33 }
34 }
35
40 int attach(std::function<void()> observer) {
41 int id = next_id_++;
42 // Iterate to the last element
43 auto before_end = observers_.before_begin();
44 for (auto& _ : observers_) {
45 ++before_end;
46 }
47 // Insert the new observer
48 observers_.insert_after(before_end, ObserverEntry{id, observer});
49 return id;
50 }
51
55 void detach(int id) {
56 observers_.remove_if(
57 [id](const ObserverEntry& entry) { return entry.id == id; });
58 }
59
60 private:
61 std::forward_list<ObserverEntry> observers_;
62 int next_id_ = 0;
63};
64
65} // namespace sensesp
66
67#endif
void detach(int id)
Remove a previously attached observer by its ID.
Definition observable.h:55
Observable(Observable &&other)
Move constructor.
Definition observable.h:26
int attach(std::function< void()> observer)
Attach an observer callback.
Definition observable.h:40
Definition observable.h:18
std::function< void()> callback
Definition observable.h:20
int id
Definition observable.h:19