cisst-saw
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
vctVarStrideMatrixConstIterator< _elementType > Class Template Reference

#include <vctVarStrideMatrixIterator.h>

Inheritance diagram for vctVarStrideMatrixConstIterator< _elementType >:
vctVarStrideMatrixIterator< _elementType >

Public Types

typedef
vctVarStrideMatrixConstIterator
< _elementType > 
ThisType
 
typedef std::iterator
< std::random_access_iterator_tag,
_elementType > 
BaseType
 
typedef BaseType::iterator_category iterator_category
 

Public Member Functions

 VCT_CONTAINER_TRAITS_TYPEDEFS (_elementType)
 
 vctVarStrideMatrixConstIterator ()
 
 vctVarStrideMatrixConstIterator (value_type *dataPtr, stride_type columnStride, size_type numColumns, stride_type rowStride, size_type initialColumn=0)
 
 vctVarStrideMatrixConstIterator (const value_type *dataPtr, difference_type columnStride, size_type numColumns, stride_type rowStride, size_type initialColumn=0)
 
ThisTypeoperator++ ()
 
ThisType operator++ (int)
 
ThisTypeoperator-- ()
 
ThisType operator-- (int)
 
ThisTypeoperator+= (difference_type difference)
 
ThisTypeoperator-= (difference_type difference)
 
difference_type operator- (const ThisType &other) const
 
const value_type & operator[] (difference_type index) const
 
const value_type & operator* () const
 
bool operator< (const ThisType &other) const
 
bool operator<= (const ThisType &other) const
 
bool operator== (const ThisType &other) const
 
bool operator> (const ThisType &other) const
 
bool operator>= (const ThisType &other) const
 
bool operator!= (const ThisType &other) const
 

Protected Member Functions

void WrapToRight ()
 
void WrapToLeft ()
 

Protected Attributes

value_type * DataPtr
 
stride_type ColumnStride
 
difference_type NumColumns
 
stride_type RowStride
 
difference_type CurrentColumn
 

Detailed Description

template<class _elementType>
class vctVarStrideMatrixConstIterator< _elementType >

Parameters
_elementTypethe type of the element that the iterator refers to.
See Also
vctVarStrideMatrixIterator

Member Typedef Documentation

template<class _elementType>
typedef std::iterator<std::random_access_iterator_tag, _elementType> vctVarStrideMatrixConstIterator< _elementType >::BaseType

Base type for this iterator, i.e. std::iterator.

template<class _elementType>
typedef BaseType::iterator_category vctVarStrideMatrixConstIterator< _elementType >::iterator_category

Type (i.e. category) of iterator, i.e. std::random_access_iterator_tag.

template<class _elementType>
typedef vctVarStrideMatrixConstIterator<_elementType> vctVarStrideMatrixConstIterator< _elementType >::ThisType

The type of the iterator itself.

Constructor & Destructor Documentation

template<class _elementType>
vctVarStrideMatrixConstIterator< _elementType >::vctVarStrideMatrixConstIterator ( )
inline

Default constructor: create an uninitialized object.

template<class _elementType>
vctVarStrideMatrixConstIterator< _elementType >::vctVarStrideMatrixConstIterator ( value_type *  dataPtr,
stride_type  columnStride,
size_type  numColumns,
stride_type  rowStride,
size_type  initialColumn = 0 
)
inline

Constructor taking a non-const element pointer. Note that only read operations will be performed!

template<class _elementType>
vctVarStrideMatrixConstIterator< _elementType >::vctVarStrideMatrixConstIterator ( const value_type *  dataPtr,
difference_type  columnStride,
size_type  numColumns,
stride_type  rowStride,
size_type  initialColumn = 0 
)
inline

Constructor taking a const element pointer. We need it in order to deal with const containers being refered by this iterator. We have to perform const_cast to convert back to the stored non-const member pointer of this iterator. However, the non-const iterator class completely shadows the constructors of the const-iterator base class, and so we don't have to worry about creating a non-const iterator over a const container.

Member Function Documentation

template<class _elementType>
bool vctVarStrideMatrixConstIterator< _elementType >::operator!= ( const ThisType other) const
inline

Complementary operation to operator ==.

template<class _elementType>
const value_type& vctVarStrideMatrixConstIterator< _elementType >::operator* ( ) const
inline

Dereference (const).

template<class _elementType>
ThisType& vctVarStrideMatrixConstIterator< _elementType >::operator++ ( )
inline

Pre-increment.

template<class _elementType>
ThisType vctVarStrideMatrixConstIterator< _elementType >::operator++ ( int  )
inline

Post-increment.

template<class _elementType>
ThisType& vctVarStrideMatrixConstIterator< _elementType >::operator+= ( difference_type  difference)
inline

Increment by offset.

Parameters
differenceoffset to increment by
template<class _elementType>
difference_type vctVarStrideMatrixConstIterator< _elementType >::operator- ( const ThisType other) const
inline

Subtraction between iterators returns the number of increments needed for the second operand to reach the first operand, if it is reachable.

The number of increments is found by the following equations: DataPtr - (difference / NumColumns) * RowStride + (difference % NumColumns) * ColumnStride == other.DataPtr DataPtr - other.DataPtr == (difference / NumColumns) * RowStride + (difference % NumColumns) * ColumnStride

if (RowStride >= NumColumns * ColumnStride) { (DataPtr - other.DataPtr) / RowStride == row_diff == (difference / NumColumns) DataPtr - other.DataPtr - row_diff * RowStride == (difference % NumColumns) * ColumnStride (DataPtr - other.DataPtr - row_diff * RowStride) / ColumnStride == col_diff == (difference % NumColumns) difference == row_diff * NumColumns + col_diff } otherwise switch the roles of rows and columns.

Note
this operation assumes reachability and does not test for it.
template<class _elementType>
ThisType& vctVarStrideMatrixConstIterator< _elementType >::operator-- ( )
inline

Pre-decrement.

template<class _elementType>
ThisType vctVarStrideMatrixConstIterator< _elementType >::operator-- ( int  )
inline

Post-decrement.

template<class _elementType>
ThisType& vctVarStrideMatrixConstIterator< _elementType >::operator-= ( difference_type  difference)
inline

Decrement by offset.

Parameters
differenceoffset to decrement by
template<class _elementType>
bool vctVarStrideMatrixConstIterator< _elementType >::operator< ( const ThisType other) const
inline

Order relation between iterators, required by STL.

Note
The STL manual states that "if j is reachable from i then i<j". This does not imply the converse: "if i<j then j is reachable from i". In the case here, the converse does not hold.
template<class _elementType>
bool vctVarStrideMatrixConstIterator< _elementType >::operator<= ( const ThisType other) const
inline
template<class _elementType>
bool vctVarStrideMatrixConstIterator< _elementType >::operator== ( const ThisType other) const
inline

Equality of iterators, required by STL.

template<class _elementType>
bool vctVarStrideMatrixConstIterator< _elementType >::operator> ( const ThisType other) const
inline

Complementary operation to operator <.

template<class _elementType>
bool vctVarStrideMatrixConstIterator< _elementType >::operator>= ( const ThisType other) const
inline
template<class _elementType>
const value_type& vctVarStrideMatrixConstIterator< _elementType >::operator[] ( difference_type  index) const
inline

Random access (return const reference).

template<class _elementType>
vctVarStrideMatrixConstIterator< _elementType >::VCT_CONTAINER_TRAITS_TYPEDEFS ( _elementType  )
template<class _elementType>
void vctVarStrideMatrixConstIterator< _elementType >::WrapToLeft ( )
inlineprotected

An auxiliary method to wrap the column index of the iterator. If the current column is negative, move one row up, and wrap to the corresponding column starting from the right

template<class _elementType>
void vctVarStrideMatrixConstIterator< _elementType >::WrapToRight ( )
inlineprotected

An auxiliary method to wrap the column index of the iterator. If the current column exceeds the number of columns in the matrix, more one row down and wrap to the corresponding column starting from the left

Member Data Documentation

template<class _elementType>
stride_type vctVarStrideMatrixConstIterator< _elementType >::ColumnStride
protected
template<class _elementType>
difference_type vctVarStrideMatrixConstIterator< _elementType >::CurrentColumn
protected
template<class _elementType>
value_type* vctVarStrideMatrixConstIterator< _elementType >::DataPtr
protected

The data member points to the object being refered by this iterator. It is not declared const, so we will be able to use it in the non-const iterator class. But all the methods in vctVarStrideMatrixConstIterator are declared const to protect the data from writing.

template<class _elementType>
difference_type vctVarStrideMatrixConstIterator< _elementType >::NumColumns
protected
template<class _elementType>
stride_type vctVarStrideMatrixConstIterator< _elementType >::RowStride
protected

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