名前空間
変種
操作

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

From cppreference.com
< cpp‎ | ranges‎ | concat view‎ | iterator
 
 
Rangesライブラリ
Rangeアダプタ
 
 

以下の解説専用メンバ関数テンプレートは、説明を簡略化するために使用されます。

各ヘルパー関数テンプレートは、std::size_t 型の非型テンプレートパラメータを持ちます。

  • テンプレートパラメータの名前が N の場合、テンプレート引数は常に it_ .index() です。
  • テンプレートパラメータの名前が I の場合、テンプレート引数は [0sizeof...(Views)) の範囲の任意の std::size_t 値になります。

ただし、テンプレート引数はコンパイル時定数ではない可能性があるため、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) 親の concat_view 内の I 番目のビューを取得します。
std::get<I>(parent_ ->views_ ) を返します。
3) 親の concat_view 内の I 番目のビューの先頭へのイテレータを取得します。
ranges::begin(get-view <I>()) を返します。
4) 親の concat_view 内の I 番目のビューの末尾を過ぎたイテレータまたは番兵を取得します。
ranges::end(get-view <I>()) を返します。
5) it_ に含まれる基底イテレータの基底差分型に value を変換します。
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_ の現在の (グローバルな) 位置を調整します。

  • Nsizeof...(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_ を前の (グローバルな) 位置に移動します。

  • N0 の場合、--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 <0>();
    に相当します。

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_ が現在参照している範囲の先頭からの現在の (グローバルな) 位置のオフセット
ステップ - 前方へ進むステップ数

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_ が現在参照している範囲の先頭からの現在の (グローバルな) 位置のオフセット
ステップ - 後方に進むステップ数
English 日本語 中文(简体) 中文(繁體)