Skip to content

Commit d516cba

Browse files
committed
execution: transform_{sender,env},apply_sender (#1384)
1 parent 0ff48a6 commit d516cba

File tree

8 files changed

+201
-23
lines changed

8 files changed

+201
-23
lines changed

reference/execution/execution.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ namespace std::execution {
8989
| [`execution::error_types_of_t`](execution/error_types_of_t.md.nolink) | Senderのエラー完了型を取得 (alias template) | C++26 |
9090
| [`execution::sends_stopped`](execution/value_types_of_t.md.nolink) | Senderが停止完了に対応するか否か (variable template) | C++26 |
9191
| [`execution::tag_of_t`](execution/tag_of_t.md.nolink) | Senderのタグ型を取得 (alias template) | C++26 |
92-
| [`execution::transform_sender`](execution/transform_sender.md.nolink) | Senderを変換 (function template) | C++26 |
93-
| [`execution::transform_env`](execution/transform_env.md.nolink) | 環境を変換 (function template) | C++26 |
94-
| [`execution::apply_sender`](execution/apply_sender.md.nolink) | Senderアルゴリズムを適用 (function template) | C++26 |
92+
| [`execution::transform_sender`](execution/transform_sender.md) | Senderを変換 (function template) | C++26 |
93+
| [`execution::transform_env`](execution/transform_env.md) | 環境を変換 (function template) | C++26 |
94+
| [`execution::apply_sender`](execution/apply_sender.md) | Senderアルゴリズムを適用 (function template) | C++26 |
9595
| [`execution::connect`](execution/connect.md.nolink) | SenderとReceiverを接続 (customization point object) | C++26 |
9696
| [`execution::connect_result_t`](execution/connect_result_t.md.nolink) | `connect`結果型を取得 (alias template) | C++26 |
9797
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
# apply_sender
2+
* execution[meta header]
3+
* function template[meta id-type]
4+
* std::execution[meta namespace]
5+
* cpp26[meta cpp]
6+
7+
```cpp
8+
namespace std::execution {
9+
template<class Domain, class Tag, sender Sndr, class... Args>
10+
constexpr decltype(auto) apply_sender(Domain dom, Tag, Sndr&& sndr, Args&&... args)
11+
noexcept(see below);
12+
}
13+
```
14+
* sender[link sender.md]
15+
* see below[italic]
16+
17+
## 概要
18+
[実行ドメイン](default_domain.md)に応じてSenderアルゴリズムを適用する。
19+
Senderアルゴリズム動作のカスタマイゼーションポイントとして機能する。
20+
21+
- 定義されていれば、`dom.apply_sender`メンバ関数に適用動作を委譲する。
22+
- そうでなければ、デフォルト実行ドメイン[`apply_sender`](default_domain/apply_sender.md)に適用動作を委譲する。
23+
24+
25+
## テンプレートパラメータ制約
26+
説明用の式`e`を次の通りとしたとき、式`e`が適格であること。
27+
28+
- 適格ならば、式`dom.apply_sender(Tag(),` [`std::forward`](/reference/utility/forward.md)`<Sndr>(sndr),` [`std::forward`](/reference/utility/forward.md)`<Args>(args)...)`
29+
- そうでなければ、[`default_domain()`](default_domain.md)`.`[`apply_sender`](default_domain/apply_sender.md)`(Tag(),` [`std::forward`](/reference/utility/forward.md)`<Sndr>(sndr),` [`std::forward`](/reference/utility/forward.md)`<Args>(args)...)`
30+
31+
32+
## 戻り値
33+
`e`を返す。
34+
35+
36+
## 例外
37+
`noexcept(e) == true`ならば、例外を投げない。
38+
そうでなければ、式`e`から送出される例外。
39+
40+
41+
## バージョン
42+
### 言語
43+
- C++26
44+
45+
### 処理系
46+
- [Clang](/implementation.md#clang): ??
47+
- [GCC](/implementation.md#gcc): ??
48+
- [ICC](/implementation.md#icc): ??
49+
- [Visual C++](/implementation.md#visual_cpp): ??
50+
51+
52+
## 関連項目
53+
- [`default_domain::apply_sender`](default_domain/apply_sender.md)
54+
55+
56+
## 参照
57+
- [P2999R3 Sender Algorithm Customization](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2999r3.html)
58+
- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)

reference/execution/execution/default_domain.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ namespace std::execution {
1818
1919
実行ドメインは下記関数に対するカスタマイゼーションポイントとして機能する。
2020
21-
- [`execution::transform_sender`](transform_sender.md.nolink) : Senderの変換
22-
- [`execution::transform_env`](transform_env.md.nolink) : 環境の変換
23-
- [`execution::apply_sender`](apply_sender.md.nolink) : Senderアルゴリズム適用
21+
- [`execution::transform_sender`](transform_sender.md) : Senderの変換
22+
- [`execution::transform_env`](transform_env.md) : 環境の変換
23+
- [`execution::apply_sender`](apply_sender.md) : Senderアルゴリズム適用
2424
2525
2626
## メンバ関数
@@ -46,9 +46,9 @@ namespace std::execution {
4646
4747
4848
## 関連項目
49-
- [`execution::transform_sender`](transform_sender.md.nolink)
50-
- [`execution::transform_env`](transform_env.md.nolink)
51-
- [`execution::apply_sender`](apply_sender.md.nolink)
49+
- [`execution::transform_sender`](transform_sender.md)
50+
- [`execution::transform_env`](transform_env.md)
51+
- [`execution::apply_sender`](apply_sender.md)
5252
5353
5454
## 参照

reference/execution/execution/default_domain/apply_sender.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,21 @@ constexpr decltype(auto) apply_sender(Tag, Sndr&& sndr, Args&&... args)
1515
1616
## 概要
1717
Senderアルゴリズム適用のデフォルト動作。
18-
[`execution::apply_sender`](../apply_sender.md.nolink)に対するスタマイゼーションポイントとして機能する。
18+
[`execution::apply_sender`](../apply_sender.md)に対するスタマイゼーションポイントとして機能する。
1919
20-
[Senderのタグ型](../tag_of_t.md.nolink)`Tag`に対して、`apply_sender`メンバ関数を呼び出す。
20+
[Senderタグ型](../tag_of_t.md.nolink)`Tag`に対して、`apply_sender`メンバ関数を呼び出す。
2121
2222
2323
## テンプレートパラメータ制約
24-
説明用の式`e`を`Tag().apply_sender(`[`std::forward`](/reference/utility/forward.md)`<Sndr>(sndr), `[`std::forward`](/reference/utility/forward.md)`<Args>(args)...)`としたとき、が適格であること。
24+
説明用の式`e`を`Tag().apply_sender(`[`std::forward`](/reference/utility/forward.md)`<Sndr>(sndr), `[`std::forward`](/reference/utility/forward.md)`<Args>(args)...)`としたとき、式`e`が適格であること。
2525
2626
2727
## 戻り値
2828
`e`を返す。
2929
3030
3131
## 例外
32-
`noexcept(e)`が`true`であれば、例外を投げない。
32+
`noexcept(e) == true`ならば、例外を投げない。
3333
そうでなければ、式`e`から送出される例外。
3434
3535
@@ -45,7 +45,7 @@ Senderアルゴリズム適用のデフォルト動作。
4545
4646
4747
## 関連項目
48-
- [`execution::apply_sender`](../apply_sender.md.nolink)
48+
- [`execution::apply_sender`](../apply_sender.md)
4949
5050
5151
## 参照

reference/execution/execution/default_domain/transform_env.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ template<sender Sndr, queryable Env>
1414
1515
## 概要
1616
環境変換のデフォルト動作。
17-
[`execution::transform_env`](../transform_env.md.nolink)に対するスタマイゼーションポイントとして機能する。
17+
[`execution::transform_env`](../transform_env.md)に対するスタマイゼーションポイントとして機能する。
1818
19-
- 定義されていれば、[Senderのタグ型](../tag_of_t.md.nolink)の`transform_env`メンバ関数に変換動作を委譲する。
19+
- 定義されていれば、[Senderタグ型](../tag_of_t.md.nolink)の`transform_env`メンバ関数に変換動作を委譲する。
2020
- そうでなければ、無変換。
2121
2222
@@ -47,7 +47,7 @@ template<sender Sndr, queryable Env>
4747
4848
4949
## 関連項目
50-
- [`execution::transform_env`](../transform_env.md.nolink)
50+
- [`execution::transform_env`](../transform_env.md)
5151
5252
5353
## 参照

reference/execution/execution/default_domain/transform_sender.md

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,25 +17,24 @@ constexpr sender decltype(auto) transform_sender(Sndr&& sndr, const Env&... env)
1717
1818
## 概要
1919
Sender変換のデフォルト動作。
20-
[`execution::transform_sender`](../transform_sender.md.nolink)に対するスタマイゼーションポイントとして機能する。
20+
[`execution::transform_sender`](../transform_sender.md)に対するスタマイゼーションポイントとして機能する。
2121
22-
- 定義されていれば、[Senderのタグ型](../tag_of_t.md.nolink)の`transform_sender`メンバ関数に変換動作を委譲する。
22+
- 定義されていれば、[Senderタグ型](../tag_of_t.md.nolink)の`transform_sender`メンバ関数に変換動作を委譲する。
2323
- そうでなければ、無変換。
2424
2525
2626
## 効果
2727
説明用の式`e`を次の通りとしたとき、`e`を返す。
2828
29-
- 適格ならば、式[`tag_of_t`](tag_of_t.md.nolink)`<Sndr>().transform_sender(`[`std::forward<Sndr>(sndr)`](/reference/utility/forward.md)`, env...)`
29+
- 適格ならば、式[`tag_of_t`](tag_of_t.md.nolink)`<Sndr>().transform_sender(`[`std::forward`](/reference/utility/forward.md)`<Sndr>(sndr)`, env...)`
3030
- そうでなければ、[`std::forward`](/reference/utility/forward.md)`<Sndr>(sndr)`
3131
3232
3333
## 例外
34-
`noexcept(e)`が`true`であれば、例外を投げない。
34+
`noexcept(e) == true`ならば、例外を投げない。
3535
そうでなければ、式`e`から送出される例外。
3636
3737
38-
3938
## バージョン
4039
### 言語
4140
- C++26
@@ -48,7 +47,7 @@ Sender変換のデフォルト動作。
4847
4948
5049
## 関連項目
51-
- [`execution::transform_sender`](../transform_sender.md.nolink)
50+
- [`execution::transform_sender`](../transform_sender.md)
5251
5352
5453
## 参照
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# transform_env
2+
* execution[meta header]
3+
* function template[meta id-type]
4+
* std::execution[meta namespace]
5+
* cpp26[meta cpp]
6+
7+
```cpp
8+
namespace std::execution {
9+
template<class Domain, sender Sndr, queryable Env>
10+
constexpr queryable decltype(auto) transform_env(Domain dom, Sndr&& sndr, Env&& env) noexcept;
11+
}
12+
```
13+
* sender[link sender.md]
14+
* queryable[link ../queryable.md]
15+
16+
## 概要
17+
[実行ドメイン](default_domain.md)に応じて[環境](../queryable.md)を変換する。
18+
ユーザ定義実行ドメインにおいて、再帰的Sender変換における補助的なカスタマイゼーションポイントとして機能する。
19+
20+
- 定義されていれば、`dom.transform_env`メンバ関数に変換動作を委譲する。
21+
- そうでなければ、デフォルト実行ドメイン[`transform_env`](default_domain/transform_env.md)に変換動作を委譲する。
22+
23+
24+
## 適格要件
25+
後述する式`e`に対して、`noexcept(e) == true`
26+
27+
28+
## 戻り値
29+
説明用の式`e`を次の通りとし、`e`を返す。
30+
31+
- 適格ならば、式`dom.transform_env(`[`std::forward`](/reference/utility/forward.md)`<Sndr>(sndr),` [`std::forward`](/reference/utility/forward.md)`<Env>(env))`
32+
- そうでなければ、[`default_domain()`](default_domain.md)`.`[`transform_env`](default_domain/transform_env.md)`(`[`std::forward`](/reference/utility/forward.md)`<Sndr>(sndr),` [`std::forward`](/reference/utility/forward.md)`<Env>(env))`
33+
34+
35+
## 例外
36+
投げない。
37+
38+
39+
## バージョン
40+
### 言語
41+
- C++26
42+
43+
### 処理系
44+
- [Clang](/implementation.md#clang): ??
45+
- [GCC](/implementation.md#gcc): ??
46+
- [ICC](/implementation.md#icc): ??
47+
- [Visual C++](/implementation.md#visual_cpp): ??
48+
49+
50+
## 関連項目
51+
- [`default_domain::transform_env`](default_domain/transform_env.md)
52+
53+
54+
## 参照
55+
- [P2999R3 Sender Algorithm Customization](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2999r3.html)
56+
- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# transform_sender
2+
* execution[meta header]
3+
* function template[meta id-type]
4+
* std::execution[meta namespace]
5+
* cpp26[meta cpp]
6+
7+
```cpp
8+
namespace std::execution {
9+
template<class Domain, sender Sndr, queryable... Env>
10+
requires (sizeof...(Env) <= 1)
11+
constexpr sender decltype(auto) transform_sender(Domain dom, Sndr&& sndr, const Env&... env)
12+
noexcept(see below);
13+
}
14+
```
15+
* sender[link sender.md]
16+
* queryable[link ../queryable.md]
17+
* see below[italic]
18+
19+
## 概要
20+
[実行ドメイン](default_domain.md)に応じて[Sender](sender.md)を変換する。
21+
Senderオブジェクトの構築時、Senderと[Receiver](receiver.md)間[接続(connect)](../connect.md.nolink)のカスタマイゼーションポイントとして機能する。
22+
23+
型変換ではSender型の変換が行われなくなる(恒等変換となる)まで、下記のカスタマイゼーションポイントを再帰的に呼び出す。
24+
25+
- 定義されていれば、`dom.transform_sender`メンバ関数に変換動作を委譲する。
26+
- そうでなければ、デフォルト実行ドメイン[`transform_sender`](default_domain/transform_sender.md)に変換動作を委譲する。
27+
28+
29+
## 戻り値
30+
説明用の式`transformed-sndr`を次の通りとする。
31+
32+
- 適格ならば、式`dom.transform_sender(`[`std::forward`](/reference/utility/forward.md)`<Sndr>(sndr), env...)`
33+
- そうでなければ、[`default_domain()`](default_domain.md)`.`[`transform_sender`](default_domain/transform_sender.md)`(`[`std::forward`](/reference/utility/forward.md)`<Sndr>(sndr), env...)`
34+
35+
説明用の式`final-sndr`を次の通りとする。
36+
37+
- `sndr`と`transformed-sndr`の型がCV修飾を無視して同一ならば、`transformed-sndr`
38+
- そうでなければ、式`transform_sender(dom, transformed-sndr, env...)`(再帰適用)
39+
40+
`final-sndr`を返す。
41+
42+
43+
## 例外
44+
`noexcept(final-sndr) == true`ならば、例外を投げない。
45+
そうでなければ、Sender変換過程で送出される例外。
46+
47+
48+
## バージョン
49+
### 言語
50+
- C++26
51+
52+
### 処理系
53+
- [Clang](/implementation.md#clang): ??
54+
- [GCC](/implementation.md#gcc): ??
55+
- [ICC](/implementation.md#icc): ??
56+
- [Visual C++](/implementation.md#visual_cpp): ??
57+
58+
59+
## 関連項目
60+
- [`default_domain::transform_sender`](default_domain/transform_sender.md)
61+
62+
63+
## 参照
64+
- [P2999R3 Sender Algorithm Customization](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2999r3.html)
65+
- [P2300R10 `std::execution`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2300r10.html)

0 commit comments

Comments
 (0)