Skip to content

Commit c473fc9

Browse files
committed
mdspan/default_accessor: 全メンバ(#1077)
1 parent d862f0a commit c473fc9

File tree

5 files changed

+156
-20
lines changed

5 files changed

+156
-20
lines changed

reference/mdspan/default_accessor.md

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,43 @@ namespace std {
1212
```
1313
1414
## 概要
15-
`default_accessor`は、多次元配列ビュー[`mdspan`](mdspan.md)の要素アクセスデフォルト動作を定義する
15+
`default_accessor`は、多次元配列ビュー[`mdspan`](mdspan.md)を介した要素アクセスのデフォルト動作を定義する
1616
1717
`ElementType`は抽象クラス型もしくは配列型のいずれでもない完全型であること。
1818
19-
`default_accessor`はアクセサポリシー要件を満たす。
20-
また`default_accessor`は[トリビアルコピー可能](/reference/type_traits/is_trivially_copyable.md)であり、[`semiregular`](/reference/concepts/semiregular.md)のモデルである。
19+
`default_accessor`は[トリビアルコピー可能](/reference/type_traits/is_trivially_copyable.md)であり、[`semiregular`](/reference/concepts/semiregular.md)のモデルである。
20+
21+
### アクセサポリシー要件
22+
`default_accessor`は、下記のアクセサポリシー要件を満たす。
23+
24+
説明用の型`A`をアクセサポリシーとしたとき
25+
26+
- `A`は[`copyable`](/reference/concepts/copyable.md)のモデルであり、かつ
27+
- [`is_nothrow_move_constructible_v`](/reference/type_traits/is_nothrow_constructible.md)`<A>`は`true`であり、かつ
28+
- [`is_nothrow_move_assignable_v`](/reference/type_traits/is_nothrow_move_assignable.md)`<A>`は`true`であり、かつ
29+
- [`is_nothrow_swappable_v`](/reference/type_traits/is_nothrow_swappable.md)`<A>`は`true`であること
30+
31+
型`A`は下記のメンバ型を持つこと
32+
33+
- `A::element_type` : 要素型
34+
- `A::data_handle_type` : メモリブロックのポインタ型
35+
- `A::reference` : 要素への参照型
36+
- `A::offset_policy` : `offset`適用後のアクセサポリシー
37+
38+
説明用の変数`a`を`(const) A`の値、`p`を`(const) A::data_handle_type`の値、`i`を`size_t`の値としたとき、下記の式が妥当であること
39+
40+
- `a.access(p, i)` : `A::eference`を返す
41+
- `a.offset(p, i)` : `A::offset_policy::data_handle_type`を返す
42+
2143
2244
## メンバ関数
2345
2446
| 名前 | 説明 | 対応バージョン |
2547
|------|------|----------------|
26-
| [`(constructor)`](default_accessor/op_constructor.md.nolink) | コンストラクタ | C++23 |
48+
| [`(constructor)`](default_accessor/op_constructor.md) | コンストラクタ | C++23 |
2749
| `(destructor)` | デストラクタ | C++23 |
28-
| [`access`](default_accessor/access.md.nolink) | 指定オフセット位置にある要素へアクセスする | C++23 |
29-
| [`offset`](default_accessor/offset.md.nolink) | 指定オフセット位置のハンドルを取得する | C++23 |
50+
| [`access`](default_accessor/access.md) | 指定オフセット位置にある要素へアクセスする | C++23 |
51+
| [`offset`](default_accessor/offset.md) | 指定オフセット位置のハンドルを取得する | C++23 |
3052
3153
3254
## メンバ型
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# access
2+
* mdspan[meta header]
3+
* function[meta id-type]
4+
* std[meta namespace]
5+
* default_accessor[meta class]
6+
* cpp23[meta cpp]
7+
8+
```cpp
9+
constexpr reference access(data_handle_type p, size_t i) const noexcept;
10+
```
11+
12+
## 概要
13+
指定オフセット位置にある要素へアクセスする。
14+
15+
16+
## 戻り値
17+
`p[i]`
18+
19+
20+
## 例外
21+
投げない
22+
23+
24+
## バージョン
25+
### 言語
26+
- C++23
27+
28+
### 処理系
29+
- [Clang](/implementation.md#clang): ??
30+
- [GCC](/implementation.md#gcc): ??
31+
- [ICC](/implementation.md#icc): ??
32+
- [Visual C++](/implementation.md#visual_cpp): ??
33+
34+
35+
## 参照
36+
- [P0009R18 MDSPAN](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html)
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# offset
2+
* mdspan[meta header]
3+
* function[meta id-type]
4+
* std[meta namespace]
5+
* default_accessor[meta class]
6+
* cpp23[meta cpp]
7+
8+
```cpp
9+
constexpr data_handle_type offset(data_handle_type p, size_t i) const noexcept;
10+
```
11+
12+
## 概要
13+
指定オフセット位置のハンドルを取得する。
14+
15+
## 戻り値
16+
`p + i`
17+
18+
19+
## 例外
20+
投げない
21+
22+
23+
## バージョン
24+
### 言語
25+
- C++23
26+
27+
### 処理系
28+
- [Clang](/implementation.md#clang): ??
29+
- [GCC](/implementation.md#gcc): ??
30+
- [ICC](/implementation.md#icc): ??
31+
- [Visual C++](/implementation.md#visual_cpp): ??
32+
33+
34+
## 参照
35+
- [P0009R18 MDSPAN](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html)
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# コンストラクタ
2+
* mdspan[meta header]
3+
* function[meta id-type]
4+
* std[meta namespace]
5+
* default_accessor[meta class]
6+
* cpp23[meta cpp]
7+
8+
```cpp
9+
constexpr default_accessor() noexcept = default; // (1)
10+
11+
template<class OtherElementType>
12+
constexpr default_accessor(default_accessor<OtherElementType>) noexcept; // (2)
13+
```
14+
15+
## 概要
16+
- (1) : デフォルトコンストラクタ
17+
- (2) : 他`default_accessor`からの変換コンストラクタ
18+
19+
20+
## テンプレートパラメータ制約
21+
- (2) : [`is_convertible_v`](/reference/type_traits/is_convertible.md)`<OtherElementType(*)[], element_type(*)[]>`が`true`であること
22+
23+
24+
## 例外
25+
投げない
26+
27+
28+
## バージョン
29+
### 言語
30+
- C++23
31+
32+
### 処理系
33+
- [Clang](/implementation.md#clang): ??
34+
- [GCC](/implementation.md#gcc): ??
35+
- [ICC](/implementation.md#icc): ??
36+
- [Visual C++](/implementation.md#visual_cpp): ??
37+
38+
39+
## 参照
40+
- [P0009R18 MDSPAN](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html)
41+
- [P2599R2 `index_type` & `size_type` in `mdspan`](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p2599r2.pdf)

reference/mdspan/mdspan.md

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66

77
```cpp
88
namespace std {
9-
template<class ElementType,
10-
class Extents,
11-
class LayoutPolicy = layout_right,
12-
class AccessorPolicy = default_accessor<ElementType>>
9+
template<
10+
class ElementType,
11+
class Extents,
12+
class LayoutPolicy = layout_right,
13+
class AccessorPolicy = default_accessor<ElementType>>
1314
class mdspan;
1415
}
1516
```
@@ -50,7 +51,7 @@ namespace std {
5051
|------|------|----------------|
5152
| [`(constructor)`](mdspan/op_constructor.md.nolink) | コンストラクタ | C++23 |
5253
| `(destructor)` | デストラクタ | C++23 |
53-
| [`operator=`](mdspan/op_assing.md.nolink) | 代入演算子 | C++23 |
54+
| [`operator=`](mdspan/op_assign.md.nolink) | 代入演算子 | C++23 |
5455
5556
### 要素へのアクセス
5657
@@ -101,15 +102,15 @@ namespace std {
101102
| 名前 | 説明 | 対応バージョン |
102103
|------|------|----------------|
103104
| `extents_type` | 多次元配列サイズ型[`Extents`](extents.md) | C++23 |
104-
| `layout_type` | レイアウトポリシー型`LayoutPolicy` | C++23 |
105-
| `accessor_type` | アクセサポリシー型`AccessorPolicy` | C++23 |
106-
| `mapping_type` | レイアウトマッピング型`typename layout_type::template mapping<extents_type>` | C++23 |
107-
| `element_type` | 多次元配列の要素型`ElementType` | C++23 |
108-
| `value_type` | 要素の値型[`remove_cv_t`](/reference/type_traits/remove_cvref.md)`<element_type>` | C++23 |
109-
| `size_type` | `typename extents_type::size_type` | C++23 |
110-
| `rank_type` | `typename extents_type::rank_type` | C++23 |
111-
| `pointer` | `typename accessor_type::pointer` | C++23 |
112-
| `reference` | ` typename accessor_type::reference` | C++23 |
105+
| `layout_type` | レイアウトマッピングポリシー`LayoutPolicy` | C++23 |
106+
| `accessor_type` | アクセサポリシー`AccessorPolicy` | C++23 |
107+
| `mapping_type` | レイアウトマッピング`LayoutPolicy::mapping<Extents>` | C++23 |
108+
| `element_type` | 要素型`ElementType` | C++23 |
109+
| `value_type` | 要素の値型[`remove_cv_t`](/reference/type_traits/remove_cvref.md)`<ElementType>` | C++23 |
110+
| `size_type` | [`Extents::size_type`](extents.md) | C++23 |
111+
| `rank_type` | [`Extents::rank_type`](extents.md) | C++23 |
112+
| `pointer` | `AccessorPolicy::pointer` | C++23 |
113+
| `reference` | `AccessorPolicy::reference` | C++23 |
113114
114115
115116
## 非メンバ(*Hidden friends*)関数
@@ -164,6 +165,7 @@ int main()
164165

165166
## 関連項目
166167
- [`extents`](extents.md)
168+
- [`default_accessor`](default_accessor.md)
167169

168170

169171
## 参照

0 commit comments

Comments
 (0)