ParticleIterator< dim, number > Class Template Reference

Developer Documentation: MeltPoolDG::ParticleIterator< dim, number > Class Template Reference
Developer Documentation
MeltPoolDG::ParticleIterator< dim, number > Class Template Reference

STL-style bidirectional iterator over particles. More...

#include <particle_iterator.hpp>

Classes

struct  PropertyPoolIteratorData
 

Public Types

using iterator_category = std::bidirectional_iterator_tag
 
using difference_type = std::ptrdiff_t
 
using value_type = DEMParticleAccessor< dim, number >
 
using reference = DEMParticleAccessor< dim, number > &
 
using pointer = DEMParticleAccessor< dim, number > *
 

Public Member Functions

 ParticleIterator ()=default
 
 ParticleIterator (dealii::Particles::ParticleIterator< dim > particle)
 
 ParticleIterator (dealii::Particles::PropertyPool< dim > &property_pool, const typename dealii::Particles::PropertyPool< dim >::Handle handle)
 
DEMParticleAccessor< dim, number > & operator* ()
 
const DEMParticleAccessor< dim, number > & operator* () const
 
DEMParticleAccessor< dim, number > * operator-> ()
 
const DEMParticleAccessor< dim, number > * operator-> () const
 
bool operator!= (const ParticleIterator &c) const
 
bool operator== (const ParticleIterator &c) const
 
ParticleIteratoroperator++ ()
 
ParticleIterator operator++ (int)
 
ParticleIteratoroperator-- ()
 
ParticleIterator operator-- (int)
 

Private Member Functions

void make_accessor ()
 
void refresh_accessor ()
 

Private Attributes

std::optional< DEMParticleAccessor< dim, number > > particle_accessor
 
std::variant< dealii::Particles::ParticleIterator< dim >, PropertyPoolIteratorDatadeal_ii_iterator
 Variant type for the underlying iterator.
 

Detailed Description

template<int dim, typename number>
class MeltPoolDG::ParticleIterator< dim, number >

STL-style bidirectional iterator over particles.

This iterator provides a uniform interface to traverse particles, whether they belong to a dealii::Particles::ParticleHandler or are stored in a PropertyPool. The interface is consistent for both cases and supports standard STL-style iterator operations, including: operator*, operator->, operator++, operator--, and comparison operators.

Dereferencing the iterator yields a ParticleAccessor object, which grants direct access to the particle's properties as defined in MeltPoolDG.

Member Typedef Documentation

◆ difference_type

template<int dim, typename number >
using MeltPoolDG::ParticleIterator< dim, number >::difference_type = std::ptrdiff_t

◆ iterator_category

template<int dim, typename number >
using MeltPoolDG::ParticleIterator< dim, number >::iterator_category = std::bidirectional_iterator_tag

◆ pointer

template<int dim, typename number >
using MeltPoolDG::ParticleIterator< dim, number >::pointer = DEMParticleAccessor<dim, number> *

◆ reference

template<int dim, typename number >
using MeltPoolDG::ParticleIterator< dim, number >::reference = DEMParticleAccessor<dim, number> &

◆ value_type

template<int dim, typename number >
using MeltPoolDG::ParticleIterator< dim, number >::value_type = DEMParticleAccessor<dim, number>

Constructor & Destructor Documentation

◆ ParticleIterator() [1/3]

template<int dim, typename number >
MeltPoolDG::ParticleIterator< dim, number >::ParticleIterator ( )
default

Default constructor; creates an invalid iterator.

◆ ParticleIterator() [2/3]

template<int dim, typename number >
MeltPoolDG::ParticleIterator< dim, number >::ParticleIterator ( dealii::Particles::ParticleIterator< dim >  particle)

Construct the iterator from a deal.II particle iterator.

Parameters
particleThe underlying deal.II particle iterator.

◆ ParticleIterator() [3/3]

template<int dim, typename number >
MeltPoolDG::ParticleIterator< dim, number >::ParticleIterator ( dealii::Particles::PropertyPool< dim > &  property_pool,
const typename dealii::Particles::PropertyPool< dim >::Handle  handle 
)

Construct from a deal.II particle property pool and a corresponding handle identifying the particle of interest in the property pool.

Parameters
property_poolThe property pool containing the particle.
handleHandle of the particle in the property pool.

Member Function Documentation

◆ make_accessor()

template<int dim, typename number >
void MeltPoolDG::ParticleIterator< dim, number >::make_accessor ( )
private

Construct the particle accessor from the current iterator state.

Note
Does not check whether the iterator is valid; use refresh_accessor() for that.

◆ operator!=()

template<int dim, typename number >
bool MeltPoolDG::ParticleIterator< dim, number >::operator!= ( const ParticleIterator< dim, number > &  c) const

◆ operator*() [1/2]

template<int dim, typename number >
DEMParticleAccessor< dim, number > & MeltPoolDG::ParticleIterator< dim, number >::operator* ( )

Dereference operator.

Exceptions
Assertif the iterator is invalid (only in debug mode).

◆ operator*() [2/2]

template<int dim, typename number >
const DEMParticleAccessor< dim, number > & MeltPoolDG::ParticleIterator< dim, number >::operator* ( ) const

Same as above but const.

◆ operator++() [1/2]

template<int dim, typename number >
ParticleIterator< dim, number > & MeltPoolDG::ParticleIterator< dim, number >::operator++ ( )

Pre-increment operator. Advances to the next particle.

◆ operator++() [2/2]

template<int dim, typename number >
ParticleIterator< dim, number > MeltPoolDG::ParticleIterator< dim, number >::operator++ ( int  )

Post-increment operator.

◆ operator--() [1/2]

template<int dim, typename number >
ParticleIterator< dim, number > & MeltPoolDG::ParticleIterator< dim, number >::operator-- ( )

Pre-decrement operator. Moves to the previous particle.

◆ operator--() [2/2]

template<int dim, typename number >
ParticleIterator< dim, number > MeltPoolDG::ParticleIterator< dim, number >::operator-- ( int  )

Post-decrement operator.

◆ operator->() [1/2]

template<int dim, typename number >
DEMParticleAccessor< dim, number > * MeltPoolDG::ParticleIterator< dim, number >::operator-> ( )

Arrow operator.

Exceptions
Assertif the iterator is invalid (only in debug mode).

◆ operator->() [2/2]

template<int dim, typename number >
const DEMParticleAccessor< dim, number > * MeltPoolDG::ParticleIterator< dim, number >::operator-> ( ) const

Same as above but const.

◆ operator==()

template<int dim, typename number >
bool MeltPoolDG::ParticleIterator< dim, number >::operator== ( const ParticleIterator< dim, number > &  c) const

◆ refresh_accessor()

template<int dim, typename number >
void MeltPoolDG::ParticleIterator< dim, number >::refresh_accessor ( )
private

Refreshes the internal accessor to match the current iterator state. Sets the cached particle_accessor or resets it if the iterator is invalid.

Member Data Documentation

◆ deal_ii_iterator

template<int dim, typename number >
std::variant<dealii::Particles::ParticleIterator<dim>, PropertyPoolIteratorData> MeltPoolDG::ParticleIterator< dim, number >::deal_ii_iterator
private

Variant type for the underlying iterator.

◆ particle_accessor

template<int dim, typename number >
std::optional<DEMParticleAccessor<dim, number> > MeltPoolDG::ParticleIterator< dim, number >::particle_accessor
private

Cached particle accessor for the current iterator position. Note the optional will be empty in the case that the iterator points to an invalid position.


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