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

An stl-compliant random iterator type for a DynamicSet. More...

#include </home/docs/checkouts/readthedocs.org/user_builds/axom/checkouts/latest/src/axom/slam/DynamicSet.hpp>

Inheritance diagram for axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< 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, const T &, T & >::type
 
using pointer = typename std::conditional< Const, const T *, T * >::type
 
using DynamicSetType = typename std::conditional< Const, const DynamicSet, DynamicSet >::type
 
using IterBase = IteratorBase< DynamicSetIterator< T, Const >, PositionType >
 
Equality and relational operators
using iterator = IteratorBase< DynamicSetIterator< T, Const >, PositionType >
 

Public Member Functions

PositionType index () const
 
bool isValidEntry () const
 
Constructors, copying and assignment
 DynamicSetIterator ()=default
 
 DynamicSetIterator (PositionType pos, DynamicSetType &dSet)
 
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 DynamicSetIterator< U, true > () const
 Convert from iterator type to const_iterator type. More...
 
Iterator advance and distance operators
AXOM_HOST_DEVICE DynamicSetIterator< T, Const > & operator++ ()
 Pre-increment operator. More...
 
DynamicSetIterator< T, Const > operator++ (int)
 Post-increment operator. More...
 
DynamicSetIterator< T, Const > & operator-- ()
 Pre-decrement operator. More...
 
DynamicSetIterator< T, Const > operator-- (int)
 Post-decrement operator. More...
 
DynamicSetIterator< T, Const > & operator+= (PositionType n)
 Addition-assignment operator. More...
 
DynamicSetIterator< 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::DynamicRuntimeSize<PosType>>
template<typename T, bool Const>
class axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >

An stl-compliant random iterator type for a DynamicSet.

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
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::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
using axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::iterator_category = std::random_access_iterator_tag

◆ value_type

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
using axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::value_type = T

◆ difference_type

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
using axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::difference_type = PositionType

◆ reference

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
using axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::reference = typename std::conditional<Const, const T&, T&>::type

◆ pointer

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
using axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::pointer = typename std::conditional<Const, const T*, T*>::type

◆ DynamicSetType

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
using axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::DynamicSetType = typename std::conditional<Const, const DynamicSet, DynamicSet>::type

◆ IterBase

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
using axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::IterBase = IteratorBase<DynamicSetIterator<T, Const>, PositionType>

◆ iterator

Constructor & Destructor Documentation

◆ DynamicSetIterator() [1/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::DynamicSetIterator ( )
default

◆ DynamicSetIterator() [2/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::DynamicSetIterator ( PositionType  pos,
DynamicSetType dSet 
)
inline

Member Function Documentation

◆ operator*() [1/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
template<bool _Const = Const>
std::enable_if<!_Const, reference>::type axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::operator* ( )
inline

Indirection operator for non-const iterator.

References axom::IteratorBase< DynamicSetIterator< T, Const >, PositionType >::m_pos.

◆ operator*() [2/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
template<bool _Const = Const>
std::enable_if<_Const, reference>::type axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::operator* ( ) const
inline

Indirection operator for const iterator.

References axom::IteratorBase< DynamicSetIterator< T, Const >, PositionType >::m_pos.

◆ operator->() [1/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
template<bool _Const = Const>
std::enable_if<!_Const, pointer>::type axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::operator-> ( )
inline

Structure dereference operator for non-const iterator.

References axom::IteratorBase< DynamicSetIterator< T, Const >, PositionType >::m_pos.

◆ operator->() [2/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
template<bool _Const = Const>
std::enable_if<_Const, pointer>::type axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::operator-> ( ) const
inline

Structure dereference operator for const iterator.

References axom::IteratorBase< DynamicSetIterator< T, Const >, PositionType >::m_pos.

◆ operator[]() [1/2]

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
template<bool _Const = Const>
std::enable_if<!_Const, reference>::type axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< 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::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
template<bool _Const = Const>
std::enable_if<_Const, reference>::type axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::operator[] ( PositionType  n) const
inline

Subscript operator for const iterator.

◆ operator DynamicSetIterator< U, true >()

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
template<typename U >
axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::operator DynamicSetIterator< U, true > ( ) const
inline

Convert from iterator type to const_iterator type.

References axom::IteratorBase< DynamicSetIterator< T, Const >, PositionType >::m_pos.

◆ index()

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
PositionType axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::index ( ) const
inline

◆ isValidEntry()

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
bool axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::isValidEntry ( ) const
inline

◆ advance()

template<typename PosType = slam::DefaultPositionType, typename ElemType = slam::DefaultElementType, typename SizePolicy = policies::DynamicRuntimeSize<PosType>>
template<typename T , bool Const>
void axom::slam::DynamicSet< PosType, ElemType, SizePolicy >::DynamicSetIterator< T, Const >::advance ( PositionType  n)
inlineprotected

◆ operator++() [1/2]

AXOM_HOST_DEVICE DynamicSetIterator< T, Const > & axom::IteratorBase< DynamicSetIterator< T, Const > , PositionType >::operator++ ( )
inlineinherited

Pre-increment operator.

◆ operator++() [2/2]

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

Post-increment operator.

◆ operator--() [1/2]

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

Pre-decrement operator.

◆ operator--() [2/2]

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

Post-decrement operator.

◆ operator+=()

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

Addition-assignment operator.

◆ operator-=()

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

Subtraction-assignment operator.

Member Data Documentation

◆ m_pos

PositionType axom::IteratorBase< DynamicSetIterator< T, Const > , PositionType >::m_pos
protectedinherited

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