MADNESS 0.10.1
Public Types | Public Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
madness::BoxSurfaceDisplacementRange< NDIM >::Iterator Class Reference

Iterator class for lazy generation of surface points. More...

Collaboration diagram for madness::BoxSurfaceDisplacementRange< NDIM >::Iterator:
Collaboration graph
[legend]

Public Types

using difference_type = std::ptrdiff_t
 
using iterator_category = std::input_iterator_tag
 
using pointer = const Point *
 
using reference = const Point &
 
enum  Type { Begin , End }
 
using value_type = Point
 

Public Member Functions

 Iterator (const BoxSurfaceDisplacementRange *p, Type type)
 Constructs an iterator.
 
reference operator* () const
 Dereferences the iterator.
 
Iteratoroperator++ ()
 Pre-increment operator.
 
Iterator operator++ (int)
 Post-increment operator.
 
pointer operator-> () const
 Arrow operator for member access.
 

Private Member Functions

void advance ()
 Advances the iterator to the next surface point.
 
void advance_till_valid ()
 
const std::optional< Displacement > & displacement () const
 
bool next_surface_layer ()
 
void reset_along_dim (size_t dim)
 

Private Attributes

Box box
 updated box bounds in each dimension, used to avoid duplicate displacements by excluding the surface displacements for each processed fixed dim
 
std::optional< Displacementdisp
 Memoized displacement from parent->center_ to point, computed by displacement(), reset by advance()
 
bool done
 Flag indicating iteration completion.
 
size_t fixed_dim
 Current fixed dimension (i.e. faces perpendicular to this axis are being iterated over)
 
const BoxSurfaceDisplacementRangeparent
 Pointer to parent box.
 
Point point
 Current point.
 

Friends

bool operator!= (const Iterator &a, const Iterator &b)
 Inequality comparison operator.
 
bool operator== (const Iterator &a, const Iterator &b)
 Equality comparison operator.
 

Detailed Description

template<std::size_t NDIM>
class madness::BoxSurfaceDisplacementRange< NDIM >::Iterator

Iterator class for lazy generation of surface points.

This iterator generates surface points on-demand by tracking the current fixed dimension and positions in each dimension. It implements the InputIterator concept.

Member Typedef Documentation

◆ difference_type

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::difference_type = std::ptrdiff_t

◆ iterator_category

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::iterator_category = std::input_iterator_tag

◆ pointer

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::pointer = const Point*

◆ reference

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::reference = const Point&

◆ value_type

template<std::size_t NDIM>
using madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::value_type = Point

Member Enumeration Documentation

◆ Type

Enumerator
Begin 
End 

Constructor & Destructor Documentation

◆ Iterator()

template<std::size_t NDIM>
madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::Iterator ( const BoxSurfaceDisplacementRange p,
Type  type 
)
inline

Member Function Documentation

◆ advance()

template<std::size_t NDIM>
void madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::advance ( )
inlineprivate

◆ advance_till_valid()

template<std::size_t NDIM>
void madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::advance_till_valid ( )
inlineprivate

◆ displacement()

template<std::size_t NDIM>
const std::optional< Displacement > & madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::displacement ( ) const
inlineprivate

◆ next_surface_layer()

template<std::size_t NDIM>
bool madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::next_surface_layer ( )
inlineprivate

◆ operator*()

template<std::size_t NDIM>
reference madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::operator* ( ) const
inline

Dereferences the iterator.

Returns
A const reference to the current displacement

References madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::displacement().

◆ operator++() [1/2]

template<std::size_t NDIM>
Iterator & madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::operator++ ( )
inline

Pre-increment operator.

Returns
Reference to this iterator after advancement

References madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::advance_till_valid().

◆ operator++() [2/2]

template<std::size_t NDIM>
Iterator madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::operator++ ( int  )
inline

Post-increment operator.

Returns
Copy of the iterator before advancement

◆ operator->()

template<std::size_t NDIM>
pointer madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::operator-> ( ) const
inline

Arrow operator for member access.

Returns
A const pointer to the current displacement

◆ reset_along_dim()

template<std::size_t NDIM>
void madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::reset_along_dim ( size_t  dim)
inlineprivate

Friends And Related Symbol Documentation

◆ operator!=

template<std::size_t NDIM>
bool operator!= ( const Iterator a,
const Iterator b 
)
friend

Inequality comparison operator.

Parameters
aFirst iterator
bSecond iterator
Returns
true if iterators are not equivalent

◆ operator==

template<std::size_t NDIM>
bool operator== ( const Iterator a,
const Iterator b 
)
friend

Equality comparison operator.

Parameters
aFirst iterator
bSecond iterator
Returns
true if iterators are equivalent

Member Data Documentation

◆ box

template<std::size_t NDIM>
Box madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::box
private

updated box bounds in each dimension, used to avoid duplicate displacements by excluding the surface displacements for each processed fixed dim

Referenced by madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::Iterator(), madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::advance(), and madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::reset_along_dim().

◆ disp

template<std::size_t NDIM>
std::optional<Displacement> madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::disp
mutableprivate

◆ done

template<std::size_t NDIM>
bool madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::done
private

◆ fixed_dim

template<std::size_t NDIM>
size_t madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::fixed_dim
private

◆ parent

template<std::size_t NDIM>
const BoxSurfaceDisplacementRange* madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::parent
private

◆ point

template<std::size_t NDIM>
Point madness::BoxSurfaceDisplacementRange< NDIM >::Iterator::point
private

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