roo_transceivers
API Documentation for roo_transceivers
Loading...
Searching...
No Matches
multiverse.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace roo_transceivers {
6
7/// Universe that combines multiple other universes into one.
8class Multiverse : public Universe, public EventListener {
9 public:
10 Multiverse(std::vector<Universe*> universes)
11 : universes_(std::move(universes)) {
12 for (auto universe : universes_) {
13 universe->addEventListener(this);
14 }
15 }
16
17 size_t deviceCount() const override {
18 size_t count = 0;
19 for (const auto& universe : universes_) {
20 count += universe->deviceCount();
21 }
22 return count;
23 }
24
26 std::function<bool(const DeviceLocator&)> callback) const override {
27 for (const auto& universe : universes_) {
28 if (!universe->forEachDevice(callback)) return false;
29 }
30 return true;
31 }
32
34 const DeviceLocator& locator,
35 roo_transceivers_Descriptor& descriptor) const override {
36 for (const auto& universe : universes_) {
37 if (universe->getDeviceDescriptor(locator, descriptor)) return true;
38 }
39 return false;
40 }
41
42 Measurement read(const SensorLocator& locator) const override {
43 for (const auto& universe : universes_) {
44 Measurement m = universe->read(locator);
46 return m;
47 }
48 }
49 return Measurement();
50 }
51
52 bool write(const ActuatorLocator& locator, float value) override {
53 for (const auto& universe : universes_) {
54 if (universe->write(locator, value)) return true;
55 }
56 return false;
57 }
58
59 void requestUpdate() override {
60 for (const auto& universe : universes_) {
61 universe->requestUpdate();
62 }
63 }
64
65 virtual void addEventListener(EventListener* listener) {
66 listeners_.insert(listener);
67 }
68
69 virtual void removeEventListener(EventListener* listener) {
70 listeners_.erase(listener);
71 }
72
73 void devicesChanged() override {
74 for (auto listener : listeners_) {
75 listener->devicesChanged();
76 }
77 }
78
79 void newReadingsAvailable() override {
80 for (auto listener : listeners_) {
81 listener->newReadingsAvailable();
82 }
83 }
84
85 private:
86 std::vector<Universe*> universes_;
87 roo_collections::FlatSmallHashSet<EventListener*> listeners_;
88};
89
90} // namespace roo_transceivers
Identifies actuator within a transceiver device.
Definition id.h:104
Identifies a transceiver device by schema and device id.
Definition id.h:21
Listener for universe-level change notifications.
Definition notification.h:9
Measurement of a quantity at a specific time.
Definition measurement.h:11
roo_transceivers_Quantity quantity() const
Returns the quantity type.
Definition measurement.h:35
Universe that combines multiple other universes into one.
Definition multiverse.h:8
void newReadingsAvailable() override
Called when new readings are available.
Definition multiverse.h:79
virtual void removeEventListener(EventListener *listener)
Removes a previously registered event listener.
Definition multiverse.h:69
bool forEachDevice(std::function< bool(const DeviceLocator &)> callback) const override
Iterates over all transceiver devices in this universe, calling callback for each device.
Definition multiverse.h:25
virtual void addEventListener(EventListener *listener)
Registers a listener for device-set and reading update events.
Definition multiverse.h:65
void devicesChanged() override
Called when the set of devices changes.
Definition multiverse.h:73
bool write(const ActuatorLocator &locator, float value) override
Writes to the actuator identified by locator.
Definition multiverse.h:52
Measurement read(const SensorLocator &locator) const override
Returns the latest known reading of the sensor identified by locator.
Definition multiverse.h:42
bool getDeviceDescriptor(const DeviceLocator &locator, roo_transceivers_Descriptor &descriptor) const override
Retrieves the descriptor for the transceiver identified by locator.
Definition multiverse.h:33
void requestUpdate() override
Requests sensor reading update from underlying devices.
Definition multiverse.h:59
size_t deviceCount() const override
Returns the total number of transceiver devices in this universe.
Definition multiverse.h:17
Multiverse(std::vector< Universe * > universes)
Definition multiverse.h:10
Identifies sensor within a transceiver device.
Definition id.h:57
An abstract collection of transceiver devices.
Definition universe.h:19
Definition id.h:151
@ roo_transceivers_Quantity_kUnspecifiedQuantity