24319
24319
let \tcode{offset} be a value of type \tcode{size_t} equal to
24320
24320
\tcode{(*this)(\exposid{first_}<index_type, P>(slices...)...)}.
24321
24321
24322
+ \pnum
24323
+ Given a layout mapping type \tcode{M}, a type \tcode{S} is a
24324
+ \defnadjx{unit-stride}{slice for \tcode{M}}{slice} if
24325
+ \begin{itemize}
24326
+ \item \tcode{S} is a specialization of \tcode{strided_slice}
24327
+ where \tcode{S::stride_type} models \exposconcept{integral-constant-like}
24328
+ and \tcode{S::stride_type::value} equals \tcode{1},
24329
+ \item \tcode{S} models \tcode{\exposconcept{index-pair-like}<M::index_type>}, or
24330
+ \item \tcode{is_convertible_v<S, full_extent_t>} is \tcode{true}.
24331
+ \end{itemize}
24332
+
24322
24333
\rSec5[mdspan.sub.map.left]{\tcode{layout_left} specialization of \tcode{submdspan_mapping}}
24323
24334
24324
24335
\indexlibrarymemberexpos{layout_left::mapping}{submdspan-mapping-impl}%
24350
24361
\tcode{is_convertible_v<$S_k$, full_ext\-ent_t>} is \tcode{true}; and
24351
24362
\item
24352
24363
for $k$ equal to \tcode{SubExtents::rank() - 1},
24353
- $S_k$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24354
- \tcode{is_convertible_v<$S_k$, full_extent_t>} is \tcode{true};
24364
+ $S_k$ is a unit-stride slice for \tcode{decltype(*this)};
24355
24365
\end{itemize}
24356
24366
\begin{note}
24357
24367
If the above conditions are true,
@@ -24366,21 +24376,17 @@
24366
24376
\end{codeblock}
24367
24377
if for a value $u$ for which $u+1$ is
24368
24378
the smallest value $p$ larger than zero
24369
- for which $S_p$ models
24370
- \tcode{\exposconcept{index-pair-like}<index_type>} or
24371
- \tcode{is_convertible_v<$S_p$, full_extent_t>} is \tcode{true},
24379
+ for which $S_p$ is a unit-stride slice for \tcode{decltype(*this)},
24372
24380
the following conditions are met:
24373
24381
\begin{itemize}
24374
24382
\item
24375
- $S_0$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24376
- \tcode{is_convertible_v<$S_0$, full_extent_t>} is \tcode{true}; and
24383
+ $S_0$ is a unit-stride slice for \tcode{decltype(*this)}; and
24377
24384
\item
24378
24385
for each $k$ in the range \range{$u$ + 1}{$u$ + SubExtents::rank() - 1},
24379
24386
\tcode{is_convertible_v<$S_k$, full_extent_t>} is \tcode{true}; and
24380
24387
\item
24381
24388
for $k$ equal to \tcode{$u$ + SubExtents::rank() - 1},
24382
- $S_k$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24383
- \tcode{is_convertible_v<$S_k$, full_extent_t>} is \tcode{true};
24389
+ $S_k$ is a unit-stride slice for \tcode{decltype(*this)};
24384
24390
\end{itemize}
24385
24391
and where \tcode{S_static} is:
24386
24392
\begin{itemize}
24431
24437
\tcode{is_convertible_v<$S_k$, full_extent_t>} is \tcode{true}; and
24432
24438
\item
24433
24439
for $k$ equal to \exposid{_rank} - \tcode{SubExtents::rank()},
24434
- $S_k$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24435
- \tcode{is_convertible_v<$S_k$, full_extent_t>} is \tcode{true};
24440
+ $S_k$ is a unit-stride slice for \tcode{decltype(*this)};
24436
24441
\end{itemize}
24437
24442
\begin{note}
24438
24443
If the above conditions are true,
@@ -24447,23 +24452,19 @@
24447
24452
\end{codeblock}
24448
24453
if for a value $u$ for which $\exposid{rank_} - u - 2$ is
24449
24454
the largest value $p$ smaller than \tcode{\exposid{rank_} - 1}
24450
- for which $S_p$ models
24451
- \tcode{\exposconcept{index-pair-like}<index_type>} or
24452
- \tcode{is_convertible_v<$S_p$, full_extent_t>} is \tcode{true},
24455
+ for which $S_p$ is a unit-stride slice for \tcode{decltype(*this)},
24453
24456
the following conditions are met:
24454
24457
\begin{itemize}
24455
24458
\item
24456
24459
for $k$ equal to \tcode{\exposid{rank_} - 1},
24457
- $S_k$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24458
- \tcode{is_convertible_v<$S_k$, full_extent_t> }is \tcode{true}; and
24460
+ $S_k$ is a unit-stride slice for \tcode{decltype(*this)}; and
24459
24461
\item
24460
24462
for each $k$ in the range
24461
24463
\range{\exposid{rank_} - SubExtents::rank() - $u$ + 1}{\exposid{rank_} - $u$ - 1},
24462
24464
\tcode{is_con\-vertible_v<$S_k$, full_extent_t>} is \tcode{true}; and
24463
24465
\item
24464
- for $k$ equal to \tcode{\exposid{rank_} - SubExtents::rank() - $u$},
24465
- $S_k$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24466
- \tcode{is_convertible_v<$S_k$, full_extent_t>} is \tcode{true};
24466
+ for $k$ equal to \tcode{\exposid{rank_} - SubExtents::rank() - $u$},\newline
24467
+ $S_k$ is a unit-stride slice for \tcode{decltype(*this)};
24467
24468
\end{itemize}
24468
24469
and where \tcode{S_static} is:
24469
24470
\begin{itemize}
24539
24540
\item
24540
24541
\tcode{SubExtents::rank() == 1} is \tcode{true} and
24541
24542
\item
24542
- $S_0$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24543
- \tcode{is_convertible_v<$S_0$ , full_extent_t>} is \tcode{true};
24543
+ $S_0$ is a unit-stride slice for \tcode{decltype(*this)};
24544
24544
\end{itemize}
24545
24545
\item
24546
24546
otherwise,
@@ -24550,20 +24550,17 @@
24550
24550
\end{codeblock}
24551
24551
if for a value $u$
24552
24552
for which \tcode{$u$ + 1} is the smallest value $p$ larger than zero
24553
- for which $S_p$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24554
- \tcode{is_convertible_v<$S_p$, full_extent_t>} is \tcode{true},
24553
+ for which $S_p$ is a unit-stride slice for \tcode{decltype(*this)},
24555
24554
the following conditions are met:
24556
24555
\begin{itemize}
24557
24556
\item
24558
- $S_0$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24559
- \tcode{is_convertible_v<$S_0$, full_extent_t>} is \tcode{true}; and
24557
+ $S_0$ is a unit-stride slice for \tcode{decltype(*this)}; and
24560
24558
\item
24561
24559
for each $k$ in the range \range{$u$ + 1}{$u$ + SubExtents::rank() - 1},
24562
24560
\tcode{is_convertible_v<$S_k$, full_extent_t>} is \tcode{true}; and
24563
24561
\item
24564
24562
for $k$ equal to \tcode{$u$ + SubExtents::rank() - 1},
24565
- $S_k$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24566
- \tcode{is_convertible_v<Sk, full_extent_t>} is \tcode{true};
24563
+ $S_k$ is a unit-stride slice for \tcode{decltype(*this)};
24567
24564
\end{itemize}
24568
24565
where \tcode{S_static} is:
24569
24566
\begin{itemize}
24615
24612
\tcode{SubExtents::rank() == 1} is \tcode{true} and
24616
24613
\item
24617
24614
for $k$ equal to \tcode{\exposid{rank_} - 1},
24618
- $S_k$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24619
- \tcode{is_convertible_v<$S_k$ , full_extent_t>} is \tcode{true};
24615
+ $S_k$ is a unit-stride slice for \tcode{decltype(*this)};
24620
24616
\end{itemize}
24621
24617
\item
24622
24618
otherwise,
@@ -24627,22 +24623,19 @@
24627
24623
if for a value $u$
24628
24624
for which \tcode{\exposid{rank_} - $u$ - 2}
24629
24625
is the largest value p smaller than \tcode{\exposid{rank_} - 1}
24630
- for which $S_p$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24631
- \tcode{is_convertible_v<$S_p$, full_extent_t>} is \tcode{true},
24626
+ for which $S_p$ is a unit-stride slice for \tcode{decltype(*this)},
24632
24627
the following conditions are met:
24633
24628
\begin{itemize}
24634
24629
\item
24635
24630
for $k$ equal to \tcode{\exposid{rank_} - 1},
24636
- $S_k$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24637
- \tcode{is_convertible_v<$S_k$, full_extent_t>} is \tcode{true}; and
24631
+ $S_k$ is a unit-stride slice for \tcode{decltype(*this)}; and
24638
24632
\item
24639
24633
for each $k$ in the range
24640
24634
\range{\exposid{rank_} - SubExtents::rank() - $u$ + 1}{\exposid{rank_} - $u$ - 1)},
24641
24635
\tcode{is_convertible_v<$S_k$, full_extent_t>} is \tcode{true}; and
24642
24636
\item
24643
- for $k$ equal to \tcode{\exposid{rank_} - SubExtents::rank() - $u$},
24644
- $S_k$ models \tcode{\exposconcept{index-pair-like}<index_type>} or
24645
- \tcode{is_convertible_v<$S_k$, full_extent_t>} is \tcode{true};
24637
+ for $k$ equal to \tcode{\exposid{rank_} - SubExtents::rank() - $u$},\newline
24638
+ $S_k$ is a unit-stride slice for \tcode{decltype(*this)};
24646
24639
\end{itemize}
24647
24640
and where \tcode{S_static} is:
24648
24641
\begin{itemize}
0 commit comments