AutoPas  3.0.0
Loading...
Searching...
No Matches
Classes | Public Types | Public Member Functions | Friends | List of all members
autopas::ContainerIterator< Particle_T, modifiable, regionIter > Class Template Reference

Public iterator class that iterates over a particle container and additional vectors (which are typically stored in the logic handler). More...

#include <ContainerIterator.h>

Public Types

using ParticleType = std::conditional_t< modifiable, Particle_T, const Particle_T >
 Type of the particle this iterator points to.
 
using ParticleVecType = std::conditional_t< modifiable, std::vector< std::vector< Particle_T > * >, std::vector< std::vector< Particle_T > const * > >
 Type of the additional vector collection.
 
using ContainerType = std::conditional_t< modifiable, ParticleContainerInterface< Particle_T >, const ParticleContainerInterface< Particle_T > >
 Type of the Particle Container type.
 

Public Member Functions

 ContainerIterator ()
 Default constructor that guarantees an invalid iterator.
 
 ContainerIterator (ContainerType &container, IteratorBehavior behavior, ParticleVecType *additionalVectorsToIterate, const std::array< double, 3 > &regionMin, const std::array< double, 3 > &regionMax)
 Region Iterator constructor meant to be called from the logic handler.
 
 ContainerIterator (ContainerType &container, IteratorBehavior behavior, ParticleVecType *additionalVectorsToIterate)
 Regular Iterator constructor meant to be called from the logic handler.
 
 ContainerIterator (const ContainerIterator< Particle_T, modifiable, regionIter > &other)
 Copy constructor.
 
ContainerIterator< Particle_T, modifiable, regionIter > & operator= (const ContainerIterator< Particle_T, modifiable, regionIter > &other)
 Copy assignment operator.
 
 ContainerIterator (ContainerIterator< Particle_T, modifiable, regionIter > &&other) noexcept
 Move constructor.
 
ContainerIterator< Particle_T, modifiable, regionIter > & operator= (ContainerIterator< Particle_T, modifiable, regionIter > &&other) noexcept
 Move assignment operator.
 
ContainerIterator< Particle_T, modifiable, regionIter > & operator++ ()
 Increments the iterator.
 
ParticleTypeoperator* () const
 Dereference operator.
 
ParticleTypeoperator-> () const
 Dereference operator.
 
bool isValid () const
 Check whether the iterator currently points to a valid particle.
 
bool operator== (const bool input) const
 Checks if the current iterator has a given validity.
 
bool operator!= (const bool input) const
 Checks if the current iterator does not have a given validity.
 

Friends

template<class T >
void internal::deleteParticle (T &)
 

Detailed Description

template<class Particle_T, bool modifiable, bool regionIter>
class autopas::ContainerIterator< Particle_T, modifiable, regionIter >

Public iterator class that iterates over a particle container and additional vectors (which are typically stored in the logic handler).

It supports parallelism over cells by being instantiated in a parallel region and particle deletion while iterating. Inserting particles might invalidate the iterator. There are no guarantees about the order in which particles are iterated.

Template Parameters
Particle_T
modifiableIf false, this is a const iterator.
regionIterIf false, avoid any region checks and iterate the whole container.

Member Typedef Documentation

◆ ContainerType

template<class Particle_T , bool modifiable, bool regionIter>
using autopas::ContainerIterator< Particle_T, modifiable, regionIter >::ContainerType = std::conditional_t<modifiable, ParticleContainerInterface<Particle_T>, const ParticleContainerInterface<Particle_T> >

Type of the Particle Container type.

Switch for const iterators.

◆ ParticleType

template<class Particle_T , bool modifiable, bool regionIter>
using autopas::ContainerIterator< Particle_T, modifiable, regionIter >::ParticleType = std::conditional_t<modifiable, Particle_T, const Particle_T>

Type of the particle this iterator points to.

Switch for const iterators.

◆ ParticleVecType

template<class Particle_T , bool modifiable, bool regionIter>
using autopas::ContainerIterator< Particle_T, modifiable, regionIter >::ParticleVecType = std::conditional_t<modifiable, std::vector<std::vector<Particle_T> *>, std::vector<std::vector<Particle_T> const *> >

Type of the additional vector collection.

Switch for const iterators.

Constructor & Destructor Documentation

◆ ContainerIterator() [1/4]

template<class Particle_T , bool modifiable, bool regionIter>
autopas::ContainerIterator< Particle_T, modifiable, regionIter >::ContainerIterator ( ContainerType container,
IteratorBehavior  behavior,
ParticleVecType additionalVectorsToIterate,
const std::array< double, 3 > &  regionMin,
const std::array< double, 3 > &  regionMax 
)
inline

Region Iterator constructor meant to be called from the logic handler.

Parameters
containerReference to the particle container to iterate.
behaviorThe IteratorBehavior that specifies which type of cells shall be iterated over.
additionalVectorsToIterateThread buffers of additional Particle vector to iterate over.
regionMinLeft Front Lower corner of the iterator's region.
regionMaxRight Back Upper corner of the iterator's region.

◆ ContainerIterator() [2/4]

template<class Particle_T , bool modifiable, bool regionIter>
autopas::ContainerIterator< Particle_T, modifiable, regionIter >::ContainerIterator ( ContainerType container,
IteratorBehavior  behavior,
ParticleVecType additionalVectorsToIterate 
)
inline

Regular Iterator constructor meant to be called from the logic handler.

Parameters
containerReference to the particle container to iterate.
behaviorThe IteratorBehavior that specifies which type of cells shall be iterated over.
additionalVectorsToIterateThread buffers of additional Particle vector to iterate over.

◆ ContainerIterator() [3/4]

template<class Particle_T , bool modifiable, bool regionIter>
autopas::ContainerIterator< Particle_T, modifiable, regionIter >::ContainerIterator ( const ContainerIterator< Particle_T, modifiable, regionIter > &  other)
inline

Copy constructor.

Parameters
other

◆ ContainerIterator() [4/4]

template<class Particle_T , bool modifiable, bool regionIter>
autopas::ContainerIterator< Particle_T, modifiable, regionIter >::ContainerIterator ( ContainerIterator< Particle_T, modifiable, regionIter > &&  other)
inlinenoexcept

Move constructor.

Parameters
other

Member Function Documentation

◆ isValid()

template<class Particle_T , bool modifiable, bool regionIter>
bool autopas::ContainerIterator< Particle_T, modifiable, regionIter >::isValid ( ) const
inline

Check whether the iterator currently points to a valid particle.

Returns
returns whether the iterator is valid

◆ operator!=()

template<class Particle_T , bool modifiable, bool regionIter>
bool autopas::ContainerIterator< Particle_T, modifiable, regionIter >::operator!= ( const bool  input) const
inline

Checks if the current iterator does not have a given validity.

Parameters
input
Returns

◆ operator*()

template<class Particle_T , bool modifiable, bool regionIter>
ParticleType & autopas::ContainerIterator< Particle_T, modifiable, regionIter >::operator* ( ) const
inline

Dereference operator.

Returns
Reference to the current particle.

◆ operator++()

template<class Particle_T , bool modifiable, bool regionIter>
ContainerIterator< Particle_T, modifiable, regionIter > & autopas::ContainerIterator< Particle_T, modifiable, regionIter >::operator++ ( )
inline

Increments the iterator.

The idea is that this operator either queries the container with the current indices, or, if there is nothing left in the container, it handles the iteration through the additional vectors.

Returns
*this

◆ operator->()

template<class Particle_T , bool modifiable, bool regionIter>
ParticleType * autopas::ContainerIterator< Particle_T, modifiable, regionIter >::operator-> ( ) const
inline

Dereference operator.

Returns
Pointer to the current particle.

◆ operator=() [1/2]

template<class Particle_T , bool modifiable, bool regionIter>
ContainerIterator< Particle_T, modifiable, regionIter > & autopas::ContainerIterator< Particle_T, modifiable, regionIter >::operator= ( const ContainerIterator< Particle_T, modifiable, regionIter > &  other)
inline

Copy assignment operator.

Parameters
other
Returns

◆ operator=() [2/2]

template<class Particle_T , bool modifiable, bool regionIter>
ContainerIterator< Particle_T, modifiable, regionIter > & autopas::ContainerIterator< Particle_T, modifiable, regionIter >::operator= ( ContainerIterator< Particle_T, modifiable, regionIter > &&  other)
inlinenoexcept

Move assignment operator.

Parameters
other
Returns

◆ operator==()

template<class Particle_T , bool modifiable, bool regionIter>
bool autopas::ContainerIterator< Particle_T, modifiable, regionIter >::operator== ( const bool  input) const
inline

Checks if the current iterator has a given validity.

Note
This is what is used implicitly in range-based loops because AutoPas::end() and ParticleContainerInterface::end() returns false.
Parameters
input
Returns

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