Gaia-ECS v1.0.0
A simple and powerful entity component system
Loading...
Searching...
No Matches
gaia::core::reverse_iterator< It, Diff > Class Template Reference

Random-access iterator that traverses an underlying iterator in reverse. The stored iterator denotes the element following the value returned by dereference. More...

#include <iterator.h>

Public Types

using iterator_type = It
 Underlying iterator type.
 
using value_type = std::remove_cv_t< std::remove_reference_t< decltype(*std::declval< It & >())> >
 Element type returned by dereference.
 
using pointer = std::conditional_t< std::is_pointer_v< It >, It, void >
 Mutable pointer type when the underlying iterator is a pointer.
 
using reference = decltype(*std::declval< It & >())
 Reference or proxy type returned by dereference.
 
using difference_type = Diff
 Signed iterator distance type.
 
using iterator_category = random_access_iterator_tag
 Iterator category exposed by the adapter.
 

Public Member Functions

constexpr reverse_iterator (It current)
 Constructs a reverse iterator from its forward base iterator.
 
GAIA_NODISCARD constexpr It base () const
 Returns the underlying forward iterator.
 
GAIA_NODISCARD constexpr decltype(auto) operator* () const
 Accesses the current element.
 
GAIA_NODISCARD constexpr decltype(auto) operator-> () const
 Accesses the current element through the underlying iterator.
 
GAIA_NODISCARD constexpr decltype(auto) operator[] (difference_type offset) const
 Accesses a reverse-relative element.
 
constexpr reverse_iterator & operator++ ()
 Advances one position in reverse traversal order.
 
constexpr reverse_iterator operator++ (int)
 Advances one position in reverse traversal order.
 
constexpr reverse_iterator & operator-- ()
 Moves one position opposite to reverse traversal order.
 
constexpr reverse_iterator operator-- (int)
 Moves one position opposite to reverse traversal order.
 
constexpr reverse_iterator & operator+= (difference_type offset)
 Advances by a number of reverse positions.
 
constexpr reverse_iterator & operator-= (difference_type offset)
 Moves opposite to reverse traversal by a number of positions.
 
GAIA_NODISCARD constexpr reverse_iterator operator+ (difference_type offset) const
 Returns an iterator advanced in reverse traversal order.
 
GAIA_NODISCARD constexpr reverse_iterator operator- (difference_type offset) const
 Returns an iterator moved opposite to reverse traversal order.
 
GAIA_NODISCARD constexpr difference_type operator- (const reverse_iterator &other) const
 Computes the reverse distance from another iterator.
 
GAIA_NODISCARD constexpr bool operator== (const reverse_iterator &other) const
 Checks whether two iterators have the same base position.
 
GAIA_NODISCARD constexpr bool operator!= (const reverse_iterator &other) const
 Checks whether two iterators have different base positions.
 
GAIA_NODISCARD constexpr bool operator< (const reverse_iterator &other) const
 Compares positions in reverse traversal order.
 
GAIA_NODISCARD constexpr bool operator> (const reverse_iterator &other) const
 Compares positions in reverse traversal order.
 
GAIA_NODISCARD constexpr bool operator<= (const reverse_iterator &other) const
 Compares positions in reverse traversal order.
 
GAIA_NODISCARD constexpr bool operator>= (const reverse_iterator &other) const
 Compares positions in reverse traversal order.
 

Detailed Description

template<typename It, typename Diff>
class gaia::core::reverse_iterator< It, Diff >

Random-access iterator that traverses an underlying iterator in reverse. The stored iterator denotes the element following the value returned by dereference.

Template Parameters
ItUnderlying random-access iterator type.
DiffSigned type used for iterator distances.

Constructor & Destructor Documentation

◆ reverse_iterator()

template<typename It , typename Diff >
constexpr gaia::core::reverse_iterator< It, Diff >::reverse_iterator ( It  current)
inlineexplicitconstexpr

Constructs a reverse iterator from its forward base iterator.

Parameters
currentIterator following the value returned by dereference.

Member Function Documentation

◆ base()

template<typename It , typename Diff >
GAIA_NODISCARD constexpr It gaia::core::reverse_iterator< It, Diff >::base ( ) const
inlineconstexpr

Returns the underlying forward iterator.

Returns
Iterator following the value returned by dereference.

◆ operator!=()

template<typename It , typename Diff >
GAIA_NODISCARD constexpr bool gaia::core::reverse_iterator< It, Diff >::operator!= ( const reverse_iterator< It, Diff > &  other) const
inlineconstexpr

Checks whether two iterators have different base positions.

Parameters
otherIterator to compare.
Returns
True when the iterators differ.

◆ operator*()

template<typename It , typename Diff >
GAIA_NODISCARD constexpr decltype(auto) gaia::core::reverse_iterator< It, Diff >::operator* ( ) const
inlineconstexpr

Accesses the current element.

Returns
Reference or proxy for the current element.

◆ operator+()

template<typename It , typename Diff >
GAIA_NODISCARD constexpr reverse_iterator gaia::core::reverse_iterator< It, Diff >::operator+ ( difference_type  offset) const
inlineconstexpr

Returns an iterator advanced in reverse traversal order.

Parameters
offsetNumber of positions to advance.
Returns
Offset iterator.

◆ operator++() [1/2]

template<typename It , typename Diff >
constexpr reverse_iterator & gaia::core::reverse_iterator< It, Diff >::operator++ ( )
inlineconstexpr

Advances one position in reverse traversal order.

Returns
This iterator after advancement.

◆ operator++() [2/2]

template<typename It , typename Diff >
constexpr reverse_iterator gaia::core::reverse_iterator< It, Diff >::operator++ ( int  )
inlineconstexpr

Advances one position in reverse traversal order.

Returns
Iterator value before advancement.

◆ operator+=()

template<typename It , typename Diff >
constexpr reverse_iterator & gaia::core::reverse_iterator< It, Diff >::operator+= ( difference_type  offset)
inlineconstexpr

Advances by a number of reverse positions.

Parameters
offsetNumber of positions to advance.
Returns
This iterator after advancement.

◆ operator-() [1/2]

template<typename It , typename Diff >
GAIA_NODISCARD constexpr difference_type gaia::core::reverse_iterator< It, Diff >::operator- ( const reverse_iterator< It, Diff > &  other) const
inlineconstexpr

Computes the reverse distance from another iterator.

Parameters
otherIterator used as the distance origin.
Returns
Number of reverse increments from other to this iterator.

◆ operator-() [2/2]

template<typename It , typename Diff >
GAIA_NODISCARD constexpr reverse_iterator gaia::core::reverse_iterator< It, Diff >::operator- ( difference_type  offset) const
inlineconstexpr

Returns an iterator moved opposite to reverse traversal order.

Parameters
offsetNumber of positions to retreat.
Returns
Offset iterator.

◆ operator--() [1/2]

template<typename It , typename Diff >
constexpr reverse_iterator & gaia::core::reverse_iterator< It, Diff >::operator-- ( )
inlineconstexpr

Moves one position opposite to reverse traversal order.

Returns
This iterator after movement.

◆ operator--() [2/2]

template<typename It , typename Diff >
constexpr reverse_iterator gaia::core::reverse_iterator< It, Diff >::operator-- ( int  )
inlineconstexpr

Moves one position opposite to reverse traversal order.

Returns
Iterator value before movement.

◆ operator-=()

template<typename It , typename Diff >
constexpr reverse_iterator & gaia::core::reverse_iterator< It, Diff >::operator-= ( difference_type  offset)
inlineconstexpr

Moves opposite to reverse traversal by a number of positions.

Parameters
offsetNumber of positions to retreat.
Returns
This iterator after movement.

◆ operator->()

template<typename It , typename Diff >
GAIA_NODISCARD constexpr decltype(auto) gaia::core::reverse_iterator< It, Diff >::operator-> ( ) const
inlineconstexpr

Accesses the current element through the underlying iterator.

Returns
Pointer or proxy produced by the underlying iterator.

◆ operator<()

template<typename It , typename Diff >
GAIA_NODISCARD constexpr bool gaia::core::reverse_iterator< It, Diff >::operator< ( const reverse_iterator< It, Diff > &  other) const
inlineconstexpr

Compares positions in reverse traversal order.

Parameters
otherIterator to compare.
Returns
True when this iterator precedes other in reverse order.

◆ operator<=()

template<typename It , typename Diff >
GAIA_NODISCARD constexpr bool gaia::core::reverse_iterator< It, Diff >::operator<= ( const reverse_iterator< It, Diff > &  other) const
inlineconstexpr

Compares positions in reverse traversal order.

Parameters
otherIterator to compare.
Returns
True when this iterator does not follow other in reverse order.

◆ operator==()

template<typename It , typename Diff >
GAIA_NODISCARD constexpr bool gaia::core::reverse_iterator< It, Diff >::operator== ( const reverse_iterator< It, Diff > &  other) const
inlineconstexpr

Checks whether two iterators have the same base position.

Parameters
otherIterator to compare.
Returns
True when both iterators have the same base position.

◆ operator>()

template<typename It , typename Diff >
GAIA_NODISCARD constexpr bool gaia::core::reverse_iterator< It, Diff >::operator> ( const reverse_iterator< It, Diff > &  other) const
inlineconstexpr

Compares positions in reverse traversal order.

Parameters
otherIterator to compare.
Returns
True when this iterator follows other in reverse order.

◆ operator>=()

template<typename It , typename Diff >
GAIA_NODISCARD constexpr bool gaia::core::reverse_iterator< It, Diff >::operator>= ( const reverse_iterator< It, Diff > &  other) const
inlineconstexpr

Compares positions in reverse traversal order.

Parameters
otherIterator to compare.
Returns
True when this iterator does not precede other in reverse order.

◆ operator[]()

template<typename It , typename Diff >
GAIA_NODISCARD constexpr decltype(auto) gaia::core::reverse_iterator< It, Diff >::operator[] ( difference_type  offset) const
inlineconstexpr

Accesses a reverse-relative element.

Parameters
offsetNumber of reverse positions from the current element.
Returns
Reference or proxy for the selected element.

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