AXOM
Axom provides a robust, flexible software infrastructure for the development of multi-physics applications and computational tools.
axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const > Class Template Reference

An stl-compliant random iterator type for an ordered set. More...

#include </home/docs/checkouts/readthedocs.org/user_builds/axom/checkouts/v0.5.0/src/axom/slam/OrderedSet.hpp>

Inheritance diagram for axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >:

Public Types

using iterator_category = std::random_access_iterator_tag
 
using value_type = T
 
using difference_type = PositionType
 
using reference = typename std::conditional< Const, typename OrderedSet::IndirectionPolicyType::ConstIndirectionResult, typename OrderedSet::IndirectionPolicyType::IndirectionResult >::type
 
using pointer = typename std::conditional< Const, const T *, T * >::type
 
using IterBase = IteratorBase< OrderedSetIterator< T, Const >, PositionType >
 
using IndirectionType = typename OrderedSet::IndirectionPolicyType
 
using StrideType = typename OrderedSet::StridePolicyType
 

Public Member Functions

PositionType index () const
 
Constructors, copying and assignment
 OrderedSetIterator ()=default
 
 OrderedSetIterator (PositionType pos, const OrderedSet &oSet)
 
 OrderedSetIterator (const OrderedSetIterator &it)=default
 
OrderedSetIteratoroperator= (const OrderedSetIterator &it)
 
Member and pointer operators
Note
We use the enable_if construct to implement both const and non-const iterators in the same implementation.
template<bool _Const = Const>
std::enable_if<!_Const, reference >::type operator* ()
 Indirection operator for non-const iterator. More...
 
template<bool _Const = Const>
std::enable_if< _Const, reference >::type operator* () const
 Indirection operator for const iterator. More...
 
template<bool _Const = Const>
std::enable_if<!_Const, pointer >::type operator-> ()
 Structure dereference operator for non-const iterator. More...
 
template<bool _Const = Const>
std::enable_if< _Const, pointer >::type operator-> () const
 Structure dereference operator for const iterator. More...
 
template<bool _Const = Const>
std::enable_if<!_Const, reference >::type operator[] (PositionType n)
 Subscript operator for non-const iterator. More...
 
template<bool _Const = Const>
std::enable_if< _Const, reference >::type operator[] (PositionType n) const
 Subscript operator for const iterator. More...
 
Conversion operators
template<typename U >
 operator OrderedSetIterator< U, true > () const
 Convert from iterator type to const_iterator type. More...
 
Iterator advance and distance operators
OrderedSetIterator< T, Const > & operator++ ()
 Pre-increment operator. More...
 
OrderedSetIterator< T, Const > operator++ (int)
 Post-increment operator. More...
 
OrderedSetIterator< T, Const > & operator-- ()
 Pre-decrement operator. More...
 
OrderedSetIterator< T, Const > operator-- (int)
 Post-decrement operator. More...
 
OrderedSetIterator< T, Const > & operator+= (PositionType n)
 Addition-assignment operator. More...
 
OrderedSetIterator< T, Const > & operator-= (PositionType n)
 Subtraction-assignment operator. More...
 

Protected Member Functions

void advance (PositionType n)
 

Protected Attributes

PositionType m_pos
 

Detailed Description

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
class axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >

An stl-compliant random iterator type for an ordered set.

Uses the set's policies for efficient iteration

Template Parameters
TThe result type of the iteration
ConstBoolean to indicate if this is a const iterator
Note
Most operators are implemented via the IteratorBase class
The reference type is determined based on the IndirectionPolicy and on the Const template parameter
Use of a const template parameter with conditional member and pointer operations based on ideas from https://stackoverflow.com/a/49425072

Member Typedef Documentation

◆ iterator_category

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
using axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::iterator_category = std::random_access_iterator_tag

◆ value_type

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
using axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::value_type = T

◆ difference_type

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
using axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::difference_type = PositionType

◆ reference

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
using axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::reference = typename std::conditional< Const, typename OrderedSet::IndirectionPolicyType::ConstIndirectionResult, typename OrderedSet::IndirectionPolicyType::IndirectionResult>::type

◆ pointer

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
using axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::pointer = typename std::conditional<Const, const T*, T*>::type

◆ IterBase

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
using axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::IterBase = IteratorBase<OrderedSetIterator<T, Const>, PositionType>

◆ IndirectionType

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
using axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::IndirectionType = typename OrderedSet::IndirectionPolicyType

◆ StrideType

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
using axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::StrideType = typename OrderedSet::StridePolicyType

Constructor & Destructor Documentation

◆ OrderedSetIterator() [1/3]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::OrderedSetIterator ( )
default

◆ OrderedSetIterator() [2/3]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::OrderedSetIterator ( PositionType  pos,
const OrderedSet oSet 
)
inline

◆ OrderedSetIterator() [3/3]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::OrderedSetIterator ( const OrderedSetIterator< T, Const > &  it)
default

Member Function Documentation

◆ operator=()

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
OrderedSetIterator& axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::operator= ( const OrderedSetIterator< T, Const > &  it)
inline

◆ operator*() [1/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
template<bool _Const = Const>
std::enable_if<!_Const, reference>::type axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::operator* ( )
inline

Indirection operator for non-const iterator.

◆ operator*() [2/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
template<bool _Const = Const>
std::enable_if<_Const, reference>::type axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::operator* ( ) const
inline

Indirection operator for const iterator.

◆ operator->() [1/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
template<bool _Const = Const>
std::enable_if<!_Const, pointer>::type axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::operator-> ( )
inline

Structure dereference operator for non-const iterator.

◆ operator->() [2/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
template<bool _Const = Const>
std::enable_if<_Const, pointer>::type axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::operator-> ( ) const
inline

Structure dereference operator for const iterator.

◆ operator[]() [1/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
template<bool _Const = Const>
std::enable_if<!_Const, reference>::type axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::operator[] ( PositionType  n)
inline

Subscript operator for non-const iterator.

◆ operator[]() [2/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
template<bool _Const = Const>
std::enable_if<_Const, reference>::type axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::operator[] ( PositionType  n) const
inline

Subscript operator for const iterator.

◆ operator OrderedSetIterator< U, true >()

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
template<typename U >
axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::operator OrderedSetIterator< U, true > ( ) const
inline

Convert from iterator type to const_iterator type.

◆ index()

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
PositionType axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::index ( ) const
inline

◆ advance()

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::RuntimeSize<PosType>, typename OffsetPolicy = policies::ZeroOffset<PosType>, typename StridePolicy = policies::StrideOne<PosType>, typename IndirectionPolicy = policies::NoIndirection<PosType, ElemType>, typename SubsettingPolicy = policies::NoSubset>
template<typename T, bool Const>
void axom::slam::OrderedSet< PosType, ElemType, SizePolicy, OffsetPolicy, StridePolicy, IndirectionPolicy, SubsettingPolicy >::OrderedSetIterator< T, Const >::advance ( PositionType  n)
inlineprotected

◆ operator++() [1/2]

OrderedSetIterator< T, Const > & axom::slam::IteratorBase< OrderedSetIterator< T, Const > , PositionType >::operator++ ( )
inlineinherited

Pre-increment operator.

◆ operator++() [2/2]

OrderedSetIterator< T, Const > axom::slam::IteratorBase< OrderedSetIterator< T, Const > , PositionType >::operator++ ( int  )
inlineinherited

Post-increment operator.

◆ operator--() [1/2]

OrderedSetIterator< T, Const > & axom::slam::IteratorBase< OrderedSetIterator< T, Const > , PositionType >::operator-- ( )
inlineinherited

Pre-decrement operator.

◆ operator--() [2/2]

OrderedSetIterator< T, Const > axom::slam::IteratorBase< OrderedSetIterator< T, Const > , PositionType >::operator-- ( int  )
inlineinherited

Post-decrement operator.

◆ operator+=()

OrderedSetIterator< T, Const > & axom::slam::IteratorBase< OrderedSetIterator< T, Const > , PositionType >::operator+= ( PositionType  n)
inlineinherited

Addition-assignment operator.

◆ operator-=()

OrderedSetIterator< T, Const > & axom::slam::IteratorBase< OrderedSetIterator< T, Const > , PositionType >::operator-= ( PositionType  n)
inlineinherited

Subtraction-assignment operator.

Member Data Documentation

◆ m_pos

PositionType axom::slam::IteratorBase< OrderedSetIterator< T, Const > , PositionType >::m_pos
protectedinherited

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