ATLAS Offline Software
Loading...
Searching...
No Matches
CxxUtils::ArrayIterator< N > Class Template Reference

Iterator class for Array<N>. More...

#include <Array.h>

Collaboration diagram for CxxUtils::ArrayIterator< N >:

Classes

class  pointer
 Proxy to return from operator>. More...

Public Types

using iterator_category = std::random_access_iterator_tag
using value_type = const Array<N-1>
using difference_type = std::ptrdiff_t
using reference = value_type&

Public Member Functions

 ArrayIterator ()
 Default constructor.
 ArrayIterator (const Arrayrep *rep, unsigned int offs)
 Constructor from Arrayrep and offset.
bool operator== (const ArrayIterator &other) const
 Equality comparison.
bool operator!= (const ArrayIterator &other) const
 Inequality comparison.
bool operator< (const ArrayIterator &other) const
 Less-than comparison.
bool operator> (const ArrayIterator &other) const
 Greater-than comparison.
bool operator<= (const ArrayIterator &other) const
 Less-than-or-equal comparison.
bool operator>= (const ArrayIterator &other) const
 Greater-than-or-equal comparison.
value_type operator* () const
 Dereference the iterator.
pointer operator-> () const
 Dereference the iterator.
ArrayIterator< N > & operator++ ()
 Advance the iterator.
ArrayIterator< N > operator++ (int)
 Advance the iterator.
ArrayIterator< N > & operator-- ()
 Back up the iterator.
ArrayIterator< N > operator-- (int)
 Back up the iterator.
value_type operator[] (difference_type n) const
 Array indexing relative to the iterator.
ArrayIterator< N > & operator+= (difference_type n)
 Advance the iterator.
ArrayIterator< N > operator+ (difference_type n) const
 Return a new iterator pointing n steps ahead.
ArrayIterator< N > & operator-= (difference_type n)
 Back up the iterator.
ArrayIterator< N > operator- (difference_type n) const
 Return a new iterator pointing n steps behind.
difference_type operator- (const ArrayIterator &other) const
 Return the difference between two iterators.

Private Attributes

const Arrayrepm_rep
 The underlying array representation.
unsigned int m_offs
 Offset into the representation's data array of the first element referred to by this iterator.

Detailed Description

template<unsigned int N>
class CxxUtils::ArrayIterator< N >

Iterator class for Array<N>.

This serves as an iterator class for Array<N>, where N >= 2. It gives a Array<N-1> as value_type. Only const access is supported.

This class is almost, but not quite, a random access iterator. operator* and operator[] returns a value_type instead of a reference. And operator-> returns a proxy. (The issues here are similar to those encountered with std::vector<bool>.) But it should mostly work as you expect.

Definition at line 391 of file Control/CxxUtils/CxxUtils/Array.h.

Member Typedef Documentation

◆ difference_type

template<unsigned int N>
using CxxUtils::ArrayIterator< N >::difference_type = std::ptrdiff_t

Definition at line 396 of file Control/CxxUtils/CxxUtils/Array.h.

◆ iterator_category

template<unsigned int N>
using CxxUtils::ArrayIterator< N >::iterator_category = std::random_access_iterator_tag

Definition at line 394 of file Control/CxxUtils/CxxUtils/Array.h.

◆ reference

template<unsigned int N>
using CxxUtils::ArrayIterator< N >::reference = value_type&

Definition at line 397 of file Control/CxxUtils/CxxUtils/Array.h.

◆ value_type

template<unsigned int N>
using CxxUtils::ArrayIterator< N >::value_type = const Array<N-1>

Definition at line 395 of file Control/CxxUtils/CxxUtils/Array.h.

Constructor & Destructor Documentation

◆ ArrayIterator() [1/2]

template<unsigned int N>
CxxUtils::ArrayIterator< N >::ArrayIterator ( )

Default constructor.

Makes an invalid iterator.

◆ ArrayIterator() [2/2]

template<unsigned int N>
CxxUtils::ArrayIterator< N >::ArrayIterator ( const Arrayrep * rep,
unsigned int offs )

Constructor from Arrayrep and offset.

Parameters
repThe underlying array representation.
offsThe offset in the representation of the first element referenced by this iterator.

Member Function Documentation

◆ operator!=()

template<unsigned int N>
bool CxxUtils::ArrayIterator< N >::operator!= ( const ArrayIterator< N > & other) const

Inequality comparison.

Parameters
otherThe other object with which to compare.
Returns
True if the iterators are not equal.

◆ operator*()

template<unsigned int N>
value_type CxxUtils::ArrayIterator< N >::operator* ( ) const

Dereference the iterator.

Returns
The value that the iterator points to. Note that this method returns a value_type, not a reference. (Thus, this class does not quite conform to the iterator requirements.)

◆ operator+()

template<unsigned int N>
ArrayIterator< N > CxxUtils::ArrayIterator< N >::operator+ ( difference_type n) const

Return a new iterator pointing n steps ahead.

Parameters
nNumber of steps by which to advance.
Returns
The new iterator.

◆ operator++() [1/2]

template<unsigned int N>
ArrayIterator< N > & CxxUtils::ArrayIterator< N >::operator++ ( )

Advance the iterator.

Returns
This iterator.

◆ operator++() [2/2]

template<unsigned int N>
ArrayIterator< N > CxxUtils::ArrayIterator< N >::operator++ ( int )

Advance the iterator.

Returns
The iterator before being advanced.

◆ operator+=()

template<unsigned int N>
ArrayIterator< N > & CxxUtils::ArrayIterator< N >::operator+= ( difference_type n)

Advance the iterator.

Parameters
nNumber of steps by which to advance the iterator.
Returns
This iterator.

◆ operator-() [1/2]

template<unsigned int N>
difference_type CxxUtils::ArrayIterator< N >::operator- ( const ArrayIterator< N > & other) const

Return the difference between two iterators.

Parameters
otherThe other iterator for the comparison.
Returns
The number of elements difference between this iterator and other. Undefined if the two iterators do not point into the same array.

◆ operator-() [2/2]

template<unsigned int N>
ArrayIterator< N > CxxUtils::ArrayIterator< N >::operator- ( difference_type n) const

Return a new iterator pointing n steps behind.

Parameters
nNumber of steps by which to back up.
Returns
The new iterator.

◆ operator--() [1/2]

template<unsigned int N>
ArrayIterator< N > & CxxUtils::ArrayIterator< N >::operator-- ( )

Back up the iterator.

Returns
This iterator.

◆ operator--() [2/2]

template<unsigned int N>
ArrayIterator< N > CxxUtils::ArrayIterator< N >::operator-- ( int )

Back up the iterator.

Returns
The iterator before being backed up.

◆ operator-=()

template<unsigned int N>
ArrayIterator< N > & CxxUtils::ArrayIterator< N >::operator-= ( difference_type n)

Back up the iterator.

Parameters
nNumber of steps by which to advance the iterator.
Returns
This iterator.

◆ operator->()

template<unsigned int N>
pointer CxxUtils::ArrayIterator< N >::operator-> ( ) const

Dereference the iterator.

Returns
A proxy for the iterator element.

This method will return a proxy for the array, which you can then dereference. Note that if you get a C++ pointer from this, then it will be valid only until the proxy object gets destroyed.

◆ operator<()

template<unsigned int N>
bool CxxUtils::ArrayIterator< N >::operator< ( const ArrayIterator< N > & other) const

Less-than comparison.

Parameters
otherThe other object with which to compare.
Returns
True if this iterator is less than other. This will always return false for iterators over different arrays.

◆ operator<=()

template<unsigned int N>
bool CxxUtils::ArrayIterator< N >::operator<= ( const ArrayIterator< N > & other) const

Less-than-or-equal comparison.

Parameters
otherThe other object with which to compare.
Returns
True if this iterator is less than or equal to other. This will always return false for iterators over different arrays.

◆ operator==()

template<unsigned int N>
bool CxxUtils::ArrayIterator< N >::operator== ( const ArrayIterator< N > & other) const

Equality comparison.

Parameters
otherThe other object with which to compare.
Returns
True if the iterators are equal.

◆ operator>()

template<unsigned int N>
bool CxxUtils::ArrayIterator< N >::operator> ( const ArrayIterator< N > & other) const

Greater-than comparison.

Parameters
otherThe other object with which to compare.
Returns
True if this iterator is greater than other. This will always return false for iterators over different arrays.

◆ operator>=()

template<unsigned int N>
bool CxxUtils::ArrayIterator< N >::operator>= ( const ArrayIterator< N > & other) const

Greater-than-or-equal comparison.

Parameters
otherThe other object with which to compare.
Returns
True if this iterator is less than or equal to other. This will always return false for iterators over different arrays.

◆ operator[]()

template<unsigned int N>
value_type CxxUtils::ArrayIterator< N >::operator[] ( difference_type n) const

Array indexing relative to the iterator.

Parameters
nThe array index.
Returns
The array item at an offset of n from the current iterator position. Note that this method returns a value_type, not a reference. (Thus, this class does not quite conform to the iterator requirements.)

Member Data Documentation

◆ m_offs

template<unsigned int N>
unsigned int CxxUtils::ArrayIterator< N >::m_offs
private

Offset into the representation's data array of the first element referred to by this iterator.

Definition at line 630 of file Control/CxxUtils/CxxUtils/Array.h.

◆ m_rep

template<unsigned int N>
const Arrayrep* CxxUtils::ArrayIterator< N >::m_rep
private

The underlying array representation.

Definition at line 626 of file Control/CxxUtils/CxxUtils/Array.h.


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