Init
This commit is contained in:
72
cppdraft/exec/starts/on.md
Normal file
72
cppdraft/exec/starts/on.md
Normal file
@@ -0,0 +1,72 @@
|
||||
[exec.starts.on]
|
||||
|
||||
# 33 Execution control library [[exec]](./#exec)
|
||||
|
||||
## 33.9 Senders [[exec.snd]](exec.snd#exec.starts.on)
|
||||
|
||||
### 33.9.12 Sender adaptors [[exec.adapt]](exec.adapt#exec.starts.on)
|
||||
|
||||
#### 33.9.12.5 execution::starts_on [exec.starts.on]
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L3224)
|
||||
|
||||
starts_on adapts an input sender into a sender
|
||||
that will start on an execution agent belonging to
|
||||
a particular scheduler's associated execution resource[.](#1.sentence-1)
|
||||
|
||||
[2](#2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L3229)
|
||||
|
||||
The name starts_on denotes a customization point object[.](#2.sentence-1)
|
||||
|
||||
For subexpressions sch and sndr,
|
||||
if decltype((
|
||||
sch)) does not satisfy [scheduler](exec.sched#concept:scheduler "33.6 Schedulers [exec.sched]"), ordecltype((sndr)) does not satisfy [sender](exec.snd.concepts#concept:sender "33.9.3 Sender concepts [exec.snd.concepts]"),starts_on(sch, sndr) is ill-formed[.](#2.sentence-2)
|
||||
|
||||
[3](#3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L3236)
|
||||
|
||||
Otherwise,
|
||||
the expression starts_on(sch, sndr) is expression-equivalent to:transform_sender(*query-with-default*(get_domain, sch, default_domain()), *make-sender*(starts_on, sch, sndr)) except that sch is evaluated only once[.](#3.sentence-1)
|
||||
|
||||
[4](#4)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L3246)
|
||||
|
||||
Let out_sndr and env be subexpressions
|
||||
such that OutSndr is decltype((out_sndr))[.](#4.sentence-1)
|
||||
|
||||
If [*sender-for*](exec.snd.concepts#concept:sender-for "33.9.3 Sender concepts [exec.snd.concepts]")<OutSndr, starts_on_t> is false,
|
||||
then the expressions starts_on.transform_env(out_sndr, env) andstarts_on.transform_sender(out_sndr, env) are ill-formed; otherwise
|
||||
|
||||
- [(4.1)](#4.1)
|
||||
|
||||
starts_on.transform_env(out_sndr, env) is equivalent to:auto&& [_, sch, _] = out_sndr;return *JOIN-ENV*(*SCHED-ENV*(sch), *FWD-ENV*(env));
|
||||
|
||||
- [(4.2)](#4.2)
|
||||
|
||||
starts_on.transform_sender(out_sndr, env) is equivalent to:auto&& [_, sch, sndr] = out_sndr;return let_value( schedule(sch), [sndr = std::forward_like<OutSndr>(sndr)]() mutablenoexcept(is_nothrow_move_constructible_v<decay_t<OutSndr>>) {return std::move(sndr); });
|
||||
|
||||
[5](#5)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/exec.tex#L3272)
|
||||
|
||||
Let out_sndr be a subexpression denoting
|
||||
a sender returned from starts_on(sch, sndr) or one equal to such, and
|
||||
let OutSndr be the type decltype((out_sndr))[.](#5.sentence-1)
|
||||
|
||||
Let out_rcvr be a subexpression denoting a receiver
|
||||
that has an environment of type Env such that [sender_in](exec.snd.concepts#concept:sender_in "33.9.3 Sender concepts [exec.snd.concepts]")<OutSndr, Env> is true[.](#5.sentence-2)
|
||||
|
||||
Let op be an lvalue referring to the operation state
|
||||
that results from connecting out_sndr with out_rcvr[.](#5.sentence-3)
|
||||
|
||||
Calling start(op) shall start sndr on an execution agent of the associated execution resource of sch[.](#5.sentence-4)
|
||||
|
||||
If scheduling onto sch fails,
|
||||
an error completion on out_rcvr shall be executed
|
||||
on an unspecified execution agent[.](#5.sentence-5)
|
||||
Reference in New Issue
Block a user