dune-common  2.11
Public Types | Public Member Functions | Protected Types | Protected Member Functions | Friends | List of all members
Dune::GenericIterator< C, T, R, D, IteratorFacade > Class Template Reference

Generic class for stl-conforming iterators for container classes with operator[]. More...

#include <dune/common/genericiterator.hh>

Inheritance diagram for Dune::GenericIterator< C, T, R, D, IteratorFacade >:
Inheritance graph

Public Types

typedef C Container
 The type of container we are an iterator for. More...
 
typedef T Value
 The value type of the iterator. More...
 
typedef D DifferenceType
 The type of the difference between two positions. More...
 
typedef R Reference
 The type of the reference to the values accessed. More...
 
using iterator_category = T
 
using value_type = typename std::remove_const< R >::type
 
using reference = D
 
using pointer = R *
 
using difference_type = std::ptrdiff_t
 
using Pointer = pointer
 

Public Member Functions

 GenericIterator ()
 
 GenericIterator (Container &cont, DifferenceType pos)
 Constructor. More...
 
 GenericIterator (const MutableIterator &other)
 Copy constructor. More...
 
 GenericIterator (const ConstIterator &other)
 Copy constructor. More...
 
bool equals (const MutableIterator &other) const
 
bool equals (const ConstIterator &other) const
 
Reference dereference () const
 
void increment ()
 
void decrement ()
 
Reference elementAt (DifferenceType i) const
 
void advance (DifferenceType n)
 
DifferenceType distanceTo (const MutableIterator &other) const
 
DifferenceType distanceTo (const ConstIterator &other) const
 
decltype(auto) constexpr operator* () const
 Dereferencing operator. More...
 
constexpr pointer operator-> () const
 Arrow access to members of referenced value. More...
 
decltype(auto) constexpr operator++ ()
 Preincrement operator. More...
 
constexpr DerivedIterator operator++ (int)
 Postincrement operator. More...
 
decltype(auto) constexpr operator-- ()
 Predecrement operator. More...
 
constexpr DerivedIterator operator-- (int)
 Postdecrement operator. More...
 
constexpr reference operator[] (difference_type n) const
 Dereference element with given offset form this iterator. More...
 
decltype(auto) constexpr operator+= (difference_type n)
 Increment iterator by given value. More...
 
constexpr DerivedIterator operator+ (difference_type n) const
 Create iterator incremented by given value. More...
 
constexpr DerivedIteratoroperator-= (difference_type n)
 Decrement iterator by given value. More...
 
constexpr DerivedIterator operator- (difference_type n) const
 Create iterator decremented by given value. More...
 

Protected Types

using DerivedIterator = GenericIterator< C, T, R, D, IteratorFacade >
 The derived iterator type. More...
 

Protected Member Functions

constexpr const DerivedIteratorderived () const
 Cast of *this to const DerivedIterator type. More...
 
constexpr DerivedIteratorderived ()
 Cast of *this to DerivedIterator type. More...
 

Friends

class GenericIterator< typename std::remove_const< C >::type, typename std::remove_const< T >::type, typename mutable_reference< R >::type, D, IteratorFacade >
 
class GenericIterator< const typename std::remove_const< C >::type, const typename std::remove_const< T >::type, typename const_reference< R >::type, D, IteratorFacade >
 

Detailed Description

template<class C, class T, class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
class Dune::GenericIterator< C, T, R, D, IteratorFacade >

Generic class for stl-conforming iterators for container classes with operator[].

If template parameter C has a const qualifier we are a const iterator, otherwise we are a mutable iterator.

Member Typedef Documentation

◆ Container

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
typedef C Dune::GenericIterator< C, T, R, D, IteratorFacade >::Container

The type of container we are an iterator for.

The container type must provide an operator[] method.

If C has a const qualifier we are a const iterator, otherwise we are a mutable iterator.

◆ DerivedIterator

using Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::DerivedIterator = GenericIterator< C, T, R, D, IteratorFacade >
protectedinherited

The derived iterator type.

◆ difference_type

using Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::difference_type = std::ptrdiff_t
inherited

◆ DifferenceType

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
typedef D Dune::GenericIterator< C, T, R, D, IteratorFacade >::DifferenceType

The type of the difference between two positions.

◆ iterator_category

using Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::iterator_category = T
inherited

◆ pointer

using Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::pointer = R *
inherited

◆ Pointer

using Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::Pointer = pointer
inherited

◆ Reference

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
typedef R Dune::GenericIterator< C, T, R, D, IteratorFacade >::Reference

The type of the reference to the values accessed.

◆ reference

using Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::reference = D
inherited

◆ Value

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
typedef T Dune::GenericIterator< C, T, R, D, IteratorFacade >::Value

The value type of the iterator.

This is the return type when dereferencing the iterator.

◆ value_type

using Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::value_type = typename std::remove_const<R >::type
inherited

Constructor & Destructor Documentation

◆ GenericIterator() [1/4]

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
Dune::GenericIterator< C, T, R, D, IteratorFacade >::GenericIterator ( )
inline

◆ GenericIterator() [2/4]

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
Dune::GenericIterator< C, T, R, D, IteratorFacade >::GenericIterator ( Container cont,
DifferenceType  pos 
)
inline

Constructor.

Parameters
contReference to the container we are an iterator for
posThe position the iterator will be positioned to (e.g. 0 for an iterator returned by Container::begin() or the size of the container for an iterator returned by Container::end()

◆ GenericIterator() [3/4]

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
Dune::GenericIterator< C, T, R, D, IteratorFacade >::GenericIterator ( const MutableIterator other)
inline

Copy constructor.

This is somehow hard to understand, therefore play with the cases:

  1. if we are mutable this is the only valid copy constructor, as the argument is a mutable iterator
  2. if we are a const iterator the argument is a mutable iterator => This is the needed conversion to initialize a const iterator from a mutable one.

◆ GenericIterator() [4/4]

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
Dune::GenericIterator< C, T, R, D, IteratorFacade >::GenericIterator ( const ConstIterator other)
inline

Copy constructor.

Warning
Calling this method results in a compiler error, if this is a mutable iterator.

This is somehow hard to understand, therefore play with the cases:

  1. if we are mutable the arguments is a const iterator and therefore calling this method is mistake in the user's code and results in a (probably not understandable) compiler error
  2. If we are a const iterator this is the default copy constructor as the argument is a const iterator too.

Member Function Documentation

◆ advance()

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
void Dune::GenericIterator< C, T, R, D, IteratorFacade >::advance ( DifferenceType  n)
inline

◆ decrement()

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
void Dune::GenericIterator< C, T, R, D, IteratorFacade >::decrement ( )
inline

◆ dereference()

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
Reference Dune::GenericIterator< C, T, R, D, IteratorFacade >::dereference ( ) const
inline

◆ derived() [1/2]

constexpr const DerivedIterator& Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::derived ( ) const
inlineprotectedinherited

Cast of *this to const DerivedIterator type.

◆ derived() [2/2]

constexpr DerivedIterator& Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::derived ( )
inlineprotectedinherited

Cast of *this to DerivedIterator type.

◆ distanceTo() [1/2]

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
DifferenceType Dune::GenericIterator< C, T, R, D, IteratorFacade >::distanceTo ( const MutableIterator other) const
inline

◆ distanceTo() [2/2]

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
DifferenceType Dune::GenericIterator< C, T, R, D, IteratorFacade >::distanceTo ( const ConstIterator other) const
inline

◆ elementAt()

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
Reference Dune::GenericIterator< C, T, R, D, IteratorFacade >::elementAt ( DifferenceType  i) const
inline

◆ equals() [1/2]

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
bool Dune::GenericIterator< C, T, R, D, IteratorFacade >::equals ( const MutableIterator other) const
inline

◆ equals() [2/2]

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
bool Dune::GenericIterator< C, T, R, D, IteratorFacade >::equals ( const ConstIterator other) const
inline

◆ increment()

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
void Dune::GenericIterator< C, T, R, D, IteratorFacade >::increment ( )
inline

◆ operator*()

decltype(auto) constexpr Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::operator* ( ) const
inlineinherited

Dereferencing operator.

◆ operator+()

constexpr DerivedIterator Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::operator+ ( difference_type  n) const
inlineinherited

Create iterator incremented by given value.

Only enabled for random-access iterators.

◆ operator++() [1/2]

decltype(auto) constexpr Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::operator++ ( )
inlineinherited

Preincrement operator.

◆ operator++() [2/2]

constexpr DerivedIterator Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::operator++ ( int  )
inlineinherited

Postincrement operator.

◆ operator+=()

decltype(auto) constexpr Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::operator+= ( difference_type  n)
inlineinherited

Increment iterator by given value.

Only enabled for random-access iterators.

◆ operator-()

constexpr DerivedIterator Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::operator- ( difference_type  n) const
inlineinherited

Create iterator decremented by given value.

Only enabled for random-access iterators.

◆ operator--() [1/2]

decltype(auto) constexpr Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::operator-- ( )
inlineinherited

Predecrement operator.

Only enabled for bidirectional and random-access iterators.

◆ operator--() [2/2]

constexpr DerivedIterator Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::operator-- ( int  )
inlineinherited

Postdecrement operator.

Only enabled for bidirectional and random-access iterators.

◆ operator-=()

constexpr DerivedIterator& Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::operator-= ( difference_type  n)
inlineinherited

Decrement iterator by given value.

Only enabled for random-access iterators.

◆ operator->()

constexpr pointer Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::operator-> ( ) const
inlineinherited

Arrow access to members of referenced value.

◆ operator[]()

constexpr reference Dune::IteratorFacade< GenericIterator< C, T, R, D, IteratorFacade > , T , R , D , R * , std::ptrdiff_t >::operator[] ( difference_type  n) const
inlineinherited

Dereference element with given offset form this iterator.

Parameters
nThe distance to the element.
Returns
The element at that distance.

Only enabled for random-access iterators.

Friends And Related Function Documentation

◆ GenericIterator< const typename std::remove_const< C >::type, const typename std::remove_const< T >::type, typename const_reference< R >::type, D, IteratorFacade >

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
friend class GenericIterator< const typename std::remove_const< C >::type, const typename std::remove_const< T >::type, typename const_reference< R >::type, D, IteratorFacade >
friend

◆ GenericIterator< typename std::remove_const< C >::type, typename std::remove_const< T >::type, typename mutable_reference< R >::type, D, IteratorFacade >

template<class C , class T , class R = T&, class D = std::ptrdiff_t, template< class, class, class, class > class IteratorFacade = RandomAccessIteratorFacade>
friend class GenericIterator< typename std::remove_const< C >::type, typename std::remove_const< T >::type, typename mutable_reference< R >::type, D, IteratorFacade >
friend

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