OpenABF 2.1.0
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const > Class Template Reference

Iterator for the edges of a vertex's wheel. More...

Public Types

using difference_type = std::ptrdiff_t
 
using value_type = EdgePtr
 
using pointer = std::conditional_t< Const, value_type const *, value_type * >
 
using reference = std::conditional_t< Const, value_type const &, value_type & >
 
using iterator_category = std::input_iterator_tag
 

Public Member Functions

 WheelIterator ()=default
 
 WheelIterator (const EdgePtr &head)
 
template<bool C = Const>
auto operator* () const -> std::enable_if_t< C, reference >
 
template<bool C = Const>
auto operator* () -> std::enable_if_t<!C, reference >
 
auto operator== (const WheelIterator &other) const -> bool
 
auto operator!= (const WheelIterator &other) const -> bool
 
auto operator++ () -> WheelIterator &
 

Private Member Functions

void advance_to_non_boundary ()
 

Private Attributes

EdgePtr head_ {}
 
EdgePtr current_ {}
 

Detailed Description

template<typename T, std::size_t Dim = 3, typename VertexTraits = traits::DefaultVertexTraits<T>, typename EdgeTraits = traits::DefaultEdgeTraits<T>, typename FaceTraits = traits::DefaultFaceTraits<T>>
template<bool Const = false>
class OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const >

Iterator for the edges of a vertex's wheel.

Walks the half-edge linked-list around a vertex (edge->pair->next), yielding only non-boundary edges. Multi-pass safe: constructing a new WheelIterator from the same vertex edge always starts at the beginning.

Template Parameters
ConstIf true, is a const iterator

Member Typedef Documentation

◆ difference_type

template<typename T , std::size_t Dim = 3, typename VertexTraits = traits::DefaultVertexTraits<T>, typename EdgeTraits = traits::DefaultEdgeTraits<T>, typename FaceTraits = traits::DefaultFaceTraits<T>>
template<bool Const = false>
using OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const >::difference_type = std::ptrdiff_t

Difference type

◆ iterator_category

template<typename T , std::size_t Dim = 3, typename VertexTraits = traits::DefaultVertexTraits<T>, typename EdgeTraits = traits::DefaultEdgeTraits<T>, typename FaceTraits = traits::DefaultFaceTraits<T>>
template<bool Const = false>
using OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const >::iterator_category = std::input_iterator_tag

Iterator category

◆ pointer

template<typename T , std::size_t Dim = 3, typename VertexTraits = traits::DefaultVertexTraits<T>, typename EdgeTraits = traits::DefaultEdgeTraits<T>, typename FaceTraits = traits::DefaultFaceTraits<T>>
template<bool Const = false>
using OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const >::pointer = std::conditional_t<Const, value_type const*, value_type*>

Pointer type

◆ reference

template<typename T , std::size_t Dim = 3, typename VertexTraits = traits::DefaultVertexTraits<T>, typename EdgeTraits = traits::DefaultEdgeTraits<T>, typename FaceTraits = traits::DefaultFaceTraits<T>>
template<bool Const = false>
using OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const >::reference = std::conditional_t<Const, value_type const&, value_type&>

Reference type

◆ value_type

template<typename T , std::size_t Dim = 3, typename VertexTraits = traits::DefaultVertexTraits<T>, typename EdgeTraits = traits::DefaultEdgeTraits<T>, typename FaceTraits = traits::DefaultFaceTraits<T>>
template<bool Const = false>
using OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const >::value_type = EdgePtr

Value type

Constructor & Destructor Documentation

◆ WheelIterator() [1/2]

template<typename T , std::size_t Dim = 3, typename VertexTraits = traits::DefaultVertexTraits<T>, typename EdgeTraits = traits::DefaultEdgeTraits<T>, typename FaceTraits = traits::DefaultFaceTraits<T>>
template<bool Const = false>
OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const >::WheelIterator ( )
default

Default constructor == End iterator (current_ == nullptr)

◆ WheelIterator() [2/2]

template<typename T , std::size_t Dim = 3, typename VertexTraits = traits::DefaultVertexTraits<T>, typename EdgeTraits = traits::DefaultEdgeTraits<T>, typename FaceTraits = traits::DefaultFaceTraits<T>>
template<bool Const = false>
OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const >::WheelIterator ( const EdgePtr head)
inlineexplicit

Construct from the vertex's stored edge

Member Function Documentation

◆ operator!=()

template<typename T , std::size_t Dim = 3, typename VertexTraits = traits::DefaultVertexTraits<T>, typename EdgeTraits = traits::DefaultEdgeTraits<T>, typename FaceTraits = traits::DefaultFaceTraits<T>>
template<bool Const = false>
auto OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const >::operator!= ( const WheelIterator< Const > &  other) const -> bool
inline

Inequality

◆ operator*()

template<typename T , std::size_t Dim = 3, typename VertexTraits = traits::DefaultVertexTraits<T>, typename EdgeTraits = traits::DefaultEdgeTraits<T>, typename FaceTraits = traits::DefaultFaceTraits<T>>
template<bool Const = false>
template<bool C = Const>
auto OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const >::operator* ( ) const -> std::enable_if_t<C, reference>
inline

Dereference

◆ operator++()

template<typename T , std::size_t Dim = 3, typename VertexTraits = traits::DefaultVertexTraits<T>, typename EdgeTraits = traits::DefaultEdgeTraits<T>, typename FaceTraits = traits::DefaultFaceTraits<T>>
template<bool Const = false>
auto OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const >::operator++ ( ) -> WheelIterator&
inline

Increment

◆ operator==()

template<typename T , std::size_t Dim = 3, typename VertexTraits = traits::DefaultVertexTraits<T>, typename EdgeTraits = traits::DefaultEdgeTraits<T>, typename FaceTraits = traits::DefaultFaceTraits<T>>
template<bool Const = false>
auto OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::WheelIterator< Const >::operator== ( const WheelIterator< Const > &  other) const -> bool
inline

Equality