Skip to content

Commit

Permalink
layout_*_padded/mapping: メンバ関数(#1341)
Browse files Browse the repository at this point in the history
  • Loading branch information
yohhoy committed Sep 5, 2024
1 parent 00567b3 commit 110d328
Show file tree
Hide file tree
Showing 20 changed files with 618 additions and 24 deletions.
2 changes: 1 addition & 1 deletion reference/mdspan/layout_left/mapping/op_constructor.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ constexpr explicit(extents_type::rank() > 0)
- `other.`[`required_span_size()`](../../layout_stride/mapping/required_span_size.md)を、`index_type`型で表現できること。
- (7) :
- `extents_type::`[`rank()`](../../extents/rank.md) `> 1`のとき、`other.stride(1) == other.extents(0)`
- `other.`[`required_span_size()`](../../layout_left_padded/mapping/required_span_size.md.nolink)を、`index_type`型で表現できること。
- `other.`[`required_span_size()`](../../layout_left_padded/mapping/required_span_size.md)を、`index_type`型で表現できること。
## 効果
Expand Down
16 changes: 8 additions & 8 deletions reference/mdspan/layout_left_padded/mapping.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,19 +70,19 @@ namespace std {
| 名前 | 説明 | 対応バージョン |
|------|------|----------------|
| `extents` | 多次元配列のサイズ`extents_`を取得する | C++26 |
| [`strides`](mapping/strides.md.nolink) | ストライド幅配列を取得する | C++26 |
| [`required_span_size`](mapping/required_span_size.md.nolink) | 要素アクセス範囲を取得する | C++26 |
| [`operator()`](mapping/op_call.md.nolink) | 多次元配列インデクスから要素位置へ変換する | C++26 |
| [`is_exhaustive`](mapping/is_exhaustive.md.nolink) | [Exhaustive特性](../LayoutMapping.md)を取得する | C++26 |
| [`stride`](mapping/stride.md.nolink) | 指定次元のストライド幅を取得する | C++26 |
| [`strides`](mapping/strides.md) | ストライド幅配列を取得する | C++26 |
| [`required_span_size`](mapping/required_span_size.md) | 要素アクセス範囲を取得する | C++26 |
| [`operator()`](mapping/op_call.md) | 多次元配列インデクスから要素位置へ変換する | C++26 |
| [`is_exhaustive`](mapping/is_exhaustive.md) | [Exhaustive特性](../LayoutMapping.md)を取得する | C++26 |
| [`stride`](mapping/stride.md) | 指定次元のストライド幅を取得する | C++26 |
## 静的メンバ関数
| 名前 | 説明 | 対応バージョン |
|------|------|----------------|
| `is_always_unique` | `true`を返す | C++26 |
| [`is_always_exhaustive`](mapping/is_always_exhaustive.md.nolink) | 型の[Exhaustive特性](../LayoutMapping.md)を取得する | C++26 |
| [`is_always_exhaustive`](mapping/is_always_exhaustive.md) | 型の[Exhaustive特性](../LayoutMapping.md)を取得する | C++26 |
| `is_always_strided` | `true`を返す | C++26 |
| `is_unique` | `true`を返す | C++26 |
| `is_strided` | `true`を返す | C++26 |
Expand All @@ -109,8 +109,8 @@ namespace std {
| 名前 | 説明 | 対応バージョン |
|------|------|----------------|
| [`operator==`](mapping/op_equal.md.nolink) | 等値比較 | C++26 |
| [`operator!=`](mapping/op_equal.md.nolink) | 非等値比較 (`==`により使用可能) | C++26 |
| [`operator==`](mapping/op_equal.md) | 等値比較 | C++26 |
| [`operator!=`](mapping/op_equal.md) | 非等値比較 (`==`により使用可能) | C++26 |
## バージョン
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# is_always_exhaustive
* mdspan[meta header]
* function[meta id-type]
* std[meta namespace]
* layout_left_padded::mapping[meta class]
* cpp26[meta cpp]

```cpp
static constexpr bool is_always_exhaustive() noexcept;
```

## 概要
型の[Exhaustive特性](../../LayoutMapping.md)を取得する。


## 戻り値
- `rank_``0`または`1`のとき、`true`を返す。
- `static-padding-stride`または`first-static-extent`のいずれも[`dynamic_extent`](/reference/span/dynamic_extent.md)に等しくないとき、`static-padding-stride == first-static-extent`を返す。
- そうではないとき、`false`を返す。


## 例外
投げない


## バージョン
### 言語
- C++26

### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): ??
- [ICC](/implementation.md#icc): ??
- [Visual C++](/implementation.md#visual_cpp): ??


## 参照
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
36 changes: 36 additions & 0 deletions reference/mdspan/layout_left_padded/mapping/is_exhaustive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# is_exhaustive
* mdspan[meta header]
* function[meta id-type]
* std[meta namespace]
* layout_left_padded::mapping[meta class]
* cpp26[meta cpp]

```cpp
constexpr bool is_exhaustive() const noexcept;
```

## 概要
レイアウトマッピングの[Exhaustive特性](../../LayoutMapping.md)を取得する。

## 戻り値
- `rank_``0`または`1`のとき、`true`を返す。
- そうではないとき、`extents_.extent(0) == stride(1)`を返す。


## 例外
投げない


## バージョン
### 言語
- C++26

### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): ??
- [ICC](/implementation.md#icc): ??
- [Visual C++](/implementation.md#visual_cpp): ??


## 参照
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
50 changes: 50 additions & 0 deletions reference/mdspan/layout_left_padded/mapping/op_call.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# operator()
* mdspan[meta header]
* function template[meta id-type]
* std[meta namespace]
* layout_left_padded::mapping[meta class]
* cpp26[meta cpp]

```cpp
template<class... Indices>
constexpr size_t operator()(Indices... idxs) const noexcept;
```
## 概要
多次元インデクス値`idxs...`に対応する要素位置を求める。
## テンプレートパラメータ制約
- `sizeof...(Indices) == rank_`が`true`、かつ
- `(`[`is_convertible_v`](/reference/type_traits/is_convertible.md)`<Indices, index_type> && ...)`が`true`、かつ
- `(`[`is_nothrow_constructible_v`](/reference/type_traits/is_nothrow_constructible.md)`<index_type, Indices> && ...)`が`true`であること。
## 事前条件
多次元インデクス値[`extents_type::index-cast`](../../extents/index-cast.md)`(idxs)`は、多次元配列サイズ`extents_`における有効なインデクスであること。
## 戻り値
```cpp
return ((static_cast<index_type>(idxs) * stride(P_rank)) + ... + 0);
```
* stride[link stride.md]


## 例外
投げない


## バージョン
### 言語
- C++26

### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): ??
- [ICC](/implementation.md#icc): ??
- [Visual C++](/implementation.md#visual_cpp): ??


## 参照
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
49 changes: 49 additions & 0 deletions reference/mdspan/layout_left_padded/mapping/op_equal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# operator==
* mdspan[meta header]
* function template[meta id-type]
* std[meta namespace]
* layout_left_padded::mapping[meta class]
* cpp26[meta cpp]

```cpp
template<class LayoutLeftPaddedMapping>
friend constexpr bool operator==(
const mapping& x, const LayoutLeftPaddedMapping& y) noexcept;

//operator==により、以下のオーバーロードが使用可能になる
template<class LayoutLeftPaddedMapping>
friend constexpr bool operator!=(
const mapping& x, const LayoutLeftPaddedMapping& y) noexcept;
```

## 概要
`mapping`の等値比較を行う。


## テンプレートパラメータ制約
- [`is-layout-left-padded-mapping-of`](../../is-layout-left-padded-mapping-of.md)`<LayoutLeftPaddedMapping>`
- `LayoutLeftPaddedMapping::extents_type::`[`rank()`](../../extents/rank.md) `== rank_`


## 戻り値
- [`x.extents() == y.extents()`](../../extents/op_equal.md)かつ`rank_ < 2 || x.`[`stride`](stride.md)`(1) == y.stride(1)`のとき、`true`を返す。
- そうでなければ、`false`を返す。


## 例外
投げない


## バージョン
### 言語
- C++26

### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): ??
- [ICC](/implementation.md#icc): ??
- [Visual C++](/implementation.md#visual_cpp): ??


## 参照
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
37 changes: 37 additions & 0 deletions reference/mdspan/layout_left_padded/mapping/required_span_size.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# required_span_size
* mdspan[meta header]
* function[meta id-type]
* std[meta namespace]
* layout_left_padded::mapping[meta class]
* cpp26[meta cpp]

```cpp
constexpr index_type required_span_size() const noexcept;
```

## 概要
メモリブロックに対する要素アクセス範囲を取得する。


## 戻り値
- 多次元インデクス空間`extents_`のサイズが0のとき、値`0`を返す。
- そうではないとき、`*this(((extents_(P_rank) - index_type(1))...)) + 1`を返す。


## 例外
投げない


## バージョン
### 言語
- C++26

### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): ??
- [ICC](/implementation.md#icc): ??
- [Visual C++](/implementation.md#visual_cpp): ??


## 参照
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
46 changes: 46 additions & 0 deletions reference/mdspan/layout_left_padded/mapping/stride.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# stride
* mdspan[meta header]
* function[meta id-type]
* std[meta namespace]
* layout_left_padded::mapping[meta class]
* cpp26[meta cpp]

```cpp
constexpr index_type stride(rank_type r) const noexcept;
```
## 概要
`r`番目次元のストライド幅を取得する。
## 事前条件
`r < rank_`
## 戻り値
- `r == 0`のとき、値`1`を返す。
- `r == 1`のとき、値`stride-1`を返す。
- そうでなければ、半開区間`[1, r)`の全ての値`k`に対して値`stride-1`と全ての`extents_.extent(k)`を乗算した値を返す。
## 例外
投げない
## バージョン
### 言語
- C++26
### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): ??
- [ICC](/implementation.md#icc): ??
- [Visual C++](/implementation.md#visual_cpp): ??
## 関連項目
- [`strides`](strides.md)
## 参照
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
41 changes: 41 additions & 0 deletions reference/mdspan/layout_left_padded/mapping/strides.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# strides
* mdspan[meta header]
* function[meta id-type]
* std[meta namespace]
* layout_left_padded::mapping[meta class]
* cpp26[meta cpp]

```cpp
constexpr array<index_type, rank_> strides() const noexcept;
```
* array[link /reference/array/array.md]

## 概要
ストライド幅配列を取得する。


## 戻り値
[`array`](/reference/array/array.md)`<index_type, rank_>({`[`stride`](stride.md)`(P_rank)...})`


## 例外
投げない


## バージョン
### 言語
- C++26

### 処理系
- [Clang](/implementation.md#clang): ??
- [GCC](/implementation.md#gcc): ??
- [ICC](/implementation.md#icc): ??
- [Visual C++](/implementation.md#visual_cpp): ??


## 関連項目
- [`stride`](stride.md)


## 参照
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,10 @@ friend constexpr auto submdspan_mapping(
- 値`sub_ext` : 式[`submdspan_extents`](../../submdspan_extents.md)`(extents(), slices...)`の結果
- 型`SubExtents` : `decltype(sub_ext)`
- 値`sub_strides` : `extents()`の各次元インデクス`k`において、[`map-rank[k]`](../../submdspan_extents.md)が[`dynamic_extent`](/reference/span/dynamic_extent.md)ではない`k`に対し`sub_strides[map-rank[k]]`が下記を満たす、[`array`](/reference/array/array.md)`<SubExtents::index_type,` [`SubExtents::rank()`](../../extents/rank.md)`>`型の配列値
- 型`S_k`が[`strided_slice`](../../strided_slice.md)の特殊化かつ`s_k.stride < s_k.extent`の場合、[`stride(k)`](stride.md.nolink) `*` [`de-ice`](../../de-ice.md)`(s_k.stride)`
- そうでなければ、[`stride(k)`](stride.md.nolink)
- 型`S_k`が[`strided_slice`](../../strided_slice.md)の特殊化かつ`s_k.stride < s_k.extent`の場合、[`stride(k)`](stride.md) `*` [`de-ice`](../../de-ice.md)`(s_k.stride)`
- そうでなければ、[`stride(k)`](stride.md)
- パラメータパック`P` : [`is_same_v`](/reference/type_traits/is_same.md)`<`[`make_index_sequence`](/reference/utility/make_index_sequence.md)`<rank()>,` [`index_sequence`](/reference/utility/index_sequence.md)`<P...>> == true`
- 値`offset` : `size_t`型の値[`(*this)`](op_call.md.nolink)`(`[`first_`](../../first_.md)`<index_type, P>(slices...)...)`
- 値`offset` : `size_t`型の値[`(*this)`](op_call.md)`(`[`first_`](../../first_.md)`<index_type, P>(slices...)...)`
説明専用の`submdspan-mapping-impl`関数テンプレートは下記の値を返す。
Expand Down
2 changes: 1 addition & 1 deletion reference/mdspan/layout_right/mapping/op_constructor.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ constexpr explicit(extents_type::rank() > 0)
- `other.`[`required_span_size()`](../../layout_stride/mapping/required_span_size.md)を、`index_type`型で表現できること。
- (7) :
- `extents_type::`[`rank()`](../../extents/rank.md) `> 1`のとき、`other.stride(extents_type::rank() - 2) == other.extents().extent(extents_type::rank() - 1)`
- `other.`[`required_span_size()`](../../layout_right_padded/mapping/required_span_size.md.nolink)を、`index_type`型で表現できること。
- `other.`[`required_span_size()`](../../layout_right_padded/mapping/required_span_size.md)を、`index_type`型で表現できること。
## 効果
Expand Down
Loading

0 comments on commit 110d328

Please sign in to comment.