std::ranges::concat_view<Представления...>::iterator<Const>::satisfy, prev, advance-fwd, advance-bwd
Следующие шаблоны функций-элементов, доступные только для пояснения, упрощают описание.
Каждый вспомогательный шаблон функции имеет параметр шаблона, не являющийся типом, типа std::size_t.
- Если имя параметра шаблона равно
N, аргумент шаблона всегда равенit_.index(). - Если имя параметра шаблона равно
I, аргумент шаблона может быть любым значением std::size_t в диапазоне[0,sizeof...(Views)).
Однако аргумент шаблона может не быть константой времени компиляции, поэтому фактический эффект helper <non_const>(/* arguments */) аналогичен
if (non_const == 0)
helper <0>(/* arguments */);
else if (non_const == 1)
helper <1>(/* arguments */);
/* other indices */
else if (non_const == (sizeof...(Views) - 1))
helper <sizeof...(Views) - 1>(/* arguments */);
.
Вспомогательные шаблоны
Мини-вспомогательные шаблоны
|
template
<
std::
size_t
N
>
constexpr auto /*get-iter*/ ( ) ; |
(1) | ( только для демонстрации* ) |
|
template
<
std::
size_t
I
>
constexpr auto /*get-view*/ ( ) ; |
(2) | ( только для демонстрации* ) |
|
template
<
std::
size_t
I
>
constexpr auto /*get-begin*/ ( ) ; |
(3) | ( только для демонстрации* ) |
|
template
<
std::
size_t
I
>
constexpr auto /*get-end*/ ( ) ; |
(4) | ( только для демонстрации* ) |
|
template
<
std::
size_t
N
>
constexpr auto /*to-underlying-diff-type*/ ( difference_type value ) ; |
(5) | ( только для демонстрации* ) |
Мини-вспомогательные шаблоны упрощают описание основных вспомогательных шаблонов и функций-членов. Они не включены в документы стандарта C++.
it_
.
concat_view
.
concat_view
.
get-view
<
I
>
(
)
)
.
concat_view
.
get-view
<
I
>
(
)
)
.
base-iter
>>>
(
value
)
.
std::ranges::concat_view:: iterator :: satisfy <N>
|
template
<
std::
size_t
N
>
constexpr void /*satisfy*/ ( ) ; |
( только для демонстрации* ) | |
Корректирует текущую (глобальную) позицию
it_
.
std::ranges::concat_view:: iterator :: prev <N>
|
template
<
size_t N
>
constexpr void /*prev*/ ( ) ; |
( только для демонстрации* ) | |
Перемещает
it_
на предыдущую (глобальную) позицию.
std::ranges::concat_view:: iterator :: advance-fwd <N>
|
template
<
size_t N
>
constexpr
void
/*advance-fwd*/
(
difference_type offset,
|
( только для демонстрации* ) | |
Перемещает текущую (глобальную) позицию на step шагов вперед.
-
Если
N
равно
sizeof...
(
Views
)
-
1
, эквивалентно
get-iter < N > ( ) + =to-underlying-diff-type ( steps ) ; . -
В противном случае, эквивалентно
auto
n_size
=
ranges::
distance
(
get-view < N > ( ) ) ) ;
if ( offset + steps < n_size )
get-iter < N > ( ) + =to-underlying-diff-type ( steps ) ;
else
{
it_ . template emplace < N + 1 > (get-begin < N + 1 > ( ) ) ;
advance-fwd < N + 1 > ( 0 , offset + steps - n_size ) ;
} .
Параметры
| offset | - |
смещение текущей (глобальной) позиции от начала диапазона, на который в данный момент ссылается
it_
|
| steps | - | количество шагов для перемещения вперед |
std::ranges::concat_view:: iterator :: advance-bwd <N>
|
template
<
size_t N
>
constexpr
void
/*advance-bwd*/
(
difference_type offset,
|
( только для демонстрации* ) | |
Перемещает текущую (глобальную) позицию на steps шагов назад.
-
Если
N
равно
0
, эквивалентно
get-iter < N > ( ) - =to-underlying-diff-type ( steps ) ; . -
В противном случае, эквивалентно
if
(
offset
>=
steps
)
get-iter < N > ( ) - =to-underlying-diff-type ( steps ) ;
else
{
auto prev_size = ranges:: distance (get-view < N - 1 > ( ) ) ;
it_ . template emplace < N - 1 > (get-end < N - 1 > ( ) ) ;
advance-bwd < N - 1 > ( prev_size, steps - offset ) ;
} .
Параметры
| offset | - |
смещение текущей (глобальной) позиции от начала диапазона, на который в данный момент ссылается
it_
|
| steps | - | количество шагов для перемещения назад |