- mdspan[meta header]
- function template[meta id-type]
- std[meta namespace]
- layout_stride::mapping[meta class]
- cpp26[meta cpp]
template<class... SliceSpecifiers>
constexpr auto submdspan-mapping-impl( // exposition only
SliceSpecifiers ... slices) const -> see below;
template<class... SliceSpecifiers>
friend constexpr auto submdspan_mapping(
const mapping& src, SliceSpecifiers... slices)
{
return src.submdspan-mapping-impl(slices...);
}- submdspan-mapping-impl[italic]
submdspan関数をサポートするためのカスタマイゼーションポイント。
説明用の型index_typeをExtents::index_type、型S_kをSliceSpecifiersのk番目の型とする。
sizeof...(slices)がExtents::rank()と等しいこと。
extents()の各次元インデクスkにおいて、下記いずれかのうち1つだけを満たすこと。
- 型
S_kがconvertible_to<index_type>のモデル - 型
S_kがindex-pair-like<index_type>のモデル is_convertible_v<S_k,full_extent_t>がtrue- 型
S_kがstrided_sliceの特殊化
extents()の各次元インデクスkにおいて、s_kをslicesのk番目の値としたとき、下記を全て満たすこと。
- 型
S_kがstrided_sliceの特殊化のときs_k.extent == 0、またはs_k.stride > 0
0≤first_<index_type, k>(slices...)≤last_<k>(extents(), slices...)≤extents().extent(k)
説明用の値や型を次の通り定義する。
- 値
sub_ext: 式submdspan_extents(extents(), slices...)の結果 - 型
SubExtents:decltype(sub_ext) - 値
sub_strides:extents()の各次元インデクスkにおいて、map-rank[k]がdynamic_extentではないkに対しsub_strides[map-rank[k]]が下記を満たす、array<SubExtents::index_type,SubExtents::rank()>型の配列値- 型
S_kがstrided_sliceの特殊化かつs_k.stride < s_k.extentの場合、stride(k)*de-ice(s_k.stride) - そうでなければ、
stride(k)
- 型
- パラメータパック
P:is_same_v<make_index_sequence<rank()>,index_sequence<P...>> == true - 値
offset:size_t型の値(*this)(first_<index_type, P>(slices...)...)
説明専用のsubmdspan-mapping-impl関数テンプレートは下記の値を返す。
Extents::rank()== 0のとき、submdspan_mapping_result{*this, 0}submdspan_mapping_result{layout_stride::mapping(sub_ext, sub_strides), offset}
- C++26
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??