Spec-Zone.ru › C++

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++.

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_ .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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API