std::ranges::concat_view<Views...>::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_ .I в родительском concat_view.I в родительском concat_view.ranges::begin(get-view <I>()).I в родительском concat_view.ranges::end(get-view <I>()).static_cast<std::iter_difference_t<std::variant_alternative_t<N, base-iter >>>(value). std::ranges::concat_view::iterator::satisfy<N>
template< std::size_t N > constexpr void /*satisfy*/(); | (только для описания*) |
Корректирует текущую (глобальную) позицию it_ .
- Если
Nравенsizeof...(Views) - 1, ничего не делает. - В противном случае эквивалентно
if(get-iter <N>()== get-end <N>()).
{
it_ .templateemplace<N+1>(get-begin <N+1>());
satisfy <N+1>();
}
std::ranges::concat_view::iterator::prev<N>
template< size_t N > constexpr void /*prev*/(); | (только для описания*) |
Перемещает it_ в предыдущую (глобальную) позицию.
- Если
Nравен0, эквивалентно--get-iter <0>();. - В противном случае эквивалентно
if(get-iter <N>()== get-begin <N>()).
{
it_ .templateemplace<N-1>(get-end <N-1>());
prev <N-1>();
}
else
--get-iter <0>();
std::ranges::concat_view::iterator::advance-fwd<N>
template< size_t N >
constexpr void /*advance-fwd*/( difference_type offset,
difference_type steps );
| (только для описания*) |
Перемещает текущую (глобальную) позицию step на указанное число шагов вперёд.
- Если
Nравенsizeof...(Views) - 1, эквивалентноget-iter <N>()+= to-underlying-diff-type (steps);. - В противном случае эквивалентно
auton_size=ranges::distance(get-view <N>()));.
if(offset+steps<n_size)
get-iter <N>()+= to-underlying-diff-type (steps);
else
{
it_ .templateemplace<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,
difference_type steps );
| (только для описания*) |
Перемещает текущую (глобальную) позицию steps на указанное число шагов назад.
- Если
Nравен0, эквивалентноget-iter <N>()-= to-underlying-diff-type (steps);. - В противном случае эквивалентно
if(offset>=steps).
get-iter <N>()-= to-underlying-diff-type (steps);
else
{
autoprev_size=ranges::distance(get-view <N-1>());
it_ .templateemplace<N-1>(get-end <N-1>());
advance-bwd <N-1>(prev_size,steps-offset);
}
Параметры
| offset | - | смещение текущей (глобальной) позиции относительно начала диапазона, на который в данный момент ссылается it_ |
| steps | - | число шагов для перемещения назад |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/concat_view/iterator/helpers