Skip to content

Commit 8de03aa

Browse files
committed
mdspan/layout_stride/mapping: 全メンバ(#1077)
1 parent 75d3ea3 commit 8de03aa

File tree

16 files changed

+757
-39
lines changed

16 files changed

+757
-39
lines changed

reference/mdspan/LayoutMapping.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ std::mdspan<int, Extents> mat3x2{a};
4444
```
4545

4646
- Unique特性 : 異なる多次元インデクス値は、異なる要素位置に対応する。参照先が重複することはない。
47-
- Exhaustive特性 : 全ての多次元インデクス値に対応する要素位置は連続している
47+
- Exhaustive特性 : 全ての多次元インデクス値に対応する要素位置は隣接配置される
4848
- Strided特性 : 多次元インデクス値`i,j`に対応する要素位置は、ストライド幅`2,1`を用いて`i*2+j*1`と計算できる。
4949

5050

reference/mdspan/layout_left/mapping/op_call.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ constexpr index_type operator()(Indices... i) const noexcept;
1515
1616
1717
## テンプレートパラメータ制約
18-
- `sizeof...(Indices) ==` [`extents_tyoe::rank()`](../../extents/rank.md)が`true`、かつ
18+
- `sizeof...(Indices) ==` [`extents_type::rank()`](../../extents/rank.md)が`true`、かつ
1919
- `(`[`is_convertible_v`](/reference/type_traits/is_convertible.md)`<Indices, index_type> && ...)`が`true`、かつ
2020
- `(`[`is_nothrow_constructible_v`](/reference/type_traits/is_nothrow_constructible.md)`<index_type, Indices> && ...)`が`true`であること。
2121

reference/mdspan/layout_left/mapping/op_constructor.md

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ constexpr explicit(extents_type::rank() > 0)
2727
* is_convertible_v[link /reference/type_traits/is_convertible.md]
2828
* rank()[link ../../extents/rank.md]
2929
* layout_right::mapping[link ../../layout_right/mapping.md]
30-
* layout_stride::mapping[link ../../layout_stride/mapping.md.nolink]
30+
* layout_stride::mapping[link ../../layout_stride/mapping.md]
3131
3232
## 概要
3333
- (1) : デフォルトコンストラクタ
3434
- (2) : コピーコンストラクタ
3535
- (3) : [`extents`](../../extents.md)からの変換コンストラクタ
3636
- (4) : 他`layout_left::mapping`からの変換コンストラクタ
3737
- (5) : [`layout_right::mapping`](../../layout_right/mapping.md)からの変換コンストラクタ
38-
- (6) : [`layout_stride::mapping`](../../layout_stride/mapping.md.nolink)からの変換コンストラクタ
38+
- (6) : [`layout_stride::mapping`](../../layout_stride/mapping.md)からの変換コンストラクタ
3939
4040
4141
## テンプレートパラメータ制約
@@ -52,7 +52,7 @@ constexpr explicit(extents_type::rank() > 0)
5252
- (5) : `other.`[`required_span_size()`](../../layout_left/mapping/required_span_size.md)を、`index_type`型で表現できること。
5353
- (6) :
5454
- `extents_type::`[`rank()`](../../extents/rank.md) `> 0`のとき、`other`における全次元のストライド幅が[`layout_left::mapping`相当の制約](stride.md)をもつこと。
55-
- `other.`[`required_span_size()`](../../layout_stride/mapping/required_span_size.md.nolink)を、`index_type`型で表現できること。
55+
- `other.`[`required_span_size()`](../../layout_stride/mapping/required_span_size.md)を、`index_type`型で表現できること。
5656
5757
5858
## 効果
@@ -78,34 +78,34 @@ constexpr explicit(extents_type::rank() > 0)
7878
using Ext3x4 = std::extents<size_t, 3, 4>;
7979
using Ext3xN = std::extents<size_t, 3, std::dynamic_extent>;
8080
81-
using Mapping3x4 = std::layout_left::mapping<Ext3x4>;
82-
using Mapping3xN = std::layout_left::mapping<Ext3xN>;
81+
using Mapping3x4 = ;
82+
using Mapping3xN = ;
8383
8484
int main()
8585
{
8686
// (1) : デフォルトコンストラクタ
8787
{
88-
Mapping3x4 map1_3x4;
89-
Mapping3xN map1_3xN;
88+
std::layout_left::mapping<Ext3x4> map1_3x4;
89+
std::layout_left::mapping<Ext3xN> map1_3xN;
9090
assert(map1_3x4.required_span_size() == 12);
9191
assert(map1_3xN.required_span_size() == 0);
9292
}
9393
// (2) : コピーコンストラクタ
9494
{
95-
Mapping3xN map2_a;
96-
Mapping3xN map2_b = map2_a;
95+
std::layout_left::mapping<Ext3xN> map2_a;
96+
std::layout_left::mapping<Ext3xN> map2_b = map2_a;
9797
assert(map2_a == map2_b);
9898
}
9999
// (3) : extentsからの変換コンストラクタ
100100
{
101101
Ext3xN ext{4};
102-
Mapping3xN map3 = ext;
102+
std::layout_left::mapping<Ext3xN> map3 = ext;
103103
assert(map3.extents() == ext);
104104
}
105105
// (4) : layout_left::mappingからの変換コンストラクタ
106106
{
107-
Mapping3x4 map4_3x4;
108-
Mapping3xN map4_3xN = map4_3x4;
107+
std::layout_left::mapping<Ext3x4> map4_3x4;
108+
std::layout_left::mapping<Ext3xN> map4_3xN = map4_3x4;
109109
assert(map4_3x4 == map4_3xN);
110110
}
111111
// (5) : layout_right::mappingからの変換コンストラクタ
@@ -122,11 +122,11 @@ int main()
122122
}
123123
}
124124
```
125+
* std::layout_left::mapping[color ff0000]
125126
* std::extents[link ../../extents.md]
126127
* std::dextents[link ../../extents.md]
127-
* std::layout_left::mapping[link ../mapping.md]
128128
* std::layout_right::mapping[link ../../layout_right/mapping.md]
129-
* std::layout_stride::mapping[link ../../layout_stride/mapping.md.nolink]
129+
* std::layout_stride::mapping[link ../../layout_stride/mapping.md]
130130
* required_span_size()[link required_span_size.md]
131131

132132
### 出力
@@ -147,7 +147,7 @@ int main()
147147

148148
## 関連項目
149149
- [`layout_right::mapping`](../../layout_right/mapping.md)
150-
- [`layout_stride::mapping`](../../layout_stride/mapping.md.nolink)
150+
- [`layout_stride::mapping`](../../layout_stride/mapping.md)
151151

152152

153153
## 参照

reference/mdspan/layout_left/mapping/required_span_size.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* cpp23[meta cpp]
77

88
```cpp
9-
index_type required_span_size() const noexcept;
9+
constexpr index_type required_span_size() const noexcept;
1010
```
1111

1212
## 概要

reference/mdspan/layout_right/mapping/op_call.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ constexpr index_type operator()(Indices... i) const noexcept;
1515
1616
1717
## テンプレートパラメータ制約
18-
- `sizeof...(Indices) ==` [`extents_tyoe::rank()`](../../extents/rank.md)が`true`、かつ
18+
- `sizeof...(Indices) ==` [`extents_type::rank()`](../../extents/rank.md)が`true`、かつ
1919
- `(`[`is_convertible_v`](/reference/type_traits/is_convertible.md)`<Indices, index_type> && ...)`が`true`、かつ
2020
- `(`[`is_nothrow_constructible_v`](/reference/type_traits/is_nothrow_constructible.md)`<index_type, Indices> && ...)`が`true`であること。
2121
@@ -45,6 +45,10 @@ return ((static_cast<index_type>(Indices...) * stride(P)) + ... + 0);
4545
int main()
4646
{
4747
using Ext3x4 = std::extents<size_t, 3, 4>;
48+
using Mapping = std::layout_stride::mapping<Ext2x3>;
49+
std::array strides{4, 1};
50+
std::mdspan mat{arr, Mapping{{}, strides}};
51+
4852
using Mapping3x4 = std::layout_right::mapping<Ext3x4>;
4953
Mapping3x4 map;
5054
assert(map(0,0) == 0);
@@ -54,7 +58,7 @@ int main()
5458
}
5559
```
5660
* std::extents[link ../../extents.md]
57-
* std::layout_right::mapping[link ../mapping.md]
61+
* std::layout_stride::mapping[link ../mapping.md]
5862

5963
### 出力
6064
```

reference/mdspan/layout_right/mapping/op_constructor.md

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@ constexpr explicit(extents_type::rank() > 0)
2727
* is_convertible_v[link /reference/type_traits/is_convertible.md]
2828
* rank()[link ../../extents/rank.md]
2929
* layout_left::mapping[link ../../layout_left/mapping.md]
30-
* layout_stride::mapping[link ../../layout_stride/mapping.md.nolink]
30+
* layout_stride::mapping[link ../../layout_stride/mapping.md]
3131
3232
## 概要
3333
- (1) : デフォルトコンストラクタ
3434
- (2) : コピーコンストラクタ
3535
- (3) : [`extents`](../../extents.md)からの変換コンストラクタ
3636
- (4) : 他`layout_right::mapping`からの変換コンストラクタ
3737
- (5) : [`layout_left::mapping`](../../layout_left/mapping.md)からの変換コンストラクタ
38-
- (6) : [`layout_stride::mapping`](../../layout_stride/mapping.md.nolink)からの変換コンストラクタ
38+
- (6) : [`layout_stride::mapping`](../../layout_stride/mapping.md)からの変換コンストラクタ
3939
4040
4141
## テンプレートパラメータ制約
@@ -52,7 +52,7 @@ constexpr explicit(extents_type::rank() > 0)
5252
- (5) : `other.`[`required_span_size()`](../../layout_left/mapping/required_span_size.md)を、`index_type`型で表現できること。
5353
- (6) :
5454
- `extents_type::`[`rank()`](../../extents/rank.md) `> 0`のとき、`other`における全次元のストライド幅が[`layout_right::mapping`相当の制約](stride.md)をもつこと。
55-
- `other.`[`required_span_size()`](../../layout_stride/mapping/required_span_size.md.nolink)を、`index_type`型で表現できること。
55+
- `other.`[`required_span_size()`](../../layout_stride/mapping/required_span_size.md)を、`index_type`型で表現できること。
5656
5757
5858
## 効果
@@ -78,34 +78,31 @@ constexpr explicit(extents_type::rank() > 0)
7878
using Ext3x4 = std::extents<size_t, 3, 4>;
7979
using Ext3xN = std::extents<size_t, 3, std::dynamic_extent>;
8080
81-
using Mapping3x4 = std::layout_right::mapping<Ext3x4>;
82-
using Mapping3xN = std::layout_right::mapping<Ext3xN>;
83-
8481
int main()
8582
{
8683
// (1) : デフォルトコンストラクタ
8784
{
88-
Mapping3x4 map1_3x4;
89-
Mapping3xN map1_3xN;
85+
std::layout_right::mapping<Ext3x4> map1_3x4;
86+
std::layout_right::mapping<Ext3xN> map1_3xN;
9087
assert(map1_3x4.required_span_size() == 12);
9188
assert(map1_3xN.required_span_size() == 0);
9289
}
9390
// (2) : コピーコンストラクタ
9491
{
95-
Mapping3xN map2_a;
96-
Mapping3xN map2_b = map2_a;
92+
std::layout_right::mapping<Ext3xN> map2_a;
93+
std::layout_right::mapping<Ext3xN> map2_b = map2_a;
9794
assert(map2_a == map2_b);
9895
}
9996
// (3) : extentsからの変換コンストラクタ
10097
{
10198
Ext3xN ext{4};
102-
Mapping3xN map3 = ext;
99+
std::layout_right::mapping<Ext3xN> map3 = ext;
103100
assert(map3.extents() == ext);
104101
}
105102
// (4) : layout_right::mappingからの変換コンストラクタ
106103
{
107-
Mapping3x4 map4_3x4;
108-
Mapping3xN map4_3xN = map4_3x4;
104+
std::layout_right::mapping<Ext3x4> map4_3x4;
105+
std::layout_right::mapping<Ext3xN> map4_3xN = map4_3x4;
109106
assert(map4_3x4 == map4_3xN);
110107
}
111108
// (5) : layout_left::mappingからの変換コンストラクタ
@@ -122,11 +119,11 @@ int main()
122119
}
123120
}
124121
```
122+
* std::layout_right::mapping[color ff0000]
125123
* std::extents[link ../../extents.md]
126124
* std::dextents[link ../../extents.md]
127-
* std::layout_right::mapping[link ../mapping.md]
128125
* std::layout_left::mapping[link ../../layout_left/mapping.md]
129-
* std::layout_stride::mapping[link ../../layout_stride/mapping.md.nolink]
126+
* std::layout_stride::mapping[link ../../layout_stride/mapping.md]
130127
* required_span_size()[link required_span_size.md]
131128

132129
### 出力
@@ -147,7 +144,7 @@ int main()
147144

148145
## 関連項目
149146
- [`layout_left::mapping`](../../layout_left/mapping.md)
150-
- [`layout_stride::mapping`](../../layout_stride/mapping.md.nolink)
147+
- [`layout_stride::mapping`](../../layout_stride/mapping.md)
151148

152149

153150
## 参照

reference/mdspan/layout_right/mapping/required_span_size.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
* cpp23[meta cpp]
77

88
```cpp
9-
index_type required_span_size() const noexcept;
9+
constexpr index_type required_span_size() const noexcept;
1010
```
1111

1212
## 概要

reference/mdspan/layout_stride.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ namespace std {
1313
}
1414
```
1515
* Extents[link extents.md]
16-
* mapping[link layout_stride/mapping.md.nolink]
16+
* mapping[link layout_stride/mapping.md]
1717
1818
## 概要
1919
`layout_stride`は、多次元配列ビュー[`mdspan`](mdspan.md)に対して、次元毎に任意ストライド幅を指定した[レイアウトマッピング](LayoutMapping.md)を表現するポリシークラスである。
@@ -25,7 +25,7 @@ namespace std {
2525
2626
| 名前 | 説明 | 対応バージョン |
2727
|------|------|----------------|
28-
| [`mapping`](mapping.md.nolink) | レイアウトマッピング | C++23 |
28+
| [`mapping`](layout_stride/mapping.md) | レイアウトマッピング | C++23 |
2929
3030
3131
## 例

0 commit comments

Comments
 (0)