Iros
Loading...
Searching...
No Matches
connect.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "
di/execution/concepts/operation_state.h
"
4
#include "
di/execution/concepts/receiver_of.h
"
5
#include "
di/execution/concepts/sender.h
"
6
#include "
di/execution/interface/connect_awaitable.h
"
7
#include "
di/execution/meta/completion_signatures_of.h
"
8
#include "
di/execution/meta/env_of.h
"
9
#include "
di/execution/query/is_debug_env.h
"
10
#include "
di/function/tag_invoke.h
"
11
12
namespace
di::execution
{
13
namespace
detail
{
14
struct
ConnectFunction
;
15
16
template
<
typename
Sender,
typename
Receiver>
17
concept
CustomConnect
=
18
concepts::Sender<Sender>
&&
19
concepts::ReceiverOf<Receiver, meta::CompletionSignaturesOf<Sender, meta::EnvOf<Receiver>
>> &&
20
concepts::TagInvocable<ConnectFunction, Sender, Receiver>
;
21
22
template
<
typename
Sender,
typename
Receiver>
23
concept
AwaitableConnect
=
requires
(Sender&& sender, Receiver&& receiver) {
24
connect_awaitable_ns::connect_awaitable
(util::forward<Sender>(sender), util::forward<Receiver>(receiver));
25
};
26
27
struct
ConnectFunction
{
28
template
<
typename
Sender,
typename
Receiver>
29
requires
(
CustomConnect<Sender, Receiver>
||
AwaitableConnect<Sender, Receiver>
||
30
concepts::DebugEnv<meta::EnvOf<Receiver>
>)
31
constexpr
auto
operator
()(Sender&& sender, Receiver&& receiver)
const
->
concepts::OperationState
auto
{
32
if
constexpr
(
CustomConnect<Sender, Receiver>
) {
33
return
function::tag_invoke
(*
this
, util::forward<Sender>(sender), util::forward<Receiver>(receiver));
34
}
else
if
constexpr
(
AwaitableConnect<Sender, Receiver>
) {
35
return
connect_awaitable_ns::connect_awaitable
(util::forward<Sender>(sender),
36
util::forward<Receiver>(receiver));
37
}
38
}
39
};
40
}
41
42
constexpr
inline
auto
connect
=
detail::ConnectFunction
{};
43
}
completion_signatures_of.h
di::concepts::DebugEnv
Check the given environment is a debug environment.
Definition
is_debug_env.h:49
di::concepts::OperationState
Definition
operation_state.h:9
di::concepts::ReceiverOf
Definition
receiver_of.h:25
di::concepts::Sender
Definition
sender.h:11
di::concepts::TagInvocable
Definition
tag_invoke.h:33
di::execution::detail::AwaitableConnect
Definition
connect.h:23
di::execution::detail::CustomConnect
Definition
connect.h:17
connect_awaitable.h
env_of.h
is_debug_env.h
di::execution::connect_awaitable_ns::connect_awaitable
constexpr auto connect_awaitable
Definition
connect_awaitable.h:173
di::execution::detail
Definition
read.h:70
di::execution
Definition
bulk.h:30
di::execution::connect
constexpr auto connect
Definition
connect.h:42
di::function::tag_invoke_ns::tag_invoke
constexpr tag_invoke_detail::TagInvokeFn tag_invoke
Definition
tag_invoke.h:22
operation_state.h
receiver_of.h
sender.h
di::execution::detail::ConnectFunction
Definition
connect.h:27
tag_invoke.h
libs
di
include
di
execution
interface
connect.h
Generated by
1.13.0