Skip to content

Commit 7aab146

Browse files
committed
Deploying to gh-pages from @ 6f1b72b 🚀
1 parent cc80997 commit 7aab146

File tree

3 files changed

+149
-40
lines changed

3 files changed

+149
-40
lines changed

md_docs_overview.html

Lines changed: 140 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,8 @@ <h2><a class="anchor" id="autotoc_md4"></a>
438438
</details>
439439
<h2><a class="anchor" id="autotoc_md5"></a>
440440
Queries</h2>
441-
<p>The queries are used to obtain properties associated with an object. Except <code><a href="‘#forwarding-query’">forwarding_query</a></code>, <code><a href="‘#get-env’">get_env</a></code>, and <code><a href="‘#get-completion-signatures’">get_completion_signatures</a></code> the queries work on <a href="‘#environment’">environments</a>. The <a href="‘#environment’">environment</a> queries are defined by providing a member <code>query(<em>query_t</em>, <em>a...</em>) const</code> on the <a href="‘#environment’">environment</a> object. </p><details >
441+
<p>The queries are used to obtain properties associated with an object.</p>
442+
<details >
442443
<summary >
443444
Example defining a query on an environment</summary>
444445
<p>This example shows how to define an environment class which provides a <a href="‘#get-allocator’"><code>get_allocator</code></a> query. The objects stores a <code>std::pmr::memory_resource*</code> and returns a correspondingly initialized <code>std::pmr::polymorphic_allocator&lt;&gt;</code>.</p>
@@ -454,7 +455,16 @@ <h2><a class="anchor" id="autotoc_md5"></a>
454455
<summary >
455456
<code>forwarding_query(<em>query</em>) -&gt; bool</code></summary>
456457
<p><b>Default</b>: <code>false</code> <br />
457-
<code>forwarding_query(<em>query</em>)</code> is a <code>constexpr</code> query used to determine if the query <code><em>query</em></code> should be forwarded when wrapping an environment. </p><blockquote class="doxtable">
458+
The expression <code>forwarding_query(<em>query</em>)</code> is a <code>constexpr</code> query used to determine if the query <code><em>query</em></code> should be forwarded when wrapping an environment. The expression is required to be a core constant expression if <code><em>query</em></code> is a core constant expression.</p>
459+
<p>The result of the expression is determined as follows: </p><ol>
460+
<li>
461+
The result is the value of the expression <code><em>query</em>.query(forwarding_query)</code> if this expression is valid and <code>noexcept</code>. </li>
462+
<li>
463+
The result is <code>true</code> if the type of <code><em>query</em></code> is <code>public</code>ly derived from <code>forwarding_query</code>. </li>
464+
<li>
465+
Otherwise the result is <code>false</code>. </li>
466+
</ol>
467+
<blockquote class="doxtable">
458468
<details >
459469
<summary >
460470
Example</summary>
@@ -480,7 +490,13 @@ <h2><a class="anchor" id="autotoc_md5"></a>
480490
<summary >
481491
<code>get_env(<em>queryable</em>) -&gt; <em>env</em></code></summary>
482492
<p><b>Default</b>: <a href="#empty_env"><code>empty_env</code></a> <br />
483-
<code>get_env(<em>queryable</em>)</code> is used to get the environment <code><em>env</em></code> associated with <code><em>queryable</em></code>. To provide a non-default environment for a <code><em>queryable</em></code> a <code>get_env</code> member needs to be defined. If <code><em>queryable</em></code> doesn’t provide the <code>get_env</code> query an object of type <code><a href="‘#empty_env’">empty_env</a></code> is returned. </p><div> <details >
493+
The expresion <code>get_env(<em>queryable</em>)</code> is used to get the environment <code><em>env</em></code> associated with <code><em>queryable</em></code>. To provide a non-default environment for a <code><em>queryable</em></code> a <code>get_env</code> member needs to be defined. If <code><em>queryable</em></code> doesn’t provide the <code>get_env</code> query an object of type <code><a href="‘#empty_env’">empty_env</a></code> is returned. The value of the expression is </p><ol>
494+
<li>
495+
the result of <code>as_const(<em>queryable</em>).get_env()</code> if this expression is valid and <code>noexcept</code>. </li>
496+
<li>
497+
<code>empty_env</code> otherwise. </li>
498+
</ol>
499+
<div> <details >
484500
<summary >
485501
Example</summary>
486502
<p>The example defines an <a href="‘#environment’">environment</a> class <code>env</code> which stores a pointer to the relevant data and is returned as the <a href="‘#environment’">environment</a> for the type <code>queryable</code>:</p>
@@ -501,7 +517,17 @@ <h2><a class="anchor" id="autotoc_md5"></a>
501517
<summary >
502518
<code>get_allocator(<em>env</em>) -&gt; <em>allocator</em></code></summary>
503519
<p><b>Default</b>: <em>none</em> <br />
504-
<code>get_allocator(<em>env</em>)</code> returns an <code><em>allocator</em></code> for any memory allocations in the respective context. If <code><em>env</em></code> doesn’t support this query any attempt to access it will result in a compilation error. </p><div> <details >
520+
The expression <code>get_allocator(<em>env</em>)</code> returns an <code><em>allocator</em></code> for any memory allocations in the respective context. If <code><em>env</em></code> doesn’t support this query any attempt to access it will result in a compilation error. The value of the expression <code>get_allocator(<em>env</em>)</code> is the result of <code>as_const(<em>env</em>).query(get_allocator)</code> if </p><ul>
521+
<li>
522+
the expression is valid; </li>
523+
<li>
524+
the expression is <code>noexcept</code>; </li>
525+
<li>
526+
the result of the expression satisfies <code><em>simple-allocator</em></code>. </li>
527+
</ul>
528+
<p>Otherwise the expression is ill-formed. </p>
529+
</details>
530+
<div> <details >
505531
<summary >
506532
Example</summary>
507533
<p>This example shows how to define an environment class which provides a <a href="‘#get-allocator’"><code>get_allocator</code></a> query. The objects stores a <code>std::pmr::memory_resource*</code> and returns a correspondingly initialized <code>std::pmr::polymorphic_allocator&lt;&gt;</code>.</p>
@@ -513,58 +539,142 @@ <h2><a class="anchor" id="autotoc_md5"></a>
513539
<div class="line"> }</div>
514540
<div class="line">};</div>
515541
</div><!-- fragment --> </details>
516-
</div> </details>
517-
<details >
542+
</div> <details >
518543
<summary >
519-
<code>get_completion_scheduler&lt;<em>tag</em>&gt;(<em>env</em>) -&gt; <em>scheduler</em></code></summary>
544+
<code>get_completion_scheduler&lt;&lt;iTtag&gt;(<em>env</em>) -&gt; <em>scheduler</em></code></summary>
520545
<p><b>Default</b>: <em>none</em> <br />
521-
If the expression <code>get_completion_scheduler&lt;tag&gt;(get_env(<em>sender</em>))</code> is well-formed and returns a scheduler it defines the scheduler on which the completion <code><em>tag</em></code> executes. In particular <code>get_completion_scheduler&lt;set_value_t&gt;(schedule(<em>sched</em>))</code> returns <code><em>sched</em></code>. </p>
546+
The expression <code>get_complet_scheduler&lt;Tag&gt;(<em>env</em>)</code> yields the completion scheduler for the completion signal <code>Tag</code> associated with <code><em>env</em></code>. This query can be used to determine the scheduler a sender <code><em>sender</em></code> completes on for a given completion signal <code>Tag</code> by using <code>get_completion_scheduler&lt;Tag&gt;(get_env(<em>sender</em>))</code>. The value of the expression is equivalent to <code>as_const(<em>env</em>).query(get_completion_scheduler&lt;Tag&gt;)</code> if </p><ol>
547+
<li>
548+
<code>Tag</code> is one of the types <code>set_value_t</code>, <code>set_error_t</code>, or <code>set_stopped_t</code>; </li>
549+
<li>
550+
this expression is valid; </li>
551+
<li>
552+
this expression is <code>noexcept</code>; </li>
553+
<li>
554+
the expression’s type satisfies <code>scheduler</code>. </li>
555+
</ol>
556+
<p>Otherwise the expression is invalid. </p>
522557
</details>
523558
<details >
524559
<summary >
525560
<code>get_completion_signatures(<em>sender</em>, <em>env</em>)</code></summary>
526-
<p>The expression <code>get_completion_signatures(<em>sender</em>, <em>env</em>)</code> returns an object whose type is a specialization of <a href="‘#completion-signatures’"><code>completion_signatures</code></a> defining the possible completion signatures of <code><em>sender</em></code> when connected to a <a href="‘#receiver’"><code><em>receiver</em></code></a> whose &lt;a href=‘::environment'&gt;environment <code>get_env(<em>receiver</em>)</code> is <code><em>env</em></code>. A <a href="‘#sender’"><code>sender</code></a> can define the result of this query either by defining a member function <code>get_completion_signatures</code> or using a type alias <code>completion_signatures</code>. </p><div> <details >
561+
<p>The expression <code>get_completion_signatures(<em>sender</em>, <em>env</em>)</code> returns an object whose type is a specialization of <a href="‘#completion-signatures’"><code>completion_signatures</code></a> defining the possible completion signatures of <code><em>sender</em></code> when connected to a <a href="‘#receiver’"><code><em>receiver</em></code></a> whose &lt;a href=‘::environment'&gt;environment <code>get_env(<em>receiver</em>)</code> is <code><em>env</em></code>. A <a href="‘#sender’"><code>sender</code></a> can define the result of this query either by defining a member function <code>get_completion_signatures</code> or using a type alias <code>completion_signatures</code>.</p>
562+
<p>To determine the result the <code><em>sender</em></code> is first transformed using <code>transform_sender(<em>domain</em>, <em>sender</em>, <em>env</em>)</code> to get <code><em>new-sender</em></code> with type <code><em>New-Sender-Type</em></code>. With that the result type is </p><ol>
563+
<li>
564+
the type of <code><em>new-sender</em>.get_completion_signatures(<em>env</em>)</code> if this expression is valid; </li>
565+
<li>
566+
the type <code>remove_cvref_t&lt;<em>New-Sender-Type</em>&gt;::completion_signatures</code> if this type exists; </li>
567+
<li>
568+
<code>completion_signatures&lt;set_value_t(<em>T</em>), set_error_t(exception_ptr), set_stopped_t()&gt;</code> if <code><em>New-Sender-Type</em></code> is an awaitable type which would yield an object of type <code><em>T</em></code> when it is <code>co_await</code>ed; </li>
569+
<li>
570+
invalid otherwise. </li>
571+
</ol>
572+
<div> <details >
527573
<summary >
528574
Example</summary>
529-
<p>When a <a href="‘#sender’"><code>sender</code></a> doesn’t need to compute the completion signatures based on an <a href="‘#environment’">environment</a> it is easiest to use a the type alias:</p>
530-
<p></p>
531-
</details>
575+
<p>When a <a href="‘#sender’"><code>sender</code></a> doesn’t need to compute the completion signatures based on an <a href="‘#environment’">environment</a> it is easiest to use a the type alias, e.g.: </p><div class="fragment"><div class="line"> {c++}</div>
576+
<div class="line">struct sender {</div>
577+
<div class="line"> using sender_concept = std::execution::sender_t;</div>
578+
<div class="line"> using completion_signatures = std::completion_signatures&lt;</div>
579+
<div class="line"> std::execution::set_value_t(int),</div>
580+
<div class="line"> std::execution::set_error_t(std::error_code),</div>
581+
<div class="line"> std::execution::set_stopped()</div>
582+
<div class="line"> &gt;;</div>
583+
<div class="line"> // ...</div>
584+
<div class="line">};</div>
585+
</div><!-- fragment --> </details>
532586
</div> </details>
533587
<details >
534588
<summary >
535-
<code>get_delegation_scheduler(<em>env</em>)</code></summary>
536-
<p></p>
589+
<code>get_delegation_scheduler(<em>env</em>) -&gt; <em>scheduler</em></code></summary>
590+
<p>The expression <code>get_delegation_scheduler(<em>env</em>)</code> yields the scheduler associated with <code><em>env</em></code> which is used for forward progress delegation. The value of the expression is equivalent to <code>as_const(<em>env</em>).query(get_delegation_scheduler) -&gt; <em>scheduler</em></code> if </p><ol>
591+
<li>
592+
this expression is valid; </li>
593+
<li>
594+
this expression is <code>noexcept</code>; </li>
595+
<li>
596+
the expression’s type satisfies <code>scheduler</code>. </li>
597+
</ol>
598+
<p>Otherwise the expression is invalid. </p>
537599
</details>
538600
<details >
539601
<summary >
540-
<code>get_domain(<em>env</em>)</code></summary>
541-
<p></p>
602+
<code>get_domain(<em>env</em>) -&gt; <em>domain</em></code></summary>
542603
<p></p>
604+
<p>The expression <code>get_domain(<em>env</em>)</code> yields the domain associated with <code><em>env</em></code>. The value of the expression is equivalent to <code>as_const(<em>env</em>).query(get_domain)</code> if </p><ol>
605+
<li>
606+
this expression is valid; </li>
607+
<li>
608+
this expression is <code>noexcept</code>. </li>
609+
</ol>
610+
<p>Otherwise the expression is invalid. </p>
543611
</details>
544612
<details >
545613
<summary >
546-
<code>get_forward_progress_guarantee(<em>env</em>)</code></summary>
547-
<p></p>
614+
<code>get_forward_progress_guarantee(<em>scheduler</em>) -&gt; forward_progress_guarantee</code></summary>
615+
<p>The expression <code>get_forward_progress_guarantee(<em>scheduler</em>)</code> yields the forward progress guarantee of the <em>scheduler</em>’s execution agent. The value of the expression is equivalent to <code>as_const(<em>env</em>).query(get_scheduler)</code> if </p><ol>
616+
<li>
617+
this expression is valid; </li>
618+
<li>
619+
this expression is <code>noexcept</code>; </li>
620+
<li>
621+
the expression’s type is <code>forward_progress_guarantee</code>. </li>
622+
</ol>
623+
<p>Otherwise the expression is invalid. </p>
548624
</details>
549625
<details >
550626
<summary >
551-
<code>get_scheduler(<em>env</em>)</code></summary>
552-
<p></p>
627+
<code>get_scheduler(<em>env</em>) -&gt; <em>scheduler</em></code></summary>
628+
<p>The expression <code>get_scheduler(<em>env</em>)</code> yields the scheduler associated with <code><em>env</em></code>. The value of the expression is equivalent to <code>as_const(<em>env</em>).query(get_scheduler)</code> if </p><ol>
629+
<li>
630+
this expression is valid; </li>
631+
<li>
632+
this expression is <code>noexcept</code>; </li>
633+
<li>
634+
the expression’s type satisfies <code>scheduler</code>. </li>
635+
</ol>
636+
<p>Otherwise the expression is invalid. </p>
553637
</details>
554638
<details >
555639
<summary >
556-
<code>get_stop_token(<em>env</em>)</code></summary>
640+
<code>get_stop_token(<em>env</em>) -&gt; <em>stoppable_token</em></code></summary>
641+
<p>The expression <code>get_stop_token(<em>env</em>)</code> yields the stop token associated with <code><em>env</em></code>. The value is the result of the expression <code>as_const(<em>env</em>).query(get_stop_token)</code> if </p><ul>
642+
<li>
643+
the expression is valid; </li>
644+
<li>
645+
the expression is <code>noexcept</code>; </li>
646+
<li>
647+
the expression satisfies <code>stoppable_token</code>. </li>
648+
</ul>
649+
<p>Otherwise the value is <code>never_stop_token{}</code>. </p>
650+
</details>
651+
<h2><a class="anchor" id="autotoc_md6"></a>
652+
Customization Point Objects</h2>
653+
<details >
654+
<summary >
655+
<code>connect(<em>sender, receiver</em>) -&gt; <em>operation_state</em></code></summary>
557656
<p></p>
558657
</details>
559-
<h3><a class="anchor" id="autotoc_md6"></a>
560-
Customization Point Objects</h3>
561-
<ul>
562-
<li><code>connect(<em>sender, receiver</em>) -&gt; <em>operation_state</em></code></li>
563-
<li><code>set_error(<em>error</em>) noexcept -&gt; void</code></li>
564-
<li><code>set_stopped(<em>receiver</em>) noexcept -&gt; void</code></li>
565-
<li><code>set_value(<em>receiver, value...</em>) noexcept -&gt; void</code></li>
566-
<li><code>start(<em>state&amp;</em>) noexcept -&gt; void</code></li>
567-
</ul>
658+
<details >
659+
<summary >
660+
<code>set_error(<em>receiver</em>, <em>error</em>) noexcept -&gt; void</code></summary>
661+
<p>The expression <code>set_error(<em>receiver</em>, <em>error</em>)</code> invokes the <code>set_error</code> completion signal on <code><em>receiver</em></code> with the argument <code><em>error</em></code>, i.e., it invokes <code><em>receiver</em>.set_error(<em>error</em>)</code>. </p>
662+
</details>
663+
<details >
664+
<summary >
665+
<code>set_stopped(<em>receiver</em>) noexcept -&gt; void</code></summary>
666+
<p>The expression <code>set_stopped(<em>receiver</em>)</code> invokes the <code>set_stopped</code> completion signal on <code><em>receiver</em></code>, i.e., it invokes <code><em>receiver</em>.set_stopped()</code>. </p>
667+
</details>
668+
<details >
669+
<summary >
670+
<code>set_value(<em>receiver</em>, <em>value</em>...) noexcept -&gt; void</code></summary>
671+
<p>The expression <code>set_value(<em>receiver</em>, <em>value</em>...)</code> invokes the <code>set_value</code> completion signal on <code><em>receiver</em></code> with the argument(s) <code><em>value</em>...</code>, i.e., it invokes <code><em>receiver</em>.set_value(<em>value</em>...)</code>. </p>
672+
</details>
673+
<details >
674+
<summary >
675+
<code>start(<em>state</em>) noexcept -&gt; void</code></summary>
676+
<p>The expression <code>start(<em>state</em>)</code> starts the execution of the <code>operation_state</code> object <code><em>state</em></code>. Once this expression started executing the object <code><em>state</em></code> is required to stay valid at least until one of the completion signals of <code><em>state</em></code>’s <code>receiver</code> is invoked. Once started exactly one of the completion signals is eventually called. </p>
677+
</details>
568678
<h2><a class="anchor" id="autotoc_md7"></a>
569679
Senders</h2>
570680
<h3><a class="anchor" id="autotoc_md8"></a>

navtreedata.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ var NAVTREE =
3636
[ "std::execution Overview", "md_docs_overview.html#autotoc_md2", [
3737
[ "Terms", "md_docs_overview.html#autotoc_md3", null ],
3838
[ "Concepts", "md_docs_overview.html#autotoc_md4", null ],
39-
[ "Queries", "md_docs_overview.html#autotoc_md5", [
40-
[ "Customization Point Objects", "md_docs_overview.html#autotoc_md6", null ]
41-
] ],
39+
[ "Queries", "md_docs_overview.html#autotoc_md5", null ],
40+
[ "Customization Point Objects", "md_docs_overview.html#autotoc_md6", null ],
4241
[ "Senders", "md_docs_overview.html#autotoc_md7", [
4342
[ "Sender Factories", "md_docs_overview.html#autotoc_md8", null ],
4443
[ "Sender Adaptors", "md_docs_overview.html#autotoc_md9", null ],

navtreeindex0.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -138,17 +138,17 @@ var NAVTREEINDEX0 =
138138
"md_docs_intro_examples.html":[2],
139139
"md_docs_intro_examples.html#autotoc_md1":[2,0],
140140
"md_docs_overview.html":[3],
141-
"md_docs_overview.html#autotoc_md10":[3,0,3,2],
142-
"md_docs_overview.html#autotoc_md11":[3,0,4],
143-
"md_docs_overview.html#autotoc_md12":[3,0,5],
141+
"md_docs_overview.html#autotoc_md10":[3,0,4,2],
142+
"md_docs_overview.html#autotoc_md11":[3,0,5],
143+
"md_docs_overview.html#autotoc_md12":[3,0,6],
144144
"md_docs_overview.html#autotoc_md2":[3,0],
145145
"md_docs_overview.html#autotoc_md3":[3,0,0],
146146
"md_docs_overview.html#autotoc_md4":[3,0,1],
147147
"md_docs_overview.html#autotoc_md5":[3,0,2],
148-
"md_docs_overview.html#autotoc_md6":[3,0,2,0],
149-
"md_docs_overview.html#autotoc_md7":[3,0,3],
150-
"md_docs_overview.html#autotoc_md8":[3,0,3,0],
151-
"md_docs_overview.html#autotoc_md9":[3,0,3,1],
148+
"md_docs_overview.html#autotoc_md6":[3,0,3],
149+
"md_docs_overview.html#autotoc_md7":[3,0,4],
150+
"md_docs_overview.html#autotoc_md8":[3,0,4,0],
151+
"md_docs_overview.html#autotoc_md9":[3,0,4,1],
152152
"md_docs_questions.html":[4],
153153
"md_docs_resources.html":[5],
154154
"md_docs_resources.html#autotoc_md14":[5,0],

0 commit comments

Comments
 (0)