Sen API
Sen Libraries
Loading...
Searching...
No Matches
object_mux.h
Go to the documentation of this file.
1// === object_mux.h ====================================================================================================
2// Sen Infrastructure
3// Released under the Apache License v2.0 (SPDX-License-Identifier Apache-2.0).
4// See the LICENSE.txt file for more information.
5// © Airbus SAS, Airbus Helicopters, and Airbus Defence and Space SAU/GmbH/SAS.
6// =====================================================================================================================
7
8#ifndef SEN_CORE_OBJ_OBJECT_MUX_H
9#define SEN_CORE_OBJ_OBJECT_MUX_H
10
11// sen
13
14// std
15#include <mutex>
16
17namespace sen
18{
19
22
23// forward declaration
24class ObjectMux;
25
29{
30 SEN_NOCOPY_NOMOVE(MuxedProviderListener)
31
32public:
35
36public:
38 virtual void onExistingObjectsReadded(const ObjectAdditionList& additions) = 0;
39
41 virtual void onObjectsRefCountReduced(const ObjectRemovalList& removals) = 0;
42
43private:
44 friend class ObjectMux;
45 void addMuxedProvider(ObjectMux* provider);
46 void removeMuxedProvider(ObjectMux* provider);
47
48private:
49 std::vector<ObjectMux*> muxedProviders_;
50};
51
56class ObjectMux final: public ObjectProviderListener, public ObjectProvider
57{
58public:
59 SEN_NOCOPY_NOMOVE(ObjectMux)
60
61public:
62 ObjectMux() = default;
63 ~ObjectMux() override = default;
64
65public: // implements ObjectProvider (public methods)
66 void addListener(ObjectProviderListener* listener, bool notifyAboutExistingObjects) override;
67 void removeListener(ObjectProviderListener* listener, bool notifyAboutExistingObjects) override;
68 [[nodiscard]] bool hasListener(ObjectProviderListener* listener) const noexcept override;
69 [[nodiscard]] bool hasListeners() const noexcept override;
70
71public:
72 void addMuxedListener(MuxedProviderListener* listener, bool notifyAboutExistingObjects);
73 void removeMuxedListener(MuxedProviderListener* listener, bool notifyAboutExistingObjects);
74 [[nodiscard]] bool hasMuxedListener(MuxedProviderListener* listener) const noexcept;
75
76protected: // implements ObjectProvider (protected methods)
77 void notifyAddedOnExistingObjects(ObjectProviderListener* listener) override;
78 void notifyRemovedOnExistingObjects(ObjectProviderListener* listener) override;
79 void notifyObjectsAdded(const ObjectAdditionList& additions) override;
80 void notifyObjectsRemoved(const ObjectRemovalList& removals) override;
81
82protected:
87
89 virtual void muxedListenerAdded(MuxedProviderListener* listener, bool notifyAboutExistingObjects);
90
92 virtual void muxedListenerRemoved(MuxedProviderListener* listener, bool notifyAboutExistingObjects);
93
96
97protected: // implements ObjectProviderListener
98 void onObjectsAdded(const ObjectAdditionList& additions) override;
99 void onObjectsRemoved(const ObjectRemovalList& removals) override;
100
101private:
102 using Lock = std::scoped_lock<std::recursive_mutex>;
103
104private:
106 void muxedListenerDeleted(MuxedProviderListener* listener);
107
108private:
109 std::unordered_map<ObjectId, ObjectAdditionList> presentObjects_;
110 mutable std::recursive_mutex listenersMutex_;
111 mutable std::recursive_mutex objectsMutex_;
112
113 std::vector<MuxedProviderListener*> muxedListeners_;
114};
115
117
118} // namespace sen
119
120#endif // SEN_CORE_OBJ_OBJECT_MUX_H
virtual void onObjectsRefCountReduced(const ObjectRemovalList &removals)=0
Called when an object is removed, but other providers for the ObjectMux also provide it.
virtual void onExistingObjectsReadded(const ObjectAdditionList &additions)=0
Called when an object is added that is already present in the ObjectMux's list.
friend class ObjectMux
Definition object_mux.h:44
Converts multiple object providers into one. Providers might reside in different threads....
Definition object_mux.h:57
ObjectMux()=default
void notifyMuxedRemovedOnExistingObjects(MuxedProviderListener *listener)
bool hasListeners() const noexcept override
Returns true if there are registered listeners.
void onObjectsAdded(const ObjectAdditionList &additions) override
Called when objects are been added to a source.
void notifyMuxedAddedOnExistingObjects(MuxedProviderListener *listener)
void callOnObjectsRefCountReduced(MuxedProviderListener *listener, const ObjectRemovalList &removals) const
virtual void muxedListenerAdded(MuxedProviderListener *listener, bool notifyAboutExistingObjects)
Does nothing by default.
void removeMuxedListener(MuxedProviderListener *listener, bool notifyAboutExistingObjects)
~ObjectMux() override=default
void notifyExistingObjectsReadded(const ObjectAdditionList &additions)
bool hasListener(ObjectProviderListener *listener) const noexcept override
Returns true if the listener has been added.
void notifyAddedOnExistingObjects(ObjectProviderListener *listener) override
Subclasses must call onObjectAdded on the listener for all the existing objects.
void notifyObjectsRefCountReduced(const ObjectRemovalList &removals)
void removeListener(ObjectProviderListener *listener, bool notifyAboutExistingObjects) override
Un-registers an event listener.
void notifyObjectsRemoved(const ObjectRemovalList &removals) override
Calls onObjectRemoved on all the registered listeners.
void addMuxedListener(MuxedProviderListener *listener, bool notifyAboutExistingObjects)
bool hasMuxedListener(MuxedProviderListener *listener) const noexcept
void notifyRemovedOnExistingObjects(ObjectProviderListener *listener) override
Subclasses must call onObjectRemoved on the listener for all the existing objects.
void notifyObjectsAdded(const ObjectAdditionList &additions) override
Calls onObjectAdded on all the registered listeners.
friend class MuxedProviderListener
Definition object_mux.h:105
void addListener(ObjectProviderListener *listener, bool notifyAboutExistingObjects) override
Registers an event listener.
void callOnExistingObjectsReadded(MuxedProviderListener *listener, const ObjectAdditionList &additions) const
virtual void muxedListenerRemoved(MuxedProviderListener *listener, bool notifyAboutExistingObjects)
Does nothing by default.
void onObjectsRemoved(const ObjectRemovalList &removals) override
Called when objects will be removed from a source.
friend class ObjectProvider
Definition object_provider.h:128
std::vector< ObjectAddition > ObjectAdditionList
Sequence of object additions.
Definition object_provider.h:71
std::vector< ObjectRemoval > ObjectRemovalList
Sequence of object removals.
Definition object_provider.h:74
Definition assert.h:17
STL namespace.