8#ifndef SEN_CORE_OBJ_OBJECT_MUX_H
9#define SEN_CORE_OBJ_OBJECT_MUX_H
45 void addMuxedProvider(
ObjectMux* provider);
46 void removeMuxedProvider(
ObjectMux* provider);
49 std::vector<ObjectMux*> muxedProviders_;
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;
102 using Lock =
std::scoped_lock<
std::recursive_mutex>;
110 mutable
std::recursive_mutex listenersMutex_;
111 mutable
std::recursive_mutex objectsMutex_;
~MuxedProviderListener() override
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
MuxedProviderListener()=default
Converts multiple object providers into one. Providers might reside in different threads....
Definition object_mux.h:57
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.
ObjectProviderListener()=default
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