ReactivePlusPlus
ReactiveX implementation for C++20
Toggle main menu visibility
Loading...
Searching...
No Matches
multicast.hpp
1
// ReactivePlusPlus library
2
//
3
// Copyright Aleksey Loginov 2023 - present.
4
// Distributed under the Boost Software License, Version 1.0.
5
// (See accompanying file LICENSE_1_0.txt or copy at
6
// https://www.boost.org/LICENSE_1_0.txt)
7
//
8
// Project home: https://github.com/AlexInLog/ReactivePlusPlus
9
//
10
11
#pragma once
12
13
#include <rpp/operators/fwd.hpp>
14
15
#include <rpp/observables/connectable_observable.hpp>
16
17
namespace
rpp::operators::details
18
{
19
template
<rpp::constra
int
::subject Subject>
20
struct
multicast_t
21
{
22
RPP_NO_UNIQUE_ADDRESS Subject m_subject;
23
24
template
<rpp::constra
int
::observable TObservable>
25
auto
operator()(TObservable&&
observable
)
const
26
{
27
static_assert
(std::same_as<rpp::utils::extract_observable_type_t<TObservable>, rpp::subjects::utils::extract_subject_type_t<Subject>>,
"observable and subject should be of same type"
);
28
return
rpp::connectable_observable<std::decay_t<TObservable>
, Subject>{std::forward<TObservable>(
observable
), m_subject};
29
}
30
};
31
32
template
<
template
<
typename
>
typename
Subject>
33
struct
template_multicast_t
34
{
35
template
<rpp::constra
int
::observable TObservable>
36
auto
operator()(TObservable&&
observable
)
const
37
{
38
static_assert
(
rpp::constraint::subject<Subject<rpp::utils::extract_observable_type_t<TObservable>
>>,
"subject should be constructible with type of observable"
);
39
40
return
rpp::connectable_observable<std::decay_t<TObservable>
,
41
Subject<rpp::utils::extract_observable_type_t<TObservable>>>{std::forward<TObservable>(
observable
),
42
Subject<rpp::utils::extract_observable_type_t<TObservable>>{}};
43
}
44
};
45
46
}
// namespace rpp::operators::details
47
48
namespace
rpp::operators
49
{
64
template
<rpp::constra
int
::subject Subject>
65
auto
multicast
(Subject&& subject)
66
{
67
return
details::multicast_t<std::decay_t<Subject>
>{std::forward<Subject>(subject)};
68
}
69
84
template
<
template
<
typename
>
typename
Subject>
85
auto
multicast
()
86
{
87
return
details::template_multicast_t<Subject>
{};
88
}
89
}
// namespace rpp::operators
rpp::connectable_observable
Extension over raw observable with ability to be manually connected at any time or ref_counting (shar...
Definition
connectable_observable.hpp:73
rpp::observable
Base class for any observable used in RPP. It handles core callbacks of observable.
Definition
observable.hpp:38
rpp::constraint::subject
Definition
fwd.hpp:47
rpp::operators::multicast
auto multicast()
Converts ordinary observable to rpp::connectable_observable with help of inline instsantiated subject...
Definition
multicast.hpp:85
rpp::operators::details::multicast_t
Definition
multicast.hpp:21
rpp::operators::details::template_multicast_t
Definition
multicast.hpp:34
src
rpp
rpp
operators
multicast.hpp
Generated by
1.17.0