20 #ifndef LUNCHBOX_INDEXITERATOR_H
21 #define LUNCHBOX_INDEXITERATOR_H
39 :
public std::iterator< std::random_access_iterator_tag, T >
44 : container_( container ), i_(i) {}
48 : container_( from.container_ ), i_( from.i_ ) {}
51 template<
class U,
class V,
class W >
53 : container_( from.container_ ), i_( from.i_ ) {}
59 container_ = rhs.container_;
61 return *
static_cast< S*
>( this );
65 template<
class U,
class W >
68 container_ = rhs.container_;
70 return *
static_cast< S*
>( this );
87 {
return S( container_, i_+n ); }
91 { i_ += n;
return *
static_cast< S*
>( this ); }
95 {
return S( container_, i_-n ); }
99 { i_ -= n;
return *
static_cast< S*
>( this ); }
102 ssize_t
operator- (
const S& n )
const {
return i_ - n.i_; }
106 {
return container_ == rhs.container_ && i_ == rhs.i_; }
110 {
return container_ != rhs.container_ || i_ != rhs.i_; }
114 {
return container_ <= rhs.container_ && i_ < rhs.i_; }
118 {
return container_ >= rhs.container_ && i_ > rhs.i_; }
125 {
return container_ <= rhs.container_ && i_ <= rhs.i_; }
132 {
return container_ >= rhs.container_ && i_ >= rhs.i_; }
150 #endif // LUNCHBOX_INDEXITERATOR_H
IndexIterator(C *container, const size_t i)
Construct an iterator for a given container and position.
Counter-based, as opposed to pointer-based, iterator for any container.
bool operator==(const S &rhs) const
S operator-(const size_t &n) const
Decrement the iterator position by a given amount.
bool operator>(const S &rhs) const
bool operator>=(const S &rhs) const
size_t getPosition() const
S & operator=(const IndexIterator &rhs)
Assign the container and position from another iterator.
bool operator<=(const S &rhs) const
IndexIterator(const S &from)
Copy-construct an iterator.
S & operator++()
Increment the iterator position.
S & operator+=(const size_t &n)
Increment the iterator position by a given amount.
bool operator<(const S &rhs) const
S & operator-=(const size_t &n)
Decrement the iterator position by a given amount.
S & operator--()
Decrement the iterator position.
bool operator!=(const S &rhs) const
S operator+(const size_t &n) const
Increment the iterator position by a given amount.
IndexIterator(const IndexIterator< U, V, W > &from)
Copy-construct an iterator.