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
8
namespace
sensesp
{
9
16
class
Observable
{
17
public
:
18
struct
ObserverEntry
{
19
int
id
;
20
std::function<void()>
callback
;
21
};
22
23
Observable
() {}
24
26
Observable
(
Observable
&& other)
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
sensesp::Observable::detach
void detach(int id)
Remove a previously attached observer by its ID.
Definition
observable.h:55
sensesp::Observable::Observable
Observable(Observable &&other)
Move constructor.
Definition
observable.h:26
sensesp::Observable::attach
int attach(std::function< void()> observer)
Attach an observer callback.
Definition
observable.h:40
sensesp::Observable::Observable
Observable()
Definition
observable.h:23
sensesp::Observable::notify
void notify()
Definition
observable.h:30
sensesp
Definition
sensesp.cpp:7
sensesp::Observable::ObserverEntry
Definition
observable.h:18
sensesp::Observable::ObserverEntry::callback
std::function< void()> callback
Definition
observable.h:20
sensesp::Observable::ObserverEntry::id
int id
Definition
observable.h:19
src
sensesp
system
observable.h
Generated by
1.16.1