17#ifndef _FGE_C_SUBSCRIPTION_HPP_INCLUDED
18#define _FGE_C_SUBSCRIPTION_HPP_INCLUDED
20#include "FastEngine/fge_extern.hpp"
22#include <unordered_map>
23#include <unordered_set>
33 using SubscriberCount =
unsigned int;
35 BaseSubscription() =
default;
36 virtual ~BaseSubscription() =
default;
124class FGE_API Subscription :
public BaseSubscription
127 Subscription() =
default;
152 using SubscriptionDataType = std::unordered_map<fge::Subscriber*, SubscriberCount>;
156 SubscriptionDataType g_subData;
166class FGE_API UniqueSubscription :
public BaseSubscription
169 UniqueSubscription() =
default;
209class FGE_API Subscriber
212 Subscriber() =
default;
249 using SubscriberDataType = std::unordered_set<fge::BaseSubscription*>;
267 SubscriberDataType g_subData;
Definition C_subscription.hpp:31
virtual void detachAll()=0
Detach all subscribers.
virtual SubscriberCount detachOnce(fge::Subscriber *subscriber)=0
Detach only once a specific subscriber.
virtual bool detach(fge::Subscriber *subscriber)=0
Detach a specific subscriber.
virtual SubscriberCount attach(fge::Subscriber *subscriber)=0
Attach a specific subscriber.
virtual void onDetach(fge::Subscriber *subscriber)=0
Callback called when a subscriber is detached.
virtual SubscriberCount getCount(fge::Subscriber *subscriber) const =0
Get the SubscriberCount of a specific subscriber.
This class is a useful utility to "link" multiple objects around.
Definition C_subscription.hpp:210
fge::Subscriber & operator=(fge::Subscriber &&n) noexcept=delete
void detach(fge::BaseSubscription *subscription)
Detach from a specific subscription.
Subscriber(fge::Subscriber const &n)
Definition C_subscription.hpp:215
fge::Subscriber & operator=(fge::Subscriber const &n)
Definition C_subscription.hpp:225
void detachAll()
Detach from all subscriptions.
Subscriber(fge::Subscriber &&n) noexcept=delete
virtual void onDetach(fge::BaseSubscription *subscription)
Callback called when a subscription is detached.
Definition C_subscription.hpp:246
virtual ~Subscriber()
When the object is destroyed, it will detach from all subscriptions.
Definition C_subscription.hpp:222
This class is a useful utility to "link" multiple objects around a specific use with automatic lifeti...
Definition C_subscription.hpp:125
Subscription(fge::Subscription const &r)
Definition C_subscription.hpp:130
SubscriberCount attach(fge::Subscriber *subscriber) override
Attach a specific subscriber.
void detachAll() override
Detach all subscribers.
SubscriberCount detachOnce(fge::Subscriber *subscriber) override
Detach only once a specific subscriber.
~Subscription() override
When the object is destroyed, it will detach all subscribers.
Definition C_subscription.hpp:136
SubscriberCount getCount(fge::Subscriber *subscriber) const override
Get the SubscriberCount of a specific subscriber.
bool detach(fge::Subscriber *subscriber) override
Detach a specific subscriber.
fge::Subscription & operator=(fge::Subscription const &r)
Definition C_subscription.hpp:139
This class allow same functionality as Subscription but only allow one subscriber at a time.
Definition C_subscription.hpp:167
SubscriberCount getCount(fge::Subscriber *subscriber) const override
Get the SubscriberCount of a specific subscriber.
bool detach(fge::Subscriber *subscriber) override
Detach a specific subscriber.
void detachAll() override
Detach all subscribers.
virtual ~UniqueSubscription() override
When the object is destroyed, it will detach all subscribers.
Definition C_subscription.hpp:178
SubscriberCount attach(fge::Subscriber *subscriber) override
Attach a specific subscriber.
SubscriberCount detachOnce(fge::Subscriber *subscriber) override
Detach only once a specific subscriber.
fge::UniqueSubscription & operator=(fge::UniqueSubscription const &r)
Definition C_subscription.hpp:181
UniqueSubscription(fge::UniqueSubscription const &r)
Definition C_subscription.hpp:172