template<class IndexType,
class OffsetType,
class SpanType,
class... StrideTypes>
constexpr auto
canonical-range-slice(OffsetType offset,
SpanType span,
StrideTypes... strides);
概要
canonical-range-sliceは、submdspan動作仕様定義で用いられる説明専用の関数テンプレートである。
取り出し元の要素数spanとストライド幅strides...から、取り出す要素数を求めてextent_sliceを構築する。
説明用の型StrideType、値stride、extent-value、extentを次の通り定義する。
- 型
StrideType:StrideTypesが空のパックであるか、SpanTypeがconstant_wrapper<IndexType(0)>であるときconstant_wrapper<IndexType(1)>、そうでなければStrideTypes...[0] - 値
stride:StrideTypeがconstant_wrapperの特殊化であるときStrideType()、そうでなければspan == 0がtrueのときIndexType(1)、そうでなければstrides...[0] - 値
extent-value:span != 0がtrueのとき1 + (span - 1) / stride、そうでなければ0 - 値
extent:SpanTypeとStrideTypeがいずれもconstant_wrapperの特殊化であるときcw<IndexType(extent-value)>、そうでなければIndexType(extent-value)
適格要件
sizeof...(StrideTypes) <= 1がtrueであり、StrideTypeがconstant_wrapperの特殊化であるときStrideType::value > 0がtrueであること。
事前条件
stride > 0がtrueであること。
戻り値
extent_slice{.offset = offset, .extent = extent, .stride = stride}
バージョン
言語
- C++26
関連項目
参照
- P3982R2 Split
strided_sliceintoextent_sliceandrange_slicefor C++26- C++26で、
range_sliceやインデクス範囲指定をextent_sliceへ変換するために追加された
- C++26で、