Namespaces
Variants

std::ranges::concat_view<Views...>:: iterator <Const>:: satisfy , prev , advance-fwd , advance-bwd

From cppreference.net
Ranges library
Range adaptors

Следующие шаблоны функций-членов, предназначенные только для экспозиции, упрощают описание.

Каждый шаблон вспомогательной функции имеет постоянный параметр шаблона типа 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++.

1) Получает базовый итератор, содержащийся в it_ .
Возвращает std::get < N > ( it_  ) .
2) Получает I -й вид в родительском concat_view .
Возвращает std::get < I > ( parent_  - > views_  ) .
3) Получает итератор на начало I -го представления в родительском concat_view .
Возвращает ranges:: begin ( get-view  < I > ( ) ) .
4) Получает конечный итератор или страж I -го представления в родительском concat_view .
Возвращает ranges:: end ( get-view  < I > ( ) ) .
5) Преобразует value в базовый тип разности итератора, содержащегося в it_ .
Возвращает 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_  . template emplace < 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_  . template emplace < N - 1 > ( get-end  < N - 1 > ( ) ) ;
    prev  < N - 1 > ( ) ;
    }
    else
    -- get-iter  < N > ( ) ;
    .

std::ranges::concat_view:: iterator :: advance-fwd <N>

template < size_t N >

constexpr void /*advance-fwd*/ ( difference_type offset,

difference_type steps ) ;
( только для демонстрации* )

Перемещает текущую (глобальную) позицию на step шагов вперед.

Параметры

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 шагов назад.

Параметры

offset - смещение текущей (глобальной) позиции от начала диапазона, на который в данный момент ссылается it_
steps - количество шагов для перемещения назад