LeviLamina
Loading...
Searching...
No Matches
Publisher.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/deps/core/utility/pub_sub/ConnectPosition.h"
5#include "mc/deps/core/utility/pub_sub/Connector.h"
6#include "mc/deps/core/utility/pub_sub/Subscription.h"
7#include "mc/deps/core/utility/pub_sub/detail/DispatchingPublisherBase.h"
8#include "mc/deps/core/utility/pub_sub/detail/ReturnPolicyType.h"
9#include "mc/deps/core/utility/pub_sub/detail/SubscriptionBody.h"
10
11namespace Bedrock::PubSub {
12
13// For the compatibility with auto generated headers
14template <auto Policy>
16 static constexpr ReturnPolicyType value = static_cast<ReturnPolicyType>(Policy);
17
18 static_assert(value == ReturnPolicyType::Aggregate || value == ReturnPolicyType::Discard, "Invalid return policy");
19};
20
21template <typename Signature, typename ThreadingModel, auto PolicyType = ReturnPolicyType::Aggregate>
22class Publisher : public Detail::DispatchingPublisherBase<
23 ThreadingModel,
24 Detail::SubscriptionBody<Signature, ReturnPolicyTraits<PolicyType>::value>>,
25 public Connector<Signature> {
26public:
27 Publisher() = default;
28 Publisher(Publisher&&) noexcept = default;
29 ~Publisher() override = default;
30 Publisher(Publisher const&) = delete;
31 Publisher& operator=(Publisher const&) = delete;
32
33private:
34 using FunctionType = Connector<Signature>::FunctionType;
36 _connectInternal(FunctionType&& fn, ConnectPosition at, ContextType&& context, std::optional<int> group) override;
37};
38
39template <typename Signature, typename ThreadingModel>
40using PublisherPtr = std::unique_ptr<Publisher<Signature, ThreadingModel>>;
41
42} // namespace Bedrock::PubSub
Definition DispatchingPublisherBase.h:9
Definition Subscription.h:10
Definition Publisher.h:15
Definition context.h:5