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 >::EdgesIterator< Const > Class Template Reference

Iterator that lazily flattens all face edges across all faces. More...

Collaboration diagram for OpenABF::HalfEdgeMesh< T, Dim, VertexTraits, EdgeTraits, FaceTraits >::EdgesIterator< Const >:
[legend]

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
 
using FaceVecIter = typename std::vector< FacePtr >::const_iterator
 

Public Member Functions

 EdgesIterator (FaceVecIter faceIt, FaceVecIter faceEnd)
 
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 EdgesIterator &other) const -> bool
 
auto operator!= (const EdgesIterator &other) const -> bool
 
auto operator++ () -> EdgesIterator &
 

Private Member Functions

void advance_if_face_exhausted ()
 

Private Attributes

FaceVecIter faceIt_ {}
 
FaceVecIter faceEnd_ {}
 
FaceIterator< trueedgeIt_ {}
 

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 >::EdgesIterator< Const >

Iterator that lazily flattens all face edges across all faces.

Provides a single flat sequence over all face (non-boundary) edges in the mesh without allocating a vector. Internally advances through faces_ and uses FaceIterator within each face.

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 >::EdgesIterator< 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 >::EdgesIterator< 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 >::EdgesIterator< 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 >::EdgesIterator< 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 >::EdgesIterator< Const >::value_type = EdgePtr

Value type

Constructor & Destructor Documentation

◆ EdgesIterator()

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 >::EdgesIterator< Const >::EdgesIterator ( FaceVecIter  faceIt,
FaceVecIter  faceEnd 
)
inline

Construct at position (begin or end depending on faceIt == faceEnd)

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 >::EdgesIterator< Const >::operator!= ( const EdgesIterator< 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 >::EdgesIterator< 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 >::EdgesIterator< Const >::operator++ ( ) -> EdgesIterator&
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 >::EdgesIterator< Const >::operator== ( const EdgesIterator< Const > &  other) const -> bool
inline

Equality