Skip to content

Commit 4ae7b92

Browse files
committed
execution: transform_completion_signatures(_of) (#1384)
- type-list,MATCHING-SIG追加 - 微調整
1 parent 0f03a4a commit 4ae7b92

21 files changed

+223
-36
lines changed

reference/execution/execution.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,8 @@ Senderコンシューマは名前空間 `std::this_thread` で定義される。
143143
| 名前 | 説明 | 対応バージョン |
144144
|------|------|----------------|
145145
| [`execution::completion_signatures`](execution/completion_signatures.md) | 完了シグネチャ集合を表現する型 (class template) | C++26 |
146-
| [`execution::transform_completion_signatures`](execution/transform_completion_signatures.md.nolink) | 完了シグネチャを変換 (alias template) | C++26 |
147-
| [`execution::transform_completion_signatures_of`](execution/transform_completion_signatures_of.md.nolink) | 完了シグネチャを変換 (alias template) | C++26 |
146+
| [`execution::transform_completion_signatures`](execution/transform_completion_signatures.md) | 完了シグネチャ集合を変換 (alias template) | C++26 |
147+
| [`execution::transform_completion_signatures_of`](execution/transform_completion_signatures_of.md) | Senderの完了シグネチャ集合を変換 (alias template) | C++26 |
148148
| [`execution::run_loop`](execution/run_loop.md) | 単一スレッド上でのループ実行 (class) | C++26 |
149149
150150
### コルーチンユーティリティ

reference/execution/execution/as_awaitable.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,13 @@ namespace std::execution {
9595
* exception_ptr[link /reference/exception/exception_ptr.md]
9696
* coroutine_handle[link /reference/coroutine/coroutine_handle.md]
9797
98+
### 式`AS-EXCEPT-PTR`
99+
説明用の式`err`に対して`decltype((err))`を型`Err`としたとき、式`AS-EXCEPT-PTR(err)`を下記の通り定義する。
100+
101+
- [`decay_t`](/reference/type_traits/decay.md)`<Err>`が[`exception_ptr`](/reference/exception/exception_ptr.md)型と等しければ、`err`となる。このとき、事前条件として`!err == false`であること。
102+
- そうではなく、[`decay_t`](/reference/type_traits/decay.md)`<Err>`が[`error_code`](/reference/system_error/error_code.md)型と等しければ、[`make_exception_ptr`](/reference/exception/make_exception_ptr.md)`(`[`system_error`](/reference/system_error/system_error.md)`(err))`となる。
103+
- そうでなければ、[`make_exception_ptr`](/reference/exception/make_exception_ptr.md)`(err)`となる。
104+
98105
### クラステンプレート`awaitable-receiver`
99106
説明専用のクラステンプレート`sender-awaitable<Sndr, Promise>::awaitable-receiver`は下記の通り定義される。
100107
@@ -135,6 +142,7 @@ struct awaitable-receiver {
135142
rcvr.result-ptr->template emplace<2>(AS-EXCEPT-PTR(err));
136143
rcvr.continuation.resume();
137144
```
145+
* AS-EXCEPT-PTR[italic]
138146
* template emplace[link /reference/variant/variant/emplace.md]
139147
* resume()[link /reference/coroutine/coroutine_handle/resume.md]
140148

reference/execution/execution/connect.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ namespace std::execution {
111111
`C`型の`c`[コルーチンPromise型](/lang/cpp20/coroutines.md)の左辺値`p`に対して、`await-result-type<C, Promise>``decltype(`[`GET-AWAITER`](../is-awaitable.md)`(c, p).`[`await_resume()`](/lang/cpp20/coroutines.md)`)`型とする。
112112
`V``await-result-type<DS, connect-awaitable-promise>`とする。
113113

114-
`Sigs`を下記の通り定義する。
114+
[完了シグネチャ集合型](completion_signatures.md)`Sigs`を下記の通り定義する。
115115

116116
```cpp
117117
completion_signatures<

reference/execution/execution/gather-signatures.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ using gather-signatures = /*see below*/
3838
- [`execution::value_types_of_t`](value_types_of_t.md)
3939
- [`execution::error_types_of_t`](error_types_of_t.md)
4040
- [`execution::sends_stopped`](sends_stopped.md)
41+
- [`execution::transform_completion_signatures`](transform_completion_signatures.md)
4142
4243
4344
## 参照

reference/execution/execution/get_completion_signatures.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,21 @@ namespace std::execution {
4646
4747
## カスタマイゼーションポイント
4848
- Sender`sndr`[変換後](transform_sender.md)の`new_sndr`に対して、`new_sndr.get_completion_signatures(env)`が返す型。
49-
- 変換後Senderの型`NewSndr`に対して、メンバ型`completion_signatures`。
49+
- 変換後Senderの型`NewSndr`に対して、メンバ型`NewSndr::completion_signatures`
50+
51+
説明用の式`rcvr`を[`receiver`](receiver.md)のモデルである型`Rcvr`の右辺値、型`Sndr`を[`sender_in`](sender_in.md)`<Sndr,` [`env_of_t`](env_of_t.md)`<Rcvr>> == true`となる型とする。
52+
`Sigs...`を[`completion_signatures_of_t`](completion_signatures_of_t.md)`<Sndr,` [`env_of_t`](env_of_t.md)`<Rcvr>>`による[`completion_signatures`](completion_signatures.md)特殊化のテンプレートパラメータと定義する。
53+
`CSO`を完了関数とする。
54+
55+
Sender型`Sndr`、もしくは式`CSO(rcvr, args...)`を呼び出す[Operation State](operation_state.md)が潜在的に例外送出するならば、`Sigs...`の完了シグネチャ`Sig`は次の式が`true`となるべき。
56+
57+
```cpp
58+
MATCHING-SIG(decayed-typeof<CSO>(decltype(args)...), Sig)
59+
```
60+
* MATCHING-SIG[italic]
61+
* decayed-typeof[link /reference/functional/decayed-typeof.md]
62+
63+
説明用の関数型`F1`, `F2`をそれぞれ`R1(Args1...)`, `R2(Args2...)`としたとき、説明専用の式`MATCHING-SIG(F1, F2)`は、[`same_as`](/reference/concepts/same_as.md)`<R1(Args1&&...), R2(Args&&...)> == true`となる場合にかぎって`true`となる。
5064

5165

5266
##

reference/execution/execution/on.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ transform_sender(
128128
* get_env[link get_env.md]
129129
* query-with-default[link query-with-default.md]
130130
* write-env[link write-env.md]
131-
* SCHED-ENV[link scheduler.nolink]
131+
* SCHED-ENV[link scheduler.md]
132132
* std::move[link /reference/utility/move.md]
133133
134134
説明専用のクラス`not-a-scheduler`を未規定な空のクラス型、`not-a-sender`を下記の通り定義する。

reference/execution/execution/receiver_of.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,9 +103,9 @@ int main()
103103

104104
## 関連項目
105105
- [`execution::receiver`](receiver.md)
106-
- [`execution::set_value_t`](set_value.md)
107-
- [`execution::set_error_t`](set_error.md)
108-
- [`execution::set_stopped_t`](set_stopped.md)
106+
- [`execution::set_value`](set_value.md)
107+
- [`execution::set_error`](set_error.md)
108+
- [`execution::set_stopped`](set_stopped.md)
109109

110110

111111
## 参照

reference/execution/execution/scheduler.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ namespace std::execution {
6363
```
6464
* set_value_t[link set_value.md]
6565
* sender_in[link sender_in.md]
66+
* MATCHING-SIG[link get_completion_signatures.md]
6667
* value_types_of_t[link value_types_of_t.md]
6768
* type_identity_t[link /reference/type_traits/true_type.md]
6869

@@ -81,13 +82,13 @@ Scheduler型のデストラクタは、[`schedule`](schedule.md)が返すSender
8182

8283

8384
## 説明専用エンティティ
84-
### `SCHED-ATTRS`
85+
### `SCHED-ATTRS`
8586
説明用のScheduler`sch`に対して、式`SCHED-ATTRS(sch)`は[`queryable`](../queryable.md)を満たす型の式`o1`となり、下記を満たす。
8687

8788
- 型`Tag`が[`set_value_t`](set_value.md)もしくは[`set_stopped_t`](set_stopped.md)のとき、式`o1.query(`[`get_completion_scheduler`](get_completion_scheduler.md)`<Tag>)`の型および値が`sch`と等しい。
8889
- 式`o1.query(`[`get_domain`](get_domain.md)`)`は`sch.query(`[`get_domain`](get_domain.md)`)`と等価。
8990

90-
### `SCHED-ENV`
91+
### `SCHED-ENV`
9192
説明用のScheduler`sch`に対して、式`SCHED-ENV(sch)`は[`queryable`](../queryable.md)を満たす型の式`o2`となり、下記を満たす。
9293

9394
- 式`o2.query(`[`get_scheduler`](get_scheduler.md)`)`は、型および値が`sch`と等しい右辺値。

reference/execution/execution/sends_stopped.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ namespace std::execution {
1616
```
1717
* env<>[link env.md]
1818
* sender_in[link sender_in.md]
19+
* type-list[link type-list.md]
1920
* gather-signatures[link gather-signatures.md]
2021
* set_stopped_t[link set_stopped.md]
2122
* completion_signatures_of_t[link completion_signatures_of_t.md]

reference/execution/execution/set_error.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,8 @@ int main()
7777

7878
## 関連項目
7979
- [`execution::receiver`](receiver.md)
80-
- [`execution::set_value_t`](set_value.md)
81-
- [`execution::set_stopped_t`](set_stopped.md)
80+
- [`execution::set_value`](set_value.md)
81+
- [`execution::set_stopped`](set_stopped.md)
8282

8383

8484
## 参照

0 commit comments

Comments
 (0)