Files
2025-10-25 03:02:53 +03:00

2.6 KiB
Raw Permalink Blame History

[mdspan.sub.map.right]

23 Containers library [containers]

23.7 Views [views]

23.7.3 Multidimensional access [views.multidim]

23.7.3.7 submdspan [mdspan.sub]

23.7.3.7.6 Specializations of submdspan_mapping [mdspan.sub.map]

23.7.3.7.6.3 layout_right specialization of submdspan_mapping [mdspan.sub.map.right]

🔗

template<class Extents> template<class... SliceSpecifiers> constexpr auto layout_right::mapping<Extents>::submdspan-mapping-impl( SliceSpecifiers... slices) const -> see below;

1

#

Returns:

submdspan_mapping_result{*this, 0}, if Extents::rank() == 0 is true;

otherwise,submdspan_mapping_result{layout_right::mapping(sub_ext), offset}, if SubExtents::rank() == 0 is true;

otherwise,submdspan_mapping_result{layout_left::mapping(sub_ext), offset}, if

for each k in the range [rank_ - SubExtents::rank() + 1, rank_), is_convertible_v<Sk, full_extent_t> is true; and

for k equal to _rank - SubExtents::rank(), Sk is a unit-stride slice for mapping;

[Note 1: If the above conditions are true, all Sk with k<_rank - SubExtents::rank() are convertible to index_type. — end note]

otherwise,submdspan_mapping_result{layout_right_padded<S_static>::mapping(sub_ext, stride(rank_ - u - 2)), offset} if for a value u for which rank_−ˆ’2 is the largest value p smaller than rank_ - 1 for which Sp is a unit-stride slice for mapping, the following conditions are met:

for k equal to rank_ - 1,Sk is a unit-stride slice for mapping; and

for each k in the range [rank_ - SubExtents::rank() - u + 1, rank_ - u - 1),is_convertible_v<Sk, full_extent_t> is true; and

for k equal to rank_ - SubExtents::rank() - u,
Sk is a unit-stride slice for mapping;

and where S_static is:

dynamic_extent, if static_extent(k) is dynamic_extent for any k in the range [rank_ - u - 1, rank_),

otherwise, the product of all valuesstatic_extent(k) for k in the range [rank_ - u - 1, rank_);

otherwise,submdspan_mapping_result{layout_stride::mapping(sub_ext, sub_strides), offset}