ltl::MArrayIter< T, N > Class Template Reference
[MArray iterators]

Inherits ltl::MArrayIterConst< T, N >< T, N >.

List of all members.

Public Types

Public Member Functions

Protected Attributes


Detailed Description

template<class T, int N>
class ltl::MArrayIter< T, N >

Non-const iterator object for ltl::MArrays. Conforms to std::forward_iterator. The non-const version is implemented below by inheriting from ltl::ConstIterator.

Member Typedef Documentation

template<class T, int N>
typedef std::forward_iterator_tag ltl::MArrayIterConst< T, N >::iterator_category [inherited]

std::iterator typedefs

template<class T, int N>
typedef int ltl::MArrayIterConst< T, N >::difference_type [inherited]

template<class T, int N>
typedef MArray<T,N>::value_type ltl::MArrayIterConst< T, N >::value_type [inherited]

template<class T, int N>
typedef MArray<T,N>::const_reference ltl::MArrayIterConst< T, N >::const_reference [inherited]

template<class T, int N>
typedef MArray<T,N>::const_pointer ltl::MArrayIterConst< T, N >::const_pointer [inherited]

template<class T, int N>
typedef MArray<T,N>::reference ltl::MArrayIterConst< T, N >::reference [inherited]

template<class T, int N>
typedef MArray<T,N>::pointer ltl::MArrayIterConst< T, N >::pointer [inherited]


Member Enumeration Documentation

template<class T, int N>
anonymous enum [inherited]

These define constants that are used by the expression template engine.

Enumerator:
dims 

template<class T, int N>
anonymous enum [inherited]

Enumerator:
numIndexIter 

template<class T, int N>
anonymous enum [inherited]

Enumerator:
isVectorizable 


Constructor & Destructor Documentation

template<class T, int N>
ltl::MArrayIter< T, N >::MArrayIter ( MArray< T, N > &  array  )  [inline]

template<class T, int N>
ltl::MArrayIter< T, N >::MArrayIter ( MArray< T, N > &  array,
const _iter_end_tag &  E 
) [inline]

template<class T, int N>
ltl::MArrayIter< T, N >::MArrayIter ( const MArrayIter< T, N > &  other  )  [inline]


Member Function Documentation

template<class T, int N>
MArrayIter<T,N>& ltl::MArrayIter< T, N >::operator++ (  )  [inline]

Move the iterator to the next object.

Reimplemented from ltl::MArrayIterConst< T, N >.

template<class T, int N>
T& ltl::MArrayIter< T, N >::operator * (  )  [inline]

Dereference the iterator object. Return the element pointed to.

template<class T, int N>
void ltl::MArrayIterConst< T, N >::reset (  )  [inline, inherited]

Reset the iterator back to the first element.

Reset the iterator (back to first element).

template<class T, int N>
value_type ltl::MArrayIterConst< T, N >::operator * (  )  const [inline, inherited]

Dereference the iterator object. Return the element pointed to.

template<class T, int N>
void ltl::MArrayIterConst< T, N >::operator++ ( int   )  [inline, inherited]

Postfix operator++().

template<class T, int N>
void ltl::MArrayIterConst< T, N >::advance (  )  [inline, inherited]

Provide separate versions of advance() for incrementing the innermost.

When evaluating an expression involving more than one iterator all terms MUST have the same geometry, the loop structures are identical. It's therefore sufficient to check the end of loop condition and the end of one dimension on one of the iterators ... All others are then 'remote controlled' via these methods methods. See implementation of evaluation methods in ltl/marray/eval.h. Unconditionally increase the data pointer by one innermost stride.

template<class T, int N>
void ltl::MArrayIterConst< T, N >::advanceN ( int  n  )  [inline, inherited]

Unconditionally increase the data pointer by N innermost strides.

template<class T, int N>
void ltl::MArrayIterConst< T, N >::advanceN ( int  n,
int  dim 
) [inline, inherited]

Unconditionally increase the data pointer by N along dimension dim (used for partial reductions).

template<class T, int N>
void ltl::MArrayIterConst< T, N >::advanceWithStride1 (  )  [inline, inherited]

Unconditionally increase the data pointer by one.

template<class T, int N>
bool ltl::MArrayIterConst< T, N >::needAdvanceDim (  )  const [inline, inherited]

Check if we have reached the end of the innermost dimension.

template<class T, int N>
void ltl::MArrayIterConst< T, N >::advanceDim (  )  [inline, inherited]

Advance the iterator past the end of one "line" (the end of the innermost dimension).

Reset stacks after we've hit the end of a dimension.

template<class T, int N>
void ltl::MArrayIterConst< T, N >::advanceDim ( const int  cutDim  )  [inline, inherited]

Advance the iterator past the end of one "line", ignoring the dimension cutDim (used in partial reductions).

Reset stacks after we've hit the end of a dimension. Ignore dimension cutDim used in partial reductions.

template<class T, int N>
value_type ltl::MArrayIterConst< T, N >::readWithoutStride ( const int  i  )  const [inline, inherited]

Read the data value at the current location + i (optimized for stride 1).

These methods are for implementing loop unrolling and vectorization for the efficient evaluation of expression templates.

template<class T, int N>
value_type ltl::MArrayIterConst< T, N >::readWithStride ( const int  i  )  const [inline, inherited]

Read the current data value at the current location + i*stride.

template<class T, int N>
value_type ltl::MArrayIterConst< T, N >::readWithStride ( const int  i,
const int  dim 
) const [inline, inherited]

Read the data value at position i along dimension dim (used in partial reductions).

template<class T, int N>
bool ltl::MArrayIterConst< T, N >::operator== ( const MArrayIterConst< T, N > &  other  )  const [inline, inherited]

true if iterators share the same data pointer

template<class T, int N>
bool ltl::MArrayIterConst< T, N >::operator!= ( const MArrayIterConst< T, N > &  other  )  const [inline, inherited]

true if iterators do not share the same data pointer

template<class T, int N>
bool ltl::MArrayIterConst< T, N >::done (  )  const [inline, inherited]

True if we point past the end, i.e. we are equal to the end iterator.

template<class T, int N>
bool ltl::MArrayIterConst< T, N >::isConformable ( const Shape< N > &  other  )  const [inline, inherited]

true if we have the same array geometry as that of other,

template<class T, int N>
void ltl::MArrayIterConst< T, N >::printRanges (  )  const [inline, inherited]

Pretty print the geometry.

template<class T, int N>
const Shape<N>* ltl::MArrayIterConst< T, N >::shape (  )  const [inline, inherited]

Return our shape.

template<class T, int N>
bool ltl::MArrayIterConst< T, N >::isStorageContiguous (  )  const [inline, inherited]

true if the memory we are pointing to has contiguous memory layout.

template<class T, int N>
bool ltl::MArrayIterConst< T, N >::isStride1 (  )  const [inline, inherited]

true if our innermost stride is 1

template<class T, int N>
value_type* ltl::MArrayIterConst< T, N >::data (  )  const [inline, inherited]

Return the current data pointer.


Member Data Documentation

template<class T, int N>
value_type* __restrict__ ltl::MArrayIterConst< T, N >::data_ [protected, inherited]

template<class T, int N>
value_type* __restrict__ ltl::MArrayIterConst< T, N >::first_ [protected, inherited]

template<class T, int N>
value_type* ltl::MArrayIterConst< T, N >::stack_[N] [protected, inherited]

template<class T, int N>
value_type * ltl::MArrayIterConst< T, N >::last_[N] [protected, inherited]

template<class T, int N>
int ltl::MArrayIterConst< T, N >::strides_[N] [protected, inherited]

template<class T, int N>
int ltl::MArrayIterConst< T, N >::length_[N] [protected, inherited]

template<class T, int N>
const int ltl::MArrayIterConst< T, N >::stride_ [protected, inherited]

template<class T, int N>
const Shape<N>* ltl::MArrayIterConst< T, N >::shape_ [protected, inherited]


Generated on Wed Mar 11 17:44:36 2009 for LTL by  doxygen 1.5.3