MySQL 9.6.0
Source Code Documentation
mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp > Class Template Reference

Iterator adaptor that recursively flattens the sequence of a given iterator over a nested sequence. More...

#include <flat_view.h>

Inheritance diagram for mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >:
[legend]

Public Member Functions

 Flat_iterator ()=default
 
 Flat_iterator (const Outer_range_t &outer_range, const Outer_iterator_t &outer_iterator)
 
 Flat_iterator (const Outer_range_t &outer_range)
 
decltype(auto) get () const
 
void next ()
 
bool is_equal (const Flat_iterator &other) const
 
- Public Member Functions inherited from mysql::iterators::Iterator_interface< Flat_iterator< Outer_range_tp, Unfold_tp > >
decltype(auto) operator* () const
 Dereference operator, which returns the current value. More...
 
auto operator-> () const
 Arrow operator, return a pointer (possibly a fancy pointer) to the current element. More...
 
Self_toperator++ ()
 Pre-increment operator, which advances the position one step and returns a reference to the iterator itself. More...
 
auto operator++ (int)
 Post-increment operator, which advances the position one step. More...
 
Self_toperator-- ()
 Pre-decrement iterator, which moves one step back and returns a reference to the iterator itself. More...
 
auto operator-- (int)
 Post-decrement operator, which moves one step back and returns a copy of the iterator before the decrement. More...
 
Self_toperator+= (std::ptrdiff_t delta)
 Addition assignment operator, which moves the iterator forward by the given number of steps, and returns a reference to the iterator itself. More...
 
Self_toperator-= (std::ptrdiff_t delta)
 Subtraction assignment operator, which moves the iterator backward by the given number of steps, and returns a reference to the iterator itself. More...
 
Self_t operator+ (std::ptrdiff_t delta) const
 Addition operator, which returns a new iterator that is the given number of steps ahead of the current iterator. More...
 
Self_t operator- (std::ptrdiff_t delta) const
 Subtraction-of-integer operator, which returns a new iterator that is the given number of steps behind of the current iterator. More...
 
std::ptrdiff_t operator- (const Self_t &other) const
 Subtraction-of-iterator operator, which returns the number of steps from other this. More...
 
decltype(auto) operator[] (std::ptrdiff_t delta) const
 Subscript operator, which returns a new iterator that is the given number of steps ahead of the current iterator. More...
 

Private Types

using Outer_range_t = Outer_range_tp
 
using Unfold_t = Unfold_tp
 
using Outer_iterator_t = mysql::ranges::Range_const_iterator_type< Outer_range_t >
 
using Inner_source_t = Iterator_value_type< Outer_iterator_t >
 
using Inner_range_t = Flat_view_type< Inner_source_t, Unfold_t >
 
using Outer_t = Iterator_with_range< Outer_range_t >
 
using Inner_t = Iterator_with_range< Inner_range_t >
 

Private Member Functions

void reset_inner ()
 
void fix_position ()
 While not at a valid position, advance the positions. More...
 

Private Attributes

Outer_t m_outer
 The outer range and current iterator to it. More...
 
Inner_t m_inner
 The range and iterator that m_outer.iterator() currently points to. More...
 

Additional Inherited Members

- Protected Types inherited from mysql::iterators::Iterator_interface< Flat_iterator< Outer_range_tp, Unfold_tp > >
using Self_t = Flat_iterator< Outer_range_tp, Unfold_tp >
 

Detailed Description

template<class Outer_range_tp, class Unfold_tp>
class mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >

Iterator adaptor that recursively flattens the sequence of a given iterator over a nested sequence.

For each value v yielded by iterators of the range unfolded from the given source, this iterator recursively flattens the range given by Unfold_t::unfold(v), and yields all elements in that flattened sequence.

This iterator implements the recursive step of procedure to flatten a range. The base case occurs when Unfold::unfold(v) is not defined, in which case make_flat_view provides the range unfolded from the source without using this class to attempt to flatten it.

Template Parameters
Outer_range_tpType of the outermost range. It is required that Unfold_tp::unfold(v) is defined, where v is an object of the range's value type.
Unfold_tpClass to obtain range views from the range's values; from the values of those range views, and so on, recursively.

Member Typedef Documentation

◆ Inner_range_t

template<class Outer_range_tp , class Unfold_tp >
using mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::Inner_range_t = Flat_view_type<Inner_source_t, Unfold_t>
private

◆ Inner_source_t

template<class Outer_range_tp , class Unfold_tp >
using mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::Inner_source_t = Iterator_value_type<Outer_iterator_t>
private

◆ Inner_t

template<class Outer_range_tp , class Unfold_tp >
using mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::Inner_t = Iterator_with_range<Inner_range_t>
private

◆ Outer_iterator_t

template<class Outer_range_tp , class Unfold_tp >
using mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::Outer_iterator_t = mysql::ranges::Range_const_iterator_type<Outer_range_t>
private

◆ Outer_range_t

template<class Outer_range_tp , class Unfold_tp >
using mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::Outer_range_t = Outer_range_tp
private

◆ Outer_t

template<class Outer_range_tp , class Unfold_tp >
using mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::Outer_t = Iterator_with_range<Outer_range_t>
private

◆ Unfold_t

template<class Outer_range_tp , class Unfold_tp >
using mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::Unfold_t = Unfold_tp
private

Constructor & Destructor Documentation

◆ Flat_iterator() [1/3]

template<class Outer_range_tp , class Unfold_tp >
mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::Flat_iterator ( )
default

◆ Flat_iterator() [2/3]

template<class Outer_range_tp , class Unfold_tp >
mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::Flat_iterator ( const Outer_range_t outer_range,
const Outer_iterator_t outer_iterator 
)
inlineexplicit

◆ Flat_iterator() [3/3]

template<class Outer_range_tp , class Unfold_tp >
mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::Flat_iterator ( const Outer_range_t outer_range)
inlineexplicit

Member Function Documentation

◆ fix_position()

template<class Outer_range_tp , class Unfold_tp >
void mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::fix_position ( )
inlineprivate

While not at a valid position, advance the positions.

A "valid position" is one where either the outer iterator points to the end, or the inner iterator does not point to the end.

◆ get()

template<class Outer_range_tp , class Unfold_tp >
decltype(auto) mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::get ( ) const
inline

◆ is_equal()

template<class Outer_range_tp , class Unfold_tp >
bool mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::is_equal ( const Flat_iterator< Outer_range_tp, Unfold_tp > &  other) const
inline

◆ next()

template<class Outer_range_tp , class Unfold_tp >
void mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::next ( )
inline

◆ reset_inner()

template<class Outer_range_tp , class Unfold_tp >
void mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::reset_inner ( )
inlineprivate

Member Data Documentation

◆ m_inner

template<class Outer_range_tp , class Unfold_tp >
Inner_t mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::m_inner
private

The range and iterator that m_outer.iterator() currently points to.

◆ m_outer

template<class Outer_range_tp , class Unfold_tp >
Outer_t mysql::ranges::Flat_iterator< Outer_range_tp, Unfold_tp >::m_outer
private

The outer range and current iterator to it.


The documentation for this class was generated from the following file: