Iterate an Array cursor through another Array. More...
#include <ArrayIter.h>
Public Member Functions | |
ArrayIterator (const Array< T > &arr, uInt byDim=1) | |
Step through array "arr" over the first byDim axes (using a cursor of dimensionality "byDim"). | |
ArrayIterator (const Array< T > &arr, const IPosition &axes, Bool axesAreCursor=True) | |
Step through an array using the given axes. | |
virtual | ~ArrayIterator () |
virtual void | next () |
Move the cursor to the next position. | |
virtual void | set (const IPosition &cursorPos) |
Set the cursor to the given position. | |
virtual void | reset () |
Reset the cursor to the beginning. | |
Array< T > & | array () |
Return the cursor. | |
virtual ArrayBase & | getArray () |
Get the array in the cursor. | |
Protected Attributes | |
Array< T > * | ap_p |
A pointer to the cursor. | |
Private Member Functions | |
void | init (const Array< T > &) |
helper function to centralize construction work | |
void | apSetPointer (Int stepDim) |
helper function to set the pointer to the new data position in ap after a step in the given dimension. | |
ArrayIterator (const ArrayIterator< T > &) | |
ArrayIterator< T > & | operator= (const ArrayIterator< T > &) |
Private Attributes | |
Array< T > | pOriginalArray_p |
IPosition | offset_p |
T * | dataPtr_p |
Iterate an Array cursor through another Array.
ArrayIterator steps an array section (the "cursor") through an array. The cursor "refers" to storage in the array, so that changing the values in the cursor changes values in the original array. Like with ArrayPositionIterator, the cursor presently only moves through the array from bottom to top in the obvious way; however one may of course iterate through a slice ("array section"). This class is derived from ArrayPositionIterator since it also has a position (the blc of the cursor) which moves through the array volume.
Tip: The origin of the cursor, i;e; the subarray that moves through the larger array, is always zero;
Array<Float> to, from; //... set to and from, check that they are conformant ArrayIterator toiter(to,1); ArrayIterator fromiter(from,1); while (! toiter.pastEnd() ) { toiter.array() = fromiter.array(); // copy vector by vector toiter.next(); fromiter.next(); }
Definition at line 72 of file ArrayIter.h.
casacore::ArrayIterator< T >::ArrayIterator | ( | const Array< T > & | arr, | |
uInt | byDim = 1 | |||
) | [explicit] |
Step through array "arr" over the first byDim axes (using a cursor of dimensionality "byDim").
casacore::ArrayIterator< T >::ArrayIterator | ( | const Array< T > & | arr, | |
const IPosition & | axes, | |||
Bool | axesAreCursor = True | |||
) |
Step through an array using the given axes.
The axes can be given in two ways:
E.g. when using iteration axes 2,0 for an array with shape [5,3,7], each iteration step returns a cursor (containing the data of axis 1). During the iteration axis 2 will vary most rapidly (as it was given first).
virtual casacore::ArrayIterator< T >::~ArrayIterator | ( | ) | [virtual] |
casacore::ArrayIterator< T >::ArrayIterator | ( | const ArrayIterator< T > & | ) | [private] |
void casacore::ArrayIterator< T >::apSetPointer | ( | Int | stepDim | ) | [private] |
helper function to set the pointer to the new data position in ap after a step in the given dimension.
-1 resets it to the beginning.
Array<T>& casacore::ArrayIterator< T >::array | ( | ) | [inline] |
Return the cursor.
(Perhaps we should have a fn() that returns a reference to the original array as well?)
Definition at line 118 of file ArrayIter.h.
References casacore::ArrayIterator< T >::ap_p.
virtual ArrayBase& casacore::ArrayIterator< T >::getArray | ( | ) | [virtual] |
Get the array in the cursor.
This is only implemented in the derived ArrayIterator class. By default it throws an exception.
Reimplemented from casacore::ArrayPositionIterator.
void casacore::ArrayIterator< T >::init | ( | const Array< T > & | ) | [private] |
helper function to centralize construction work
virtual void casacore::ArrayIterator< T >::next | ( | ) | [virtual] |
Move the cursor to the next position.
Reimplemented from casacore::ArrayPositionIterator.
ArrayIterator<T>& casacore::ArrayIterator< T >::operator= | ( | const ArrayIterator< T > & | ) | [private] |
Reimplemented in casacore::MatrixIterator< T >, and casacore::VectorIterator< T >.
virtual void casacore::ArrayIterator< T >::reset | ( | ) | [virtual] |
Reset the cursor to the beginning.
Reimplemented from casacore::ArrayPositionIterator.
virtual void casacore::ArrayIterator< T >::set | ( | const IPosition & | cursorPos | ) | [virtual] |
Set the cursor to the given position.
The position can only contain the iteration axes or it can be the full position.
In the first case the position must to be given in the order of the iteration axes as given in the constructor. In the latter case the position must be given in natural order (as given by function pos
and only the cursor axes are taken into account.
Reimplemented from casacore::ArrayPositionIterator.
Array<T>* casacore::ArrayIterator< T >::ap_p [protected] |
A pointer to the cursor.
Definition at line 125 of file ArrayIter.h.
Referenced by casacore::ArrayIterator< T >::array(), casacore::MatrixIterator< T >::matrix(), and casacore::VectorIterator< T >::vector().
T* casacore::ArrayIterator< T >::dataPtr_p [private] |
Definition at line 136 of file ArrayIter.h.
IPosition casacore::ArrayIterator< T >::offset_p [private] |
Definition at line 135 of file ArrayIter.h.
Array<T> casacore::ArrayIterator< T >::pOriginalArray_p [private] |
Definition at line 134 of file ArrayIter.h.