template<class LayoutMapping>
concept sliceable-mapping = see below;
概要
sliceable-mappingは、submdspan動作仕様定義で用いられる説明専用のコンセプトである。
説明用のlmをLayoutMapping型のオブジェクト、feをsizeof...(fe) == LayoutMapping::extents_type::rank()がtrueとなるfull_extent_t型オブジェクトのパックとする。下記を満たすとき、型LayoutMappingはsliceable-mappingを満たす。
- 評価されないオペランドとして扱われるとき式
submdspan_mapping(lm, fe...)が適格であり、かつ - その式の型が
submdspan_mapping_resultの特殊化であること。
型LayoutMappingがスライス可能レイアウトマッピング(sliceable layout mapping)要件を満たすとき、型LayoutMappingはsliceable-mappingのモデルである。
スライス可能レイアウトマッピング要件
下記の説明用エンティティを定義する。
- 型
M: レイアウトマッピングクラス - 型
IT:M::extents_type::index_type - 値
m: (const修飾された)M型の値 - 値
M_rank:M::extents_type::rank() - オブジェクトのパック
valid_slices:sizeof...(valid_slices) == M_rankであり、m.extents()の各次元インデクスiに対してvalid_slices...[i]がm.extents()のi番目次元の有効なsubmdspanスライス - オブジェクトのパック
invalid_slices:sizeof...(invalid_slices) == M_rankであり、invalid_slices...[k]のcv非修飾型が下記いずれでもない整数kが存在する- 型
IT full_extent_tconstant_wrapperの特殊化strided_sliceの特殊化
- 型
下記を満たすとき、型Mはスライス可能レイアウトマッピング(sliceable layout mapping)要件を満たす。
Mがレイアウトマッピング要件を満たす- 式
submdspan_mapping(m, invalid_slices...)が不適格である -
下記式が適格であり、かつ指定されたセマンティクスを持つこと :
submdspan_mapping(m, valid_slices...)下記を満たす型
SMに対してsubmdspan_mapping_result<SM>の特殊化である型SMRをもつ。SMがレイアウトマッピング要件を満たすSM::extents_typeがextentsの特殊化であるSM::extents_type::rank()がMAP_RANK(valid_slices, M_rank)に等しいSM::extents_type::index_typeがITを表す
下記を満たす
SMR型のオブジェクトsmrを返す。smr.mapping.extents() == submdspan_extents(m.extents(), valid_slices...)、かつsmr.mapping.extents()の多次元インデクス値を表す整数パックiに対して、下記を満たす整数パックjに対しsmr.mapping(i...) + smr.offset == m(j)がtrueとなるsizeof...(j)がM_rankに等しく、かつm.extents()の各次元インデクスrに対して、j...[r]が下記の総和に等しいm.extents()のr次元に対してvaild_slices...[r]のsubmdspanスライス範囲の下限、およびvalid_slices...[r]の型が縮約スライス型(collapsing slice type)ならば値0、そうでなければi...[MAP_RANK(valid_slices, r)]
バージョン
言語
- C++26