YOrch
1.0.0
Loading...
Searching...
No Matches
concepts.hpp
Go to the documentation of this file.
1
#pragma once
2
3
#include <concepts>
// IWYU pragma: keep
4
#include <type_traits>
// IWYU pragma: keep
5
#include <utility>
6
7
#include "../context.hpp"
8
#include "../slots/direct_out.hpp"
9
#include "../task_adapters/concepts.hpp"
// IWYU pragma: keep
10
11
namespace
yorch
{
12
26
template
<
typename
Task,
typename
Ctx,
typename
Prev = no_prev>
27
concept
executable_task
=
28
requires
(Task&&
task
, exec_context<Ctx, Prev>& ec) {
29
std::forward<Task>(
task
).invoke_raw(ec);
30
} &&
31
detail::declared_task_raw_result_matches_invoke_raw_v<Task, Ctx, Prev>
&&
32
requires
(Task&&
task
,
exec_context<Ctx, Prev>
& ec) {
33
requires
noexcept
(std::forward<Task>(
task
).invoke_raw(ec));
34
};
35
36
template
<
typename
Task,
typename
Ctx,
typename
Prev = no_prev>
37
concept
executable_direct_output_task
=
38
direct_output_task<Task, Ctx, Prev>
&&
39
requires
(
40
Task&&
task
,
41
exec_context<Ctx, Prev>& ec,
42
detail::typed_slot<detail::declared_task_output_t<Task>
>& slot) {
43
{
44
std::forward<Task>(
task
).invoke_into(
45
ec,
46
direct_out<
detail::declared_task_output_t<Task>
> {slot})
47
} -> std::same_as<step_result>;
48
requires
noexcept
(std::forward<Task>(
task
).invoke_into(
49
ec,
50
direct_out<
detail::declared_task_output_t<Task>
> {slot}));
51
};
52
53
}
// namespace yorch
yorch::direct_output_task
Definition
concepts.hpp:28
yorch::executable_direct_output_task
Definition
concepts.hpp:37
yorch::executable_task
Describes the main execution protocol accepted by run_task(...).
Definition
concepts.hpp:27
yorch::detail::is_adapter_descriptor_v
constexpr bool is_adapter_descriptor_v
Definition
adapters.hpp:63
yorch
Definition
adapters.hpp:9
yorch::task
constexpr auto task(F &&f)
Definition
core.hpp:207
yorch::exec_context
Lightweight borrowed view used during execution.
Definition
context.hpp:187
include
yorch
executor
concepts.hpp
Generated by
1.9.8