最終更新日時(UTC):
が更新

履歴 編集

concept
<mdspan>

sliceable-mapping(C++26)

template<class LayoutMapping>
concept sliceable-mapping = see below;

概要

sliceable-mappingは、submdspan動作仕様定義で用いられる説明専用のコンセプトである。

説明用のlmLayoutMapping型のオブジェクト、fesizeof...(fe) == LayoutMapping::extents_type::rank()trueとなるfull_extent_t型オブジェクトのパックとする。下記を満たすとき、型LayoutMappingsliceable-mappingを満たす。

  • 評価されないオペランドとして扱われるとき式submdspan_mapping(lm, fe...)適格であり、かつ
  • その式の型がsubmdspan_mapping_resultの特殊化であること。

LayoutMappingがスライス可能レイアウトマッピング(sliceable layout mapping)要件を満たすとき、型LayoutMappingsliceable-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が存在する

下記を満たすとき、型Mはスライス可能レイアウトマッピング(sliceable layout mapping)要件を満たす。

  • Mレイアウトマッピング要件を満たす
  • submdspan_mapping(m, invalid_slices...)不適格である
  • 下記式が適格であり、かつ指定されたセマンティクスを持つこと :

    submdspan_mapping(m, valid_slices...)
    

    下記を満たす型SMに対してsubmdspan_mapping_result<SM>の特殊化である型SMRをもつ。

    下記を満たす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]が下記の総和に等しい

バージョン

言語

  • C++26

関連項目

参照