Skip to content

Commit 01cb107

Browse files
committed
mdspan: layout_{left,right}_padded::mapping概要
P2645R5 -> P2645R6
1 parent 14cc1a0 commit 01cb107

File tree

11 files changed

+353
-13
lines changed

11 files changed

+353
-13
lines changed

reference/mdspan.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,4 +64,4 @@
6464
## 参照
6565
- [P0009R18 MDSPAN](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html)
6666
- [P2630R4 Submdspan](https://open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2630r4.html)
67-
- [P2642R5 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2642r5.html)
67+
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)

reference/mdspan/LayoutMapping.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,8 @@ LayoutMappingを満たす型`M`は
9393
- [`layout_left::mapping<E>`](layout_left/mapping.md)
9494
- [`layout_right::mapping<E>`](layout_right/mapping.md)
9595
- [`layout_stride::mapping<E>`](layout_stride/mapping.md)
96-
- [`layout_left_padded<PV>::mapping<E>`](layout_left_padded/mapping.md.nolink)
97-
- [`layout_right_padded<PV>::mapping<E>`](layout_right_padded/mapping.md.nolink)
96+
- [`layout_left_padded<S>::mapping<E>`](layout_left_padded/mapping.md)
97+
- [`layout_right_padded<S>::mapping<E>`](layout_right_padded/mapping.md)
9898
- [`layout_blas_packed<T,SO>::mapping<E>`](/reference/linalg/layout_blas_packed/mapping.md)
9999

100100

reference/mdspan/LayoutMappingPolicy.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ LayoutMappingPolicyを満たす型`MP`は
4040
- [`layout_left`](layout_left.md)
4141
- [`layout_right`](layout_right.md)
4242
- [`layout_stride`](layout_stride.md)
43-
- [`layout_left_padded<PV>`](layout_left_padded.md)
44-
- [`layout_right_padded<PV>`](layout_right_padded.md)
43+
- [`layout_left_padded<S>`](layout_left_padded.md)
44+
- [`layout_right_padded<S>`](layout_right_padded.md)
4545
- [`linalg::layout_blas_packed<T,SO>`](/reference/linalg/layout_blas_packed.md)
4646
4747
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# is-layout-left-padded-mapping-of
2+
* mdspan[meta header]
3+
* variable[meta id-type]
4+
* cpp26[meta cpp]
5+
6+
```cpp
7+
template<class Mapping>
8+
constexpr bool is-layout-left-padded-mapping-of = see below; // exposition only
9+
```
10+
* see below[italic]
11+
12+
13+
## 概要
14+
`is-layout-left-padded-mapping-of`は、[`layout_left_padded<S>::mapping`](layout_left_padded/mapping.md)を判定する説明専用変数テンプレートである。
15+
16+
`size_t`型の任意の値`S`として`Mapping`[`layout_left_padded<S>::mapping`](layout_left_padded/mapping.md)の特殊化であるときに限り、`is-layout-left-padded-mapping-of<Mapping>``true`となる。
17+
18+
19+
## バージョン
20+
### 言語
21+
- C++26
22+
23+
24+
## 参照
25+
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# is-layout-right-padded-mapping-of
2+
* mdspan[meta header]
3+
* variable[meta id-type]
4+
* cpp26[meta cpp]
5+
6+
```cpp
7+
template<class Mapping>
8+
constexpr bool is-layout-right-padded-mapping-of = see below; // exposition only
9+
```
10+
* see below[italic]
11+
12+
13+
## 概要
14+
`is-layout-right-padded-mapping-of`は、[`layout_right_padded<S>::mapping`](layout_right_padded/mapping.md)を判定する説明専用変数テンプレートである。
15+
16+
`size_t`型の任意の値`S`として`Mapping`[`layout_right_padded<S>::mapping`](layout_right_padded/mapping.md)の特殊化であるときに限り、`is-layout-right-padded-mapping-of<Mapping>``true`となる。
17+
18+
19+
## バージョン
20+
### 言語
21+
- C++26
22+
23+
24+
## 参照
25+
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)

reference/mdspan/layout_left/mapping/op_constructor.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,18 @@ template<class OtherExtents>
2020
constexpr explicit(!is_convertible_v<OtherExtents, extents_type>)
2121
mapping(const layout_right::mapping<OtherExtents>& other) noexcept; // (5)
2222

23+
template<class LayoutLeftPaddedMapping>
24+
constexpr explicit(!is_convertible_v<typename LayoutLeftPaddedMapping::extents_type, extents_type>)
25+
mapping(const LayoutLeftPaddedMapping& other) noexcept; // (7) C++26
26+
2327
template<class OtherExtents>
2428
constexpr explicit(extents_type::rank() > 0)
2529
mapping(const layout_stride::mapping<OtherExtents>& other) noexcept; // (6)
2630
```
2731
* is_convertible_v[link /reference/type_traits/is_convertible.md]
2832
* rank()[link ../../extents/rank.md]
2933
* layout_right::mapping[link ../../layout_right/mapping.md]
34+
* LayoutLeftPaddedMapping[link ../../layout_left_padded/mapping.md]
3035
* layout_stride::mapping[link ../../layout_stride/mapping.md]
3136
3237
## 概要
@@ -36,6 +41,7 @@ constexpr explicit(extents_type::rank() > 0)
3641
- (4) : 他`layout_left::mapping`からの変換コンストラクタ
3742
- (5) : [`layout_right::mapping`](../../layout_right/mapping.md)からの変換コンストラクタ
3843
- (6) : [`layout_stride::mapping`](../../layout_stride/mapping.md)からの変換コンストラクタ
44+
- (7) : [`layout_left_padded<S>::mapping`](../../layout_left_padded/mapping.md)からの変換コンストラクタ
3945
4046
4147
## テンプレートパラメータ制約
@@ -44,6 +50,17 @@ constexpr explicit(extents_type::rank() > 0)
4450
- `extents_type::`[`rank()`](../../extents/rank.md) `<= 1`、かつ
4551
- [`is_constructible_v`](/reference/type_traits/is_constructible.md)`<extents_type, OtherExtents>`が`true`であること。
4652
- (6) : [`is_constructible_v`](/reference/type_traits/is_constructible.md)`<extents_type, OtherExtents>`が`true`であること。
53+
- (7) :
54+
- [`is-layout-left-padded-mapping-of`](../../is-layout-left-padded-mapping-of.md)`<LayoutLeftPaddedMapping>`が`true`、かつ
55+
- [`is_constructible_v`](/reference/type_traits/is_constructible.md)`<extents_type, typename LayoutLeftPaddedMapping::extents_type>`が`true`であること。
56+
57+
58+
## 適格要件
59+
- (7) : 以下を満たすとき、`extents_type::`[`static_extent`](../../extents/static_extent.md)`(0)`が`LayoutLeftPaddedMapping::padding_stride`の倍数であること。
60+
- `extents_type::`[`rank()`](../../extents/rank.md) `> 1`、かつ
61+
- `extents_type::`[`static_extent`](../../extents/static_extent.md)`(0)`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくなく、かつ
62+
- `LayoutLeftPaddedMapping::extents_type::`[`static_extent`](../../extents/static_extent.md)`(0)`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくなく、かつ
63+
- `LayoutLeftPaddedMapping::padding_stride`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくないこと。
4764
4865
4966
## 事前条件
@@ -53,11 +70,14 @@ constexpr explicit(extents_type::rank() > 0)
5370
- (6) :
5471
- `extents_type::`[`rank()`](../../extents/rank.md) `> 0`のとき、`other`における全次元のストライド幅が[`layout_left::mapping`相当の制約](stride.md)をもつこと。
5572
- `other.`[`required_span_size()`](../../layout_stride/mapping/required_span_size.md)を、`index_type`型で表現できること。
73+
- (7) :
74+
- `extents_type::`[`rank()`](../../extents/rank.md) `> 1`のとき、`other.stride(1) == other.extents(0)`
75+
- `other.`[`required_span_size()`](../../layout_left_padded/mapping/required_span_size.md.nolink)を、`index_type`型で表現できること。
5676
5777
5878
## 効果
5979
- (3) : `e`を用いて`extents_`を直接非リスト初期化する。
60-
- (4), (5), (6) : `other.extents()`を用いて`extents_`を直接非リスト初期化する。
80+
- (4), (5), (6), (7) : `other.extents()`を用いて`extents_`を直接非リスト初期化する。
6181
6282
6383
## 例外
@@ -67,6 +87,7 @@ constexpr explicit(extents_type::rank() > 0)
6787
## explicitになる条件
6888
- (4), (5) : `!`[`is_convertible_v`](/reference/type_traits/is_convertible.md)`<OtherExtents, extents_type>`
6989
- (6) : [`extents_type::rank()`](../../extents/rank.md) `> 0`
90+
- (7) : `!`[`is_convertible_v`](/reference/type_traits/is_convertible.md)`<typename LayoutLeftPaddedMapping::extents_type, extents_type>`
7091
7192
7293
## 例
@@ -143,7 +164,9 @@ int main()
143164
## 関連項目
144165
- [`layout_right::mapping`](../../layout_right/mapping.md)
145166
- [`layout_stride::mapping`](../../layout_stride/mapping.md)
167+
- [`layout_left_padded::mapping`](../../layout_left_padded/mapping.md)
146168

147169

148170
## 参照
149171
- [P0009R18 MDSPAN](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html)
172+
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)

reference/mdspan/layout_left_padded.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace std {
1515
```
1616
* dynamic_extent[link /reference/span/dynamic_extent.md]
1717
* Extents[link extents.md]
18-
* mapping[link layout_left_padded/mapping.md.nolink]
18+
* mapping[link layout_left_padded/mapping.md]
1919
2020
## 概要
2121
`layout_left_padded`は、多次元配列ビュー[`mdspan`](mdspan.md)に対して、パディングあり列優先(column major)[レイアウトマッピング](LayoutMapping.md)を表現するポリシークラスである。
@@ -29,7 +29,7 @@ namespace std {
2929
3030
| 名前 | 説明 | 対応バージョン |
3131
|------|------|----------------|
32-
| [`mapping`](layout_left_padded/mapping.md.nolink) | レイアウトマッピング | C++26 |
32+
| [`mapping`](layout_left_padded/mapping.md) | レイアウトマッピング | C++26 |
3333
3434
3535
## 例
@@ -83,4 +83,4 @@ int main()
8383

8484

8585
## 参照
86-
- [P2642R5 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2642r5.html)
86+
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# mapping
2+
* mdspan[meta header]
3+
* class template[meta id-type]
4+
* std[meta namespace]
5+
* layout_left_padded[meta class]
6+
* cpp26[meta cpp]
7+
8+
```cpp
9+
namespace std {
10+
template<size_t PaddingValue>
11+
template<class Extents>
12+
class layout_left_padded<PaddingValue>::mapping;
13+
}
14+
```
15+
* layout_left_padded[link ../layout_left_padded.md]
16+
* Extents[link ../extents.md]
17+
18+
## 概要
19+
`layout_left_padded<S>::mapping<E>`は、[`extents`](../extents.md)型の多次元配列サイズ`E`をパラメータとして、パディングあり列優先(column major)[レイアウトマッピング](../LayoutMapping.md)を表現するクラスである。
20+
21+
`layout_left_padded<S>::mapping<E>`は[トリビアルコピー可能](/reference/type_traits/is_trivially_copyable.md)であり、[`regular`](/reference/concepts/regular.md)のモデルである。
22+
23+
### 説明専用メンバ変数
24+
`layout_left_padded<S>::mapping`クラステンプレートは、下記の説明専用メンバ変数を保持する。
25+
26+
- `stride-1` : `index_type`型の値`static-padding-stride`
27+
- `extents_` : `extents_type`型の[多次元配列サイズ情報](../extents.md)
28+
29+
また下記の説明専用静的メンバ変数を保持する。
30+
31+
- `rank_` : `size_t`型の定数`extents_type::`[`rank()`](../extents/rank.md)
32+
- `first-static-extent` : `size_t`型の定数`extents_type::`[`static_extent`](../extents/static_extent.md)`(0)`
33+
- `static-padding-stride` : `size_t`型の下記定数
34+
- `rank_`が`0`または`1`のとき、値`0`
35+
- `padding_value`または`first-static-extent`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しいとき、`dynamic_extent`
36+
- そうでなければ、`LEAST-MULTIPLE-AT-LEAST(padding_value, first-static-extent)`
37+
38+
39+
## 適格要件
40+
- `Extents`は[`extents`](../extents.md)の特殊化であること。
41+
- `rank_dynamic() == 0`が`true`のとき、多次元インデクス空間`Extents()`のサイズが`index_type`型で表現できること。
42+
- 値`padding_value`が`index_type`型で表現できること。
43+
- 以下を満たすとき、`LEAST-MULTIPLE-AT-LEAST(padding_value, first-static-extent)`が、`size_t`型および`index_type`型で表現できること。
44+
- `rank_ > 1`、かつ
45+
- `padding_value`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくなく、かつ
46+
- `first-static-extent`が`dynamic_extent`と等しくないとき。
47+
- 以下を満たすとき、半開区間`[1, rank_)`の全ての値`k`に対して`LEAST-MULTIPLE-AT-LEAST(padding_value, ext.static_extent(0))`と全ての`ext.static_extent(k)`値を乗じた結果が、`size_t`型および`index_type`型で表現できること。
48+
- `rank_ > 1`、かつ
49+
- `padding_value`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくなく、かつ
50+
- 半開区間`[0, extents_type::`[`rank()`](../extents/rank.md)`)`の全ての値`k`に対して`extents_type::`[`static_extent`](../extents/static_extent.md)`(k)`が`dynamic_extent`と等しくないとき。
51+
52+
53+
## メンバ関数
54+
### 構築・破棄
55+
56+
| 名前 | 説明 | 対応バージョン |
57+
|------|------|----------------|
58+
| [`(constructor)`](mapping/op_constructor.md.nolink) | コンストラクタ | C++26 |
59+
| `(destructor)` | デストラクタ | C++26 |
60+
| `operator=` | コピー代入演算子 | C++26 |
61+
62+
### 観測
63+
64+
| 名前 | 説明 | 対応バージョン |
65+
|------|------|----------------|
66+
| `extents` | 多次元配列のサイズ`extents_`を取得する | C++26 |
67+
| [`strides`](mapping/strides.md.nolink) | ストライド幅配列を取得する | C++26 |
68+
| [`required_span_size`](mapping/required_span_size.md.nolink) | 要素アクセス範囲を取得する | C++26 |
69+
| [`operator()`](mapping/op_call.md.nolink) | 多次元配列インデクスから要素位置へ変換する | C++26 |
70+
| [`is_exhaustive`](mapping/is_exhaustive.md.nolink) | [Exhaustive特性](../LayoutMapping.md)を取得する | C++26 |
71+
| [`stride`](mapping/stride.md.nolink) | 指定次元のストライド幅を取得する | C++26 |
72+
73+
74+
## 静的メンバ関数
75+
76+
| 名前 | 説明 | 対応バージョン |
77+
|------|------|----------------|
78+
| `is_always_unique` | `true`を返す | C++26 |
79+
| [`is_always_exhaustive`](mapping/is_always_exhaustive.md.nolink) | 型の[Exhaustive特性](../LayoutMapping.md)を取得する | C++26 |
80+
| `is_always_strided` | `true`を返す | C++26 |
81+
| `is_unique` | `true`を返す | C++26 |
82+
| `is_strided` | `true`を返す | C++26 |
83+
84+
85+
## メンバ型
86+
87+
| 名前 | 説明 | 対応バージョン |
88+
|------|------|----------------|
89+
| `extents_type` | [`Extents`](../extents.md) | C++26 |
90+
| `index_type` | [`Extents::index_type`](../extents.md) | C++26 |
91+
| `size_type` | [`Extents::size_type`](../extents.md) | C++26 |
92+
| `rank_type` | [`Extents::rank_type`](../extents.md) | C++26 |
93+
| `layout_type` | [`layout_left_padded`](../layout_left_padded.md)`<PaddingValue>` | C++26 |
94+
95+
96+
## 非メンバ(*Hidden friends*)関数
97+
98+
| 名前 | 説明 | 対応バージョン |
99+
|------|------|----------------|
100+
| [`submdspan_mapping`](mapping/submdspan_mapping.md.nolink) | [`submdspan`](../submdspan.md)サポート | C++26 |
101+
102+
### 比較演算子
103+
104+
| 名前 | 説明 | 対応バージョン |
105+
|------|------|----------------|
106+
| [`operator==`](mapping/op_equal.md.nolink) | 等値比較 | C++26 |
107+
| [`operator!=`](mapping/op_equal.md.nolink) | 非等値比較 (`==`により使用可能) | C++26 |
108+
109+
110+
## バージョン
111+
### 言語
112+
- C++26
113+
114+
### 処理系
115+
- [Clang](/implementation.md#clang): ??
116+
- [GCC](/implementation.md#gcc): ??
117+
- [ICC](/implementation.md#icc): ??
118+
- [Visual C++](/implementation.md#visual_cpp): ??
119+
120+
121+
## 関連項目
122+
- [`mdspan`](../mdspan.md)
123+
- [`submdspan`](../submdspan.md)
124+
125+
126+
## 参照
127+
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)

reference/mdspan/layout_right_padded.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ namespace std {
1515
```
1616
* dynamic_extent[link /reference/span/dynamic_extent.md]
1717
* Extents[link extents.md]
18-
* mapping[link layout_right_padded/mapping.md.nolink]
18+
* mapping[link layout_right_padded/mapping.md]
1919
2020
## 概要
2121
`layout_right_padded`は、多次元配列ビュー[`mdspan`](mdspan.md)に対して、パディングあり行優先(row major)[レイアウトマッピング](LayoutMapping.md)を表現するポリシークラスである。
@@ -29,7 +29,7 @@ namespace std {
2929
3030
| 名前 | 説明 | 対応バージョン |
3131
|------|------|----------------|
32-
| [`mapping`](layout_right_padded/mapping.md.nolink) | レイアウトマッピング | C++26 |
32+
| [`mapping`](layout_right_padded/mapping.md) | レイアウトマッピング | C++26 |
3333
3434
3535
## 例
@@ -81,4 +81,4 @@ int main()
8181

8282

8383
## 参照
84-
- [P2642R5 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2642r5.html)
84+
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)

0 commit comments

Comments
 (0)