C++ named requirements: LayoutMapping (since C++23)
LayoutMapping は、多次元インデックスから std:: mdspan 内のデータハンドルへの一次元オフセットへのマッピングを制御します。
目次 |
要件
型
M
は、以下の条件が
LayoutMapping
を満たす場合、
copyable
および
equality_comparable
のモデルであり、以下が
true
となります:
- std:: is_nothrow_move_constructible_v < M >
- std:: is_nothrow_move_assignable_v < M >
- std:: is_nothrow_swappable_v < M >
また、以下の型と値が与えられた場合、下記の表に示す式は有効であり、示された意味を持ちます:
凡例
| 型 | 定義 |
M
|
レイアウトマッピングクラス |
| 値 | 定義 |
| m |
(おそらくconst修飾された) 型
M
の値
|
| i , j | (おそらくconst修飾された) 整数のパックで、 m. extents ( ) 内の多次元インデックス |
| r | (おそらくconst修飾された) typename M :: extents_type のランクインデックス |
| d_r | (おそらくconst修飾された) 整数のパックで、 sizeof... ( d_r ) == M :: extents_type :: rank ( ) が true であり、ランクインデックス r の要素が 1 に等しく、他のすべての要素が 0 に等しい |
メンバー型
| 名前 | 型 | 要件 |
|---|---|---|
M::extents_type
|
クラステンプレート std:: extents の特殊化 | |
M::index_type
|
typename M :: extents_type :: index_type | |
M::rank_type
|
typename M :: extents_type :: rank_type | |
M::layout_type
|
レイアウトマッピングポリシー
MP
で、
typename
MP
::
template
mapping
<
E
>
が
M
となるもの
ただし、あるエクステント型
E
に対して
|
LayoutMappingPolicy
であり、
M
が
MP
のマッピング型であるもの
|
メンバー関数と演算子
| 式 | 戻り値の型 | セマンティクス |
|---|---|---|
| m. extents ( ) | const typename M :: extents_type & | 関連する多次元インデックス空間への定数参照を返します |
| m ( i... ) | typename M :: index_type |
|
| m. required_span_size ( ) | typename M :: index_type |
|
| m. is_unique ( ) | bool | すべての i と j について ( i ! = j || ... ) が true の場合に限り、 m ( i... ) ! = m ( j... ) が true となる場合にのみ true を返す。 [note 1] |
| m. is_exhaustive ( ) | bool |
範囲
[
0
,
m.
required_span_size
(
)
)
内のすべての
k
に対して、
m
(
i...
)
が
k
と等しくなるような
i
が存在する場合に限り
true
を返す。
[注 2]
|
| m. is_strided ( ) | bool | true を返すのは、 m. extents ( ) のすべてのランクインデックス r に対して、整数 s_r が存在し、かつ ( i + d_r ) が m. extents ( ) 内の多次元インデックスとなるすべての i について、 m ( ( i + d_r ) ... ) - m ( i... ) が s_r と等しい場合のみです。 [注釈 3] |
| m. stride ( r ) | typename M :: index_type |
|
| M :: is_always_unique ( ) | bool |
|
| M :: is_always_exhaustive ( ) | bool |
|
| M :: is_always_strided ( ) | bool |
|
コンセプト
std::layout_stride::mapping で使用される制約について、以下の説明専用コンセプトが定義されています。
|
template
<
class
M
>
concept
/*レイアウトマッピング類似*/
=
requires
|
( 説明専用* ) | |
LayoutMapping 要件の最小限の使用可能性制約を定義します。このコンセプトは、前述の述語マッピング特性関数が存在し、定数式であり、戻り値の型が bool であることをチェックします。
/*is-extents*/
<
E
>
is
true
であるのは、
E
が
std::extents
の特殊化である場合に限ります。
標準ライブラリ
以下の標準ライブラリ型は LayoutMapping 要件を満たします:
|
layout_left
のレイアウトマッピング
(
std::layout_left
の公開メンバークラステンプレート)
|
|
|
layout_right
のレイアウトマッピング
(
std::layout_right
の公開メンバークラステンプレート)
|
|
|
layout_stride
のレイアウトマッピング
(
std::layout_stride
の公開メンバークラステンプレート)
|
|
|
layout_left_padded
のレイアウトマッピング
(
std::layout_left_padded<PaddingValue>
の公開メンバークラステンプレート)
|
|
|
layout_right_padded
のレイアウトマッピング
(
std::layout_right_padded<PaddingValue>
の公開メンバークラステンプレート)
|