Skip to content

Commit d862f0a

Browse files
committed
mdspan/extents: refinements(#1077)
1 parent 1ddfc8d commit d862f0a

File tree

7 files changed

+27
-11
lines changed

7 files changed

+27
-11
lines changed

reference/mdspan/extents.md

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,28 @@ namespace std {
1616
* see below[italic]
1717
1818
## 概要
19-
`extents`は、多次元配列の次元数、各次元の要素数、要素数が静的(コンパイル時)または動的(プログラム実行時)いずれのタイミングで指定されるかを表現する
19+
`extents`は、多次元配列の次元数(rank)と各次元の要素数(extent)を表現する
2020
多次元配列ビュー[`std::mdspan`](mdspan.md)に対して、多次元配列のサイズを指示するために用いる。
2121
22+
`extents`の特殊化は[`regular`](/reference/concepts/regular.md)のモデルであり、かつ[トリビアルコピー可能](/reference/type_traits/is_trivially_copyable.md)である。
23+
24+
### 要素数の動的/静的指定
25+
多次元配列における次元の要素数が静的(コンパイル時)または動的(プログラム実行時)いずれのタイミングで決定するかを、各次元毎に指定する。
26+
2227
- 多次元配列の次元数は`sizeof...(Extents)`に等しい
23-
- `Extents`要素のうち[`dynamic_extent`](/reference/span/dynamic_extent.md)に等しい次元は、動的要素数(dynamic extent)となる
24-
- それ以外の`Extents`要素の次元は、静的要素数(static extent)となる
28+
- `Extents`要素が[`dynamic_extent`](/reference/span/dynamic_extent.md)に等しい次元は、動的要素数(dynamic extent)となる
29+
- `Extents`要素がコンパイル時に整数値指定された次元は、静的要素数(static extent)となる
2530
26-
`extents`の特殊化は[`regular`](/reference/concepts/regular.md)のモデルであり、かつ[トリビアルコピー可能](/reference/type_traits/is_trivially_copyable.md)である。
31+
`extents`は、下記の説明専用メンバ変数を保持する。
32+
33+
```cpp
34+
array<IndexType, rank_dynamic()> dynamic-extents;
35+
```
36+
* array[link /reference/array/array.md]
37+
* rank_dynamic()[link extents/rank_dynamic.md]
38+
39+
`extents`オブジェクトサイズ最小化のため、動的要素数次元のサイズ情報のみを`IndexType`型配列として管理する。
40+
動的要素数次元のサイズ情報は非型テンプレートパラメータとして型情報に埋め込まれるため、プログラム実行時のメモリ使用量には影響しない。
2741

2842
### エイリアステンプレート
2943
エイリアステンプレート`dextents`は、次元数`Rank`かつ全次元が動的要素数で指定される`extents`を生成する。
@@ -53,7 +67,7 @@ namespace std {
5367
| 名前 | 説明 | 対応バージョン |
5468
|------|------|----------------|
5569
| `index_type` | `IndexType` | C++23 |
56-
| `size_type` | [`make_unsigned_t`](/reference/type_traits/make_unsigned.md)`<index_type>` | C++23 |
70+
| `size_type` | [`make_unsigned_t`](/reference/type_traits/make_unsigned.md)`<IndexType>` | C++23 |
5771
| `rank_type` | `size_t` | C++23 |
5872

5973

reference/mdspan/extents/extent.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ constexpr index_type extent(rank_type i) const noexcept;
1414
1515
1616
## 事前条件
17-
`i <` [`rank()`](rank.md)が`true`
17+
`i <` [`rank()`](rank.md)
1818
1919
2020
## 戻り値

reference/mdspan/extents/op_constructor.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ constexpr explicit(N != rank_dynamic())
8888
#include <span>
8989
9090
using Ext3x4 = std::extents<size_t, 3, 4>;
91-
using Ext3xN = std::extents<size_t, 3, std::dynamic_extents>;
91+
using Ext3xN = std::extents<size_t, 3, std::dynamic_extent>;
9292
9393
int main()
9494
{
@@ -127,6 +127,8 @@ int main()
127127
}
128128
}
129129
```
130+
* std::extents[link ../extents.md]
131+
* std::span[link /reference/span/span.md]
130132

131133
### 出力
132134
```

reference/mdspan/extents/op_deduction_guide.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ namespace std {
2222
2323
## 例
2424
```cpp example
25-
#include <concept>
25+
#include <concepts>
2626
#include <mdspan>
2727
2828
int main()

reference/mdspan/extents/op_equal.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ friend constexpr bool operator!=(
2323
2424
2525
## 戻り値
26-
`lhs`と`rhs`の次元数が等しく、かつ全事前の要素数が等しいときに`true`を返す。そうでなければ`false`を返す。
26+
`lhs`と`rhs`の次元数[`rank`](rank.md)が等しく、かつ全次元の要素数[`extent`](extent.md)が等しいときに`true`を返す。そうでなければ`false`を返す。
2727
2828
2929
## 例外

reference/mdspan/extents/static_extent.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ static constexpr size_t static_extent(rank_type i) noexcept;
1414
1515
1616
## 事前条件
17-
`i <` [`rank()`](rank.md)が`true`
17+
`i <` [`rank()`](rank.md)
1818
1919
2020
## 戻り値

reference/mdspan/layout_stride.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace std {
1616
* mapping[link mapping.md.nolink]
1717
1818
## 概要
19-
`layout_right`は、多次元配列ビュー[`mdspan`](mdspan.md)に対して、次元毎に任意ストライド幅を指定したレイアウトマッピングを表現するポリシークラスである。
19+
`layout_stride`は、多次元配列ビュー[`mdspan`](mdspan.md)に対して、次元毎に任意ストライド幅を指定したレイアウトマッピングを表現するポリシークラスである。
2020
2121
2222
## メンバ型

0 commit comments

Comments
 (0)