From 110d32855a2c2ee349d4f1b25903182da17ce2af Mon Sep 17 00:00:00 2001 From: yoh Date: Thu, 5 Sep 2024 19:41:09 +0900 Subject: [PATCH] =?UTF-8?q?layout=5F*=5Fpadded/mapping:=20=E3=83=A1?= =?UTF-8?q?=E3=83=B3=E3=83=90=E9=96=A2=E6=95=B0(#1341)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../layout_left/mapping/op_constructor.md | 2 +- .../mdspan/layout_left_padded/mapping.md | 16 +++--- .../mapping/is_always_exhaustive.md | 38 ++++++++++++++ .../mapping/is_exhaustive.md | 36 +++++++++++++ .../layout_left_padded/mapping/op_call.md | 50 +++++++++++++++++++ .../layout_left_padded/mapping/op_equal.md | 49 ++++++++++++++++++ .../mapping/required_span_size.md | 37 ++++++++++++++ .../layout_left_padded/mapping/stride.md | 46 +++++++++++++++++ .../layout_left_padded/mapping/strides.md | 41 +++++++++++++++ .../mapping/submdspan_mapping.md | 6 +-- .../layout_right/mapping/op_constructor.md | 2 +- .../mdspan/layout_right_padded/mapping.md | 16 +++--- .../mapping/is_always_exhaustive.md | 38 ++++++++++++++ .../mapping/is_exhaustive.md | 36 +++++++++++++ .../layout_right_padded/mapping/op_call.md | 50 +++++++++++++++++++ .../layout_right_padded/mapping/op_equal.md | 49 ++++++++++++++++++ .../mapping/required_span_size.md | 37 ++++++++++++++ .../layout_right_padded/mapping/stride.md | 46 +++++++++++++++++ .../layout_right_padded/mapping/strides.md | 41 +++++++++++++++ .../mapping/submdspan_mapping.md | 6 +-- 20 files changed, 618 insertions(+), 24 deletions(-) create mode 100644 reference/mdspan/layout_left_padded/mapping/is_always_exhaustive.md create mode 100644 reference/mdspan/layout_left_padded/mapping/is_exhaustive.md create mode 100644 reference/mdspan/layout_left_padded/mapping/op_call.md create mode 100644 reference/mdspan/layout_left_padded/mapping/op_equal.md create mode 100644 reference/mdspan/layout_left_padded/mapping/required_span_size.md create mode 100644 reference/mdspan/layout_left_padded/mapping/stride.md create mode 100644 reference/mdspan/layout_left_padded/mapping/strides.md create mode 100644 reference/mdspan/layout_right_padded/mapping/is_always_exhaustive.md create mode 100644 reference/mdspan/layout_right_padded/mapping/is_exhaustive.md create mode 100644 reference/mdspan/layout_right_padded/mapping/op_call.md create mode 100644 reference/mdspan/layout_right_padded/mapping/op_equal.md create mode 100644 reference/mdspan/layout_right_padded/mapping/required_span_size.md create mode 100644 reference/mdspan/layout_right_padded/mapping/stride.md create mode 100644 reference/mdspan/layout_right_padded/mapping/strides.md diff --git a/reference/mdspan/layout_left/mapping/op_constructor.md b/reference/mdspan/layout_left/mapping/op_constructor.md index 14a9af04a..84170e7f5 100644 --- a/reference/mdspan/layout_left/mapping/op_constructor.md +++ b/reference/mdspan/layout_left/mapping/op_constructor.md @@ -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`型で表現できること。 ## 効果 diff --git a/reference/mdspan/layout_left_padded/mapping.md b/reference/mdspan/layout_left_padded/mapping.md index 7b80516ca..d78a0ac3b 100644 --- a/reference/mdspan/layout_left_padded/mapping.md +++ b/reference/mdspan/layout_left_padded/mapping.md @@ -70,11 +70,11 @@ 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 | ## 静的メンバ関数 @@ -82,7 +82,7 @@ namespace std { | 名前 | 説明 | 対応バージョン | |------|------|----------------| | `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 | @@ -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 | ## バージョン diff --git a/reference/mdspan/layout_left_padded/mapping/is_always_exhaustive.md b/reference/mdspan/layout_left_padded/mapping/is_always_exhaustive.md new file mode 100644 index 000000000..79aeaa5f6 --- /dev/null +++ b/reference/mdspan/layout_left_padded/mapping/is_always_exhaustive.md @@ -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) diff --git a/reference/mdspan/layout_left_padded/mapping/is_exhaustive.md b/reference/mdspan/layout_left_padded/mapping/is_exhaustive.md new file mode 100644 index 000000000..36ff30231 --- /dev/null +++ b/reference/mdspan/layout_left_padded/mapping/is_exhaustive.md @@ -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) diff --git a/reference/mdspan/layout_left_padded/mapping/op_call.md b/reference/mdspan/layout_left_padded/mapping/op_call.md new file mode 100644 index 000000000..a0561eeb1 --- /dev/null +++ b/reference/mdspan/layout_left_padded/mapping/op_call.md @@ -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 +constexpr size_t operator()(Indices... idxs) const noexcept; +``` + +## 概要 +多次元インデクス値`idxs...`に対応する要素位置を求める。 + + +## テンプレートパラメータ制約 +- `sizeof...(Indices) == rank_`が`true`、かつ +- `(`[`is_convertible_v`](/reference/type_traits/is_convertible.md)` && ...)`が`true`、かつ +- `(`[`is_nothrow_constructible_v`](/reference/type_traits/is_nothrow_constructible.md)` && ...)`が`true`であること。 + + +## 事前条件 +多次元インデクス値[`extents_type::index-cast`](../../extents/index-cast.md)`(idxs)`は、多次元配列サイズ`extents_`における有効なインデクスであること。 + + +## 戻り値 +```cpp +return ((static_cast(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) diff --git a/reference/mdspan/layout_left_padded/mapping/op_equal.md b/reference/mdspan/layout_left_padded/mapping/op_equal.md new file mode 100644 index 000000000..734a10cd1 --- /dev/null +++ b/reference/mdspan/layout_left_padded/mapping/op_equal.md @@ -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 +friend constexpr bool operator==( + const mapping& x, const LayoutLeftPaddedMapping& y) noexcept; + +//operator==により、以下のオーバーロードが使用可能になる +template +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::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) diff --git a/reference/mdspan/layout_left_padded/mapping/required_span_size.md b/reference/mdspan/layout_left_padded/mapping/required_span_size.md new file mode 100644 index 000000000..4499cc0af --- /dev/null +++ b/reference/mdspan/layout_left_padded/mapping/required_span_size.md @@ -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) diff --git a/reference/mdspan/layout_left_padded/mapping/stride.md b/reference/mdspan/layout_left_padded/mapping/stride.md new file mode 100644 index 000000000..b798eaab3 --- /dev/null +++ b/reference/mdspan/layout_left_padded/mapping/stride.md @@ -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) diff --git a/reference/mdspan/layout_left_padded/mapping/strides.md b/reference/mdspan/layout_left_padded/mapping/strides.md new file mode 100644 index 000000000..0fd7389f9 --- /dev/null +++ b/reference/mdspan/layout_left_padded/mapping/strides.md @@ -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 strides() const noexcept; +``` +* array[link /reference/array/array.md] + +## 概要 +ストライド幅配列を取得する。 + + +## 戻り値 +[`array`](/reference/array/array.md)`({`[`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) diff --git a/reference/mdspan/layout_left_padded/mapping/submdspan_mapping.md b/reference/mdspan/layout_left_padded/mapping/submdspan_mapping.md index 699123482..39da81837 100644 --- a/reference/mdspan/layout_left_padded/mapping/submdspan_mapping.md +++ b/reference/mdspan/layout_left_padded/mapping/submdspan_mapping.md @@ -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)``型の配列値 - - 型`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)`,` [`index_sequence`](/reference/utility/index_sequence.md)`> == true` -- 値`offset` : `size_t`型の値[`(*this)`](op_call.md.nolink)`(`[`first_`](../../first_.md)`(slices...)...)` +- 値`offset` : `size_t`型の値[`(*this)`](op_call.md)`(`[`first_`](../../first_.md)`(slices...)...)` 説明専用の`submdspan-mapping-impl`関数テンプレートは下記の値を返す。 diff --git a/reference/mdspan/layout_right/mapping/op_constructor.md b/reference/mdspan/layout_right/mapping/op_constructor.md index a26d29527..e11c6ff4d 100644 --- a/reference/mdspan/layout_right/mapping/op_constructor.md +++ b/reference/mdspan/layout_right/mapping/op_constructor.md @@ -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`型で表現できること。 ## 効果 diff --git a/reference/mdspan/layout_right_padded/mapping.md b/reference/mdspan/layout_right_padded/mapping.md index 97528c06a..d71ae3215 100644 --- a/reference/mdspan/layout_right_padded/mapping.md +++ b/reference/mdspan/layout_right_padded/mapping.md @@ -70,11 +70,11 @@ 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 | ## 静的メンバ関数 @@ -82,7 +82,7 @@ namespace std { | 名前 | 説明 | 対応バージョン | |------|------|----------------| | `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 | @@ -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 | ## バージョン diff --git a/reference/mdspan/layout_right_padded/mapping/is_always_exhaustive.md b/reference/mdspan/layout_right_padded/mapping/is_always_exhaustive.md new file mode 100644 index 000000000..41c5aaebc --- /dev/null +++ b/reference/mdspan/layout_right_padded/mapping/is_always_exhaustive.md @@ -0,0 +1,38 @@ +# is_always_exhaustive +* mdspan[meta header] +* function[meta id-type] +* std[meta namespace] +* layout_right_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`または`last-static-extent`のいずれも[`dynamic_extent`](/reference/span/dynamic_extent.md)に等しくないとき、`static-padding-stride == last-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) diff --git a/reference/mdspan/layout_right_padded/mapping/is_exhaustive.md b/reference/mdspan/layout_right_padded/mapping/is_exhaustive.md new file mode 100644 index 000000000..d507a7ca7 --- /dev/null +++ b/reference/mdspan/layout_right_padded/mapping/is_exhaustive.md @@ -0,0 +1,36 @@ +# is_exhaustive +* mdspan[meta header] +* function[meta id-type] +* std[meta namespace] +* layout_right_padded::mapping[meta class] +* cpp26[meta cpp] + +```cpp +constexpr bool is_exhaustive() const noexcept; +``` + +## 概要 +レイアウトマッピングの[Exhaustive特性](../../LayoutMapping.md)を取得する。 + +## 戻り値 +- `rank_`が`0`または`1`のとき、`true`を返す。 +- そうではないとき、`extents_.extent(rank_ - 1) == stride(rank_ - 2)`を返す。 + + +## 例外 +投げない + + +## バージョン +### 言語 +- 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) diff --git a/reference/mdspan/layout_right_padded/mapping/op_call.md b/reference/mdspan/layout_right_padded/mapping/op_call.md new file mode 100644 index 000000000..04a3416ea --- /dev/null +++ b/reference/mdspan/layout_right_padded/mapping/op_call.md @@ -0,0 +1,50 @@ +# operator() +* mdspan[meta header] +* function template[meta id-type] +* std[meta namespace] +* layout_right_padded::mapping[meta class] +* cpp26[meta cpp] + +```cpp +template +constexpr size_t operator()(Indices... idxs) const noexcept; +``` + +## 概要 +多次元インデクス値`idxs...`に対応する要素位置を求める。 + + +## テンプレートパラメータ制約 +- `sizeof...(Indices) == rank_`が`true`、かつ +- `(`[`is_convertible_v`](/reference/type_traits/is_convertible.md)` && ...)`が`true`、かつ +- `(`[`is_nothrow_constructible_v`](/reference/type_traits/is_nothrow_constructible.md)` && ...)`が`true`であること。 + + +## 事前条件 +多次元インデクス値[`extents_type::index-cast`](../../extents/index-cast.md)`(idxs)`は、多次元配列サイズ`extents_`における有効なインデクスであること。 + + +## 戻り値 +```cpp +return ((static_cast(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) diff --git a/reference/mdspan/layout_right_padded/mapping/op_equal.md b/reference/mdspan/layout_right_padded/mapping/op_equal.md new file mode 100644 index 000000000..c5e50bf42 --- /dev/null +++ b/reference/mdspan/layout_right_padded/mapping/op_equal.md @@ -0,0 +1,49 @@ +# operator== +* mdspan[meta header] +* function template[meta id-type] +* std[meta namespace] +* layout_right_padded::mapping[meta class] +* cpp26[meta cpp] + +```cpp +template +friend constexpr bool operator==( + const mapping& x, const LayoutRightPaddedMapping& y) noexcept; + +//operator==により、以下のオーバーロードが使用可能になる +template +friend constexpr bool operator!=( + const mapping& x, const LayoutRightPaddedMapping& y) noexcept; +``` + +## 概要 +`mapping`の等値比較を行う。 + + +## テンプレートパラメータ制約 +- [`is-layout-right-padded-mapping-of`](../../is-layout-right-padded-mapping-of.md)`` +- `LayoutRightPaddedMapping::extents_type::`[`rank()`](../../extents/rank.md) `== rank_` + + +## 戻り値 +- [`x.extents() == y.extents()`](../../extents/op_equal.md)かつ`rank_ < 2 || x.`[`stride`](stride.md)`(rank_ - 2) == y.stride(rank_ - 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) diff --git a/reference/mdspan/layout_right_padded/mapping/required_span_size.md b/reference/mdspan/layout_right_padded/mapping/required_span_size.md new file mode 100644 index 000000000..13de5e5bf --- /dev/null +++ b/reference/mdspan/layout_right_padded/mapping/required_span_size.md @@ -0,0 +1,37 @@ +# required_span_size +* mdspan[meta header] +* function[meta id-type] +* std[meta namespace] +* layout_right_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) diff --git a/reference/mdspan/layout_right_padded/mapping/stride.md b/reference/mdspan/layout_right_padded/mapping/stride.md new file mode 100644 index 000000000..4cb1b8cb4 --- /dev/null +++ b/reference/mdspan/layout_right_padded/mapping/stride.md @@ -0,0 +1,46 @@ +# stride +* mdspan[meta header] +* function[meta id-type] +* std[meta namespace] +* layout_right_padded::mapping[meta class] +* cpp26[meta cpp] + +```cpp +constexpr index_type stride(rank_type r) const noexcept; +``` + +## 概要 +`r`番目次元のストライド幅を取得する。 + + +## 事前条件 +`r < rank_` + + +## 戻り値 +- `r == rank_ - 1`のとき、値`1`を返す。 +- `r == rank_ - 2`のとき、値`stride-rm2`を返す。 +- そうでなければ、半開区間`[r + 1, rank_ - 1)`の全ての値`k`に対して値`stride-rm2`と全ての`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) diff --git a/reference/mdspan/layout_right_padded/mapping/strides.md b/reference/mdspan/layout_right_padded/mapping/strides.md new file mode 100644 index 000000000..d7a4192b5 --- /dev/null +++ b/reference/mdspan/layout_right_padded/mapping/strides.md @@ -0,0 +1,41 @@ +# strides +* mdspan[meta header] +* function[meta id-type] +* std[meta namespace] +* layout_right_padded::mapping[meta class] +* cpp26[meta cpp] + +```cpp +constexpr array strides() const noexcept; +``` +* array[link /reference/array/array.md] + +## 概要 +ストライド幅配列を取得する。 + + +## 戻り値 +[`array`](/reference/array/array.md)`({`[`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) diff --git a/reference/mdspan/layout_right_padded/mapping/submdspan_mapping.md b/reference/mdspan/layout_right_padded/mapping/submdspan_mapping.md index 6d5a1beff..b53c0d1e4 100644 --- a/reference/mdspan/layout_right_padded/mapping/submdspan_mapping.md +++ b/reference/mdspan/layout_right_padded/mapping/submdspan_mapping.md @@ -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)``型の配列値 - - 型`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)`,` [`index_sequence`](/reference/utility/index_sequence.md)`> == true` -- 値`offset` : `size_t`型の値[`(*this)`](op_call.md.nolink)`(`[`first_`](../../first_.md)`(slices...)...)` +- 値`offset` : `size_t`型の値[`(*this)`](op_call.md)`(`[`first_`](../../first_.md)`(slices...)...)` 説明専用の`submdspan-mapping-impl`関数テンプレートは下記の値を返す。