walberla::field::ForwardFieldIterator< T, fieldFSize > Class Template Reference

#include <FieldIterator.h>

+ Inheritance diagram for walberla::field::ForwardFieldIterator< T, fieldFSize >:

Public Types

using Parent = FieldIterator< T, fieldFSize >
 
using FieldType = Field< typename std::remove_const< T >::type, fieldFSize >
 
- Public Types inherited from walberla::field::FieldIterator< T, fieldFSize >
using iterator_category = std::forward_iterator_tag
 
using value_type = T
 
using difference_type = std::ptrdiff_t
 
using pointer = T *
 
using reference = T &
 
using FieldType = Field< typename std::remove_const< T >::type, fieldFSize >
 

Public Member Functions

Constructor/Destructor
 ForwardFieldIterator (const FieldType *field, cell_idx_t xBeg, cell_idx_t yBeg, cell_idx_t zBeg, cell_idx_t fBeg, uint_t xs, uint_t ys, uint_t zs, uint_t fs)
 
 ForwardFieldIterator ()
 
Operators
ForwardFieldIteratoroperator++ ()
 Pre-increment operator. More...
 
ForwardFieldIteratoroperator-- ()
 Pre-decrement operator. More...
 
Fast Iteration
void incrOuter ()
 Increments the second inner coordinate c2 Use if innermost loop is self written, which is slightly faster. More...
 
void incrInner ()
 
bool testInner () const
 
- Public Member Functions inherited from walberla::field::FieldIterator< T, fieldFSize >
 FieldIterator (const FieldIterator< T, fieldFSize > &other)
 
FieldIterator< T, fieldFSize > & operator= (const FieldIterator< T, fieldFSize > &other)
 Assignment operator. More...
 
bool operator== (const FieldIterator &it) const
 Equal operator. More...
 
bool operator!= (const FieldIterator &it) const
 Unequal operator. More...
 
 operator const FieldIterator< const T, fieldFSize > & () const
 
T & operator* () const
 
T * operator-> () const
 
T & getF (cell_idx_t cf) const
 For beginXYZ iterators, one often needs a specific f Assumes that iterator stands at f==0. More...
 
T & getF (uint_t cf) const
 Equivalent to neighbor(cell_idx_t) see above. More...
 
T & operator[] (cell_idx_t cf) const
 
T & operator[] (uint_t cf) const
 
T & neighbor (stencil::Direction d, cell_idx_t cf=0) const
 Neighbor access relative to current position. More...
 
T & neighbor (stencil::Direction d, uint_t cf) const
 uint_t variant of above function More...
 
T & neighbor (cell_idx_t cx, cell_idx_t cy, cell_idx_t cz, cell_idx_t cf=0) const
 Neighbor access relative to current position. More...
 
T & neighbor (cell_idx_t cx, cell_idx_t cy, cell_idx_t cz, uint_t cf) const
 Neighbor variant that takes unsigned int as f parameter, needed since the stencil toIdx() is an unsigned int. More...
 
cell_idx_t x () const
 In order to get x(), y(), z(), f() function as fast a possible, no if clause for the layout was introduced. More...
 
cell_idx_t y () const
 
cell_idx_t z () const
 
cell_idx_t f () const
 
Cell cell () const
 
void print (std::ostream &str) const
 
const FieldTypegetField () const
 

Additional Inherited Members

- Static Public Attributes inherited from walberla::field::FieldIterator< T, fieldFSize >
static const uint_t F_SIZE = fieldFSize
 
- Protected Member Functions inherited from walberla::field::FieldIterator< T, fieldFSize >
 FieldIterator ()
 Constructs an end iterator, which is represented by NULL pointers. More...
 
 FieldIterator (const FieldType *f, cell_idx_t xBeg, cell_idx_t yBeg, cell_idx_t zBeg, cell_idx_t fBeg, uint_t xSize, uint_t ySize, uint_t zSize, uint_t fSize, bool forward)
 
void incrementLine ()
 Increments the slower 3 coordinates, if innermost coordinate is at end. More...
 
void decrementLine ()
 Decrements the slower 3 coordinates, if innermost coordinate is at beginning. More...
 
void initCoordinateAccessOptimizationPointers ()
 Initializes pointers required for the optimized x(),y(),z(),f() functions See documentation of fastestCoord_, curX_, curY_, curZ_ and curF_. More...
 
- Protected Attributes inherited from walberla::field::FieldIterator< T, fieldFSize >
T * lineBegin_
 Points to begin of fastest coordinate line. More...
 
T * linePtr_
 Point to current element. More...
 
T * lineEnd_
 Points to end of current line. More...
 
cell_idx_t cur_ [3]
 In the following vectors [0] is the slowest and [3] the fastest coordinate Current values of the coordinates, forth coordinate implicitly stored in linePtr_ and if needed written to fastestCoord_. More...
 
uint_t skips_ [4]
 Number of elements to skip when coordinate wraps around. More...
 
uint_t sizes_ [4]
 Size of each coordinate. More...
 
const FieldTypef_
 Field where iterator belongs to. More...
 
cell_idx_t xBegin_
 Following offset values are only used in functions x(),y(),z(),f() More...
 
cell_idx_t yBegin_
 
cell_idx_t zBegin_
 
cell_idx_t fBegin_
 
cell_idx_t fastestCoord_
 
cell_idx_tcurX_
 
cell_idx_tcurY_
 
cell_idx_tcurZ_
 
cell_idx_tcurF_
 

Member Typedef Documentation

◆ FieldType

template<typename T , uint_t fieldFSize>
using walberla::field::ForwardFieldIterator< T, fieldFSize >::FieldType = Field<typename std::remove_const<T>::type, fieldFSize>

◆ Parent

template<typename T , uint_t fieldFSize>
using walberla::field::ForwardFieldIterator< T, fieldFSize >::Parent = FieldIterator<T, fieldFSize>

Constructor & Destructor Documentation

◆ ForwardFieldIterator() [1/2]

template<typename T , uint_t fieldFSize>
walberla::field::ForwardFieldIterator< T, fieldFSize >::ForwardFieldIterator ( const FieldType field,
cell_idx_t  xBeg,
cell_idx_t  yBeg,
cell_idx_t  zBeg,
cell_idx_t  fBeg,
uint_t  xs,
uint_t  ys,
uint_t  zs,
uint_t  fs 
)
inlineexplicit

◆ ForwardFieldIterator() [2/2]

template<typename T , uint_t fieldFSize>
walberla::field::ForwardFieldIterator< T, fieldFSize >::ForwardFieldIterator ( )
inlineexplicit

Member Function Documentation

◆ incrInner()

template<typename T , uint_t fieldFSize>
void walberla::field::ForwardFieldIterator< T, fieldFSize >::incrInner ( )
inline

◆ incrOuter()

template<typename T , uint_t fs>
void walberla::field::ForwardFieldIterator< T, fs >::incrOuter
inline

Increments the second inner coordinate c2 Use if innermost loop is self written, which is slightly faster.

for( const_iterator i = field.begin(); i != field.end(); i.incrOuter() )
for (; i.testInner(); i.incrInner() )
{}
Instead of
\code
for(DoubleField::const_iterator i = field.begin(); i != field.end(); ++i) {
}

◆ operator++()

template<typename T , uint_t fs>
ForwardFieldIterator< T, fs > & walberla::field::ForwardFieldIterator< T, fs >::operator++
inline

Pre-increment operator.

Returns
Reference to the incremented pointer iterator.

◆ operator--()

template<typename T , uint_t fs>
ForwardFieldIterator< T, fs > & walberla::field::ForwardFieldIterator< T, fs >::operator--
inline

Pre-decrement operator.

Returns
Reference to the decremented pointer iterator.

◆ testInner()

template<typename T , uint_t fieldFSize>
bool walberla::field::ForwardFieldIterator< T, fieldFSize >::testInner ( ) const
inline

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