Skip to content

Commit e88b8d5

Browse files
committed
mdspan/layout_{left,right}_padded/mapping: コンストラクタ P2642R6
1 parent 4a43d00 commit e88b8d5

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

reference/mdspan/layout_left/mapping/op_constructor.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,17 +56,16 @@ constexpr explicit(extents_type::rank() > 0)
5656
5757
5858
## 適格要件
59-
- (7) : 以下を満たすとき、`extents_type::`[`static_extent`](../../extents/static_extent.md)`(0)`が`LayoutLeftPaddedMapping::padding_stride`の倍数であること
59+
- (7) : 以下を満たすとき、`extents_type::`[`static_extent`](../../extents/static_extent.md)`(0)`が[`LayoutLeftPaddedMapping::static-padding-stride`](../../layout_left_padded/mapping.md)に等しいこと
6060
- `extents_type::`[`rank()`](../../extents/rank.md) `> 1`、かつ
6161
- `extents_type::`[`static_extent`](../../extents/static_extent.md)`(0)`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくなく、かつ
62-
- `LayoutLeftPaddedMapping::extents_type::`[`static_extent`](../../extents/static_extent.md)`(0)`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくなく、かつ
63-
- `LayoutLeftPaddedMapping::padding_stride`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくないこと。
62+
- `LayoutLeftPaddedMapping::static-padding-stride`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくないとき。
6463
6564
6665
## 事前条件
6766
- (3) : `e`の多次元インデクス空間のサイズを、`index_type`型で表現できること。
6867
- (4) : `other.`[`required_span_size()`](required_span_size.md)を、`index_type`型で表現できること。
69-
- (5) : `other.`[`required_span_size()`](../../layout_left/mapping/required_span_size.md)を、`index_type`型で表現できること。
68+
- (5) : `other.`[`required_span_size()`](../../layout_right/mapping/required_span_size.md)を、`index_type`型で表現できること。
7069
- (6) :
7170
- `extents_type::`[`rank()`](../../extents/rank.md) `> 0`のとき、`other`における全次元のストライド幅が[`layout_left::mapping`相当の制約](stride.md)をもつこと。
7271
- `other.`[`required_span_size()`](../../layout_stride/mapping/required_span_size.md)を、`index_type`型で表現できること。

reference/mdspan/layout_right/mapping/op_constructor.md

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,18 @@ template<class OtherExtents>
2020
constexpr explicit(!is_convertible_v<OtherExtents, extents_type>)
2121
mapping(const layout_left::mapping<OtherExtents>& other) noexcept; // (5)
2222

23+
template<class LayoutRightPaddedMapping>
24+
constexpr explicit(!is_convertible_v<typename LayoutRightPaddedMapping::extents_type, extents_type>)
25+
mapping(const LayoutRightPaddedMapping&) noexcept; // (7) C++26
26+
2327
template<class OtherExtents>
2428
constexpr explicit(extents_type::rank() > 0)
2529
mapping(const layout_stride::mapping<OtherExtents>& other) noexcept; // (6)
2630
```
2731
* is_convertible_v[link /reference/type_traits/is_convertible.md]
2832
* rank()[link ../../extents/rank.md]
2933
* layout_left::mapping[link ../../layout_left/mapping.md]
34+
* LayoutRightPaddedMapping[link ../../layout_right_padded/mapping.md]
3035
* layout_stride::mapping[link ../../layout_stride/mapping.md]
3136
3237
## 概要
@@ -36,6 +41,7 @@ constexpr explicit(extents_type::rank() > 0)
3641
- (4) : 他`layout_right::mapping`からの変換コンストラクタ
3742
- (5) : [`layout_left::mapping`](../../layout_left/mapping.md)からの変換コンストラクタ
3843
- (6) : [`layout_stride::mapping`](../../layout_stride/mapping.md)からの変換コンストラクタ
44+
- (7) : [`layout_right_padded<S>::mapping`](../../layout_right_padded/mapping.md)からの変換コンストラクタ
3945
4046
4147
## テンプレートパラメータ制約
@@ -44,6 +50,16 @@ constexpr explicit(extents_type::rank() > 0)
4450
- `extents_type::`[`rank()`](../../extents/rank.md) `<= 1`、かつ
4551
- [`is_constructible_v`](/reference/type_traits/is_constructible.md)`<extents_type, OtherExtents>`が`true`であること。
4652
- (6) : [`is_constructible_v`](/reference/type_traits/is_constructible.md)`<extents_type, OtherExtents>`が`true`であること。
53+
- (7) :
54+
- [`is-layout-right-padded-mapping-of`](../../is-layout-right-padded-mapping-of.md)`<LayoutRightPaddedMapping>`が`true`、かつ
55+
- [`is_constructible_v`](/reference/type_traits/is_constructible.md)`<extents_type, typename LayoutRightPaddedMapping::extents_type>`が`true`であること。
56+
57+
58+
## 適格要件
59+
- (7) : 以下を満たすとき、`extents_type::`[`static_extent`](../../extents/static_extent.md)`(`[`Extents::rank()`](../../extents/rank.md) `- 1)`が[`LayoutRightPaddedMapping::static-padding-stride`](../../layout_right_padded/mapping.md)に等しいこと。
60+
- `extents_type::`[`rank()`](../../extents/rank.md) `> 1`、かつ
61+
- `extents_type::`[`static_extent`](../../extents/static_extent.md)`(Extents::rank() - 1)`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくなく、かつ
62+
- `LayoutRightPaddedMapping::static-padding-stride`が[`dynamic_extent`](/reference/span/dynamic_extent.md)と等しくないとき。
4763
4864
4965
## 事前条件
@@ -53,11 +69,14 @@ constexpr explicit(extents_type::rank() > 0)
5369
- (6) :
5470
- `extents_type::`[`rank()`](../../extents/rank.md) `> 0`のとき、`other`における全次元のストライド幅が[`layout_right::mapping`相当の制約](stride.md)をもつこと。
5571
- `other.`[`required_span_size()`](../../layout_stride/mapping/required_span_size.md)を、`index_type`型で表現できること。
72+
- (7) :
73+
- `extents_type::`[`rank()`](../../extents/rank.md) `> 1`のとき、`other.stride(extents_type::rank() - 2) == other.extents().extent(extents_type::rank() - 1)`
74+
- `other.`[`required_span_size()`](../../layout_right_padded/mapping/required_span_size.md.nolink)を、`index_type`型で表現できること。
5675
5776
5877
## 効果
5978
- (3) : `e`を用いて`extents_`を直接非リスト初期化する。
60-
- (4), (5), (6) : `other.extents()`を用いて`extents_`を直接非リスト初期化する。
79+
- (4), (5), (6), (7) : `other.extents()`を用いて`extents_`を直接非リスト初期化する。
6180
6281
6382
## 例外
@@ -67,6 +86,7 @@ constexpr explicit(extents_type::rank() > 0)
6786
## explicitになる条件
6887
- (4), (5) : `!`[`is_convertible_v`](/reference/type_traits/is_convertible.md)`<OtherExtents, extents_type>`
6988
- (6) : [`extents_type::rank()`](../../extents/rank.md) `> 0`
89+
- (7) : `!`[`is_convertible_v`](/reference/type_traits/is_convertible.md)`<typename LayoutRightPaddedMapping::extents_type, extents_type>`
7090
7191
7292
## 例
@@ -143,7 +163,9 @@ int main()
143163
## 関連項目
144164
- [`layout_left::mapping`](../../layout_left/mapping.md)
145165
- [`layout_stride::mapping`](../../layout_stride/mapping.md)
166+
- [`layout_right_padded::mapping`](../../layout_right_padded/mapping.md)
146167

147168

148169
## 参照
149170
- [P0009R18 MDSPAN](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p0009r18.html)
171+
- [P2642R6 Padded mdspan layouts](https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2024/p2642r6.pdf)

0 commit comments

Comments
 (0)