gslcpp
Modern-C++ Wrapper for GSL
Classes | Public Types | Public Member Functions | Private Types | Private Member Functions | Private Attributes | Friends | List of all members
gsl::v_iterator< V > Class Template Reference

Iterator for v_iface. More...

#include <v-iterator.hpp>

Classes

struct  element
 Generic declaration for struct that gives type of vector's element. More...
 
struct  element< false >
 Specialization for non-constant type of element for vector. More...
 
struct  element< true >
 Specialization for constant type of element of vector. More...
 

Public Types

using difference_type = std::ptrdiff_t
 Type of difference of two iterators.
 
using pointer = E *
 Type of pointer to element in container.
 
using value_type = E
 Type of element in container.
 
using reference = E &
 Type of reference to element in container.
 
using iterator_category = std::random_access_iterator_tag
 Indicate, to standard library, that iterator is random-access.
 

Public Member Functions

 v_iterator (V &vi, difference_type off)
 Construct instance of iterator. More...
 
reference operator* () const
 Dereference iterator. More...
 
reference operator[] (difference_type i) const
 Dereference element at offset from element pointed to by iterator. More...
 
v_iteratoroperator++ ()
 Increment offset of element pointed to. More...
 
v_iterator operator++ (int)
 Increment offset of element pointed to. More...
 
v_iteratoroperator-- ()
 Decrement offset of element pointed to. More...
 
v_iterator operator-- (int)
 Decrement offset of element pointed to. More...
 
v_iteratoroperator+= (difference_type n)
 For positive n, increase, by n, offset of element pointed to. More...
 
v_iteratoroperator-= (difference_type n)
 For positive n, decrease, by n, offset of element pointed to. More...
 
template<typename I >
difference_type operator- (v_iterator< I > const &i) const
 Difference in offset between two iterators. More...
 
template<typename B >
bool operator== (v_iterator< B > const &b) const
 Compare two iterators for equality. More...
 
template<typename B >
bool operator!= (v_iterator< B > const &b) const
 Compare two iterators for inequality. More...
 
template<typename B >
bool operator< (v_iterator< B > const &b) const
 Compare two iterators for ordering. More...
 
template<typename B >
bool operator> (v_iterator< B > const &b) const
 Compare two iterators for ordering. More...
 
template<typename B >
bool operator<= (v_iterator< B > const &b) const
 Compare two iterators for ordering. More...
 
template<typename B >
bool operator>= (v_iterator< B > const &b) const
 Compare two iterators for ordering. More...
 

Private Types

using E = typename element< std::is_const_v< V > >::type
 Type of element for vector. More...
 

Private Member Functions

template<typename B >
void check_same_vector (v_iterator< B > const &b) const
 Throw exception if each of two iterators point into different vector. More...
 

Private Attributes

V & vi_
 Reference to instance of container.
 
difference_type off_
 Current offset pointed to in container.
 

Friends

v_iterator operator+ (v_iterator i, difference_type n)
 Produce new iterator at offset greater than that of existing iterator. More...
 
v_iterator operator+ (difference_type n, v_iterator i)
 Produce new iterator at offset greater than that of existing iterator. More...
 
v_iterator operator- (v_iterator i, difference_type n)
 Produce new iterator at offset less than that of existing iterator. More...
 

Detailed Description

template<typename V>
class gsl::v_iterator< V >

Iterator for v_iface.

There is no operator-> because element is always of type double. Even if vector actually have non-const elements, const vector is treated as having const elements.

Template Parameters
VEither v_iface or v_iface const.

Definition at line 16 of file v-iterator.hpp.


Class Documentation

◆ gsl::v_iterator::element

struct gsl::v_iterator::element

template<typename V>
template<bool is_const>
struct gsl::v_iterator< V >::element< is_const >

Generic declaration for struct that gives type of vector's element.

Even if vector actually have non-const elements, const vector is treated as having const elements.

Template Parameters
is_constTrue for constant-type element.

Definition at line 41 of file v-iterator.hpp.

◆ gsl::v_iterator::element< false >

struct gsl::v_iterator::element< false >

template<typename V>
struct gsl::v_iterator< V >::element< false >

Specialization for non-constant type of element for vector.

Even if vector actually have non-const elements, const vector is treated as having const elements.

Definition at line 51 of file v-iterator.hpp.

Class Members
typedef typename E type

◆ gsl::v_iterator::element< true >

struct gsl::v_iterator::element< true >

template<typename V>
struct gsl::v_iterator< V >::element< true >

Specialization for constant type of element of vector.

Even if vector actually have non-const elements, const vector is treated as having const elements.

Definition at line 46 of file v-iterator.hpp.

Class Members
typedef typename E const type

Member Typedef Documentation

◆ E

template<typename V >
using gsl::v_iterator< V >::E = typename element<std::is_const_v<V> >::type
private

Type of element for vector.

Even if vector actually have non-const elements, const vector is treated as having const elements.

Definition at line 55 of file v-iterator.hpp.

Constructor & Destructor Documentation

◆ v_iterator()

template<typename V >
gsl::v_iterator< V >::v_iterator ( V &  vi,
difference_type  off 
)
inline

Construct instance of iterator.

Parameters
viReference to container of element pointed to.
offOffset of element pointed to in container.

Definition at line 68 of file v-iterator.hpp.

68 : vi_(vi), off_(off) {}

Member Function Documentation

◆ check_same_vector()

template<typename V >
template<typename B >
void gsl::v_iterator< V >::check_same_vector ( v_iterator< B > const &  b) const
inlineprivate

Throw exception if each of two iterators point into different vector.

Template Parameters
BType of vector for second iterator.
Parameters
bSecond iterator.

Definition at line 31 of file v-iterator.hpp.

31  {
32  if(&vi_ != &b.vi_) {
33  throw std::runtime_error("iterators for different vectors");
34  }
35  }

◆ operator!=()

template<typename V >
template<typename B >
bool gsl::v_iterator< V >::operator!= ( v_iterator< B > const &  b) const
inline

Compare two iterators for inequality.

Throw runtime_error if iterators do not point into same vector.

Template Parameters
BType of vector for second iterator.
Parameters
bSecond iterator.
Returns
True only if this and second do not point to same element.

Definition at line 184 of file v-iterator.hpp.

184  {
186  return off_ != b.off_;
187  }

◆ operator*()

template<typename V >
reference gsl::v_iterator< V >::operator* ( ) const
inline

Dereference iterator.

Returns
Reference to element pointed to by iterator.

Definition at line 72 of file v-iterator.hpp.

72 { return vi_[off_]; }

◆ operator++() [1/2]

template<typename V >
v_iterator& gsl::v_iterator< V >::operator++ ( )
inline

Increment offset of element pointed to.

Returns
Reference to this instance after increment of offset.

Definition at line 81 of file v-iterator.hpp.

81  {
82  ++off_;
83  return *this;
84  }

◆ operator++() [2/2]

template<typename V >
v_iterator gsl::v_iterator< V >::operator++ ( int  )
inline

Increment offset of element pointed to.

Returns
Copy of this instance made before increment of offset.

Definition at line 88 of file v-iterator.hpp.

88  {
89  v_iterator tmp= *this;
90  ++(*this); // Call prefix-increment!
91  return tmp;
92  }

◆ operator+=()

template<typename V >
v_iterator& gsl::v_iterator< V >::operator+= ( difference_type  n)
inline

For positive n, increase, by n, offset of element pointed to.

This is like fast forward in place for an iterator. Do nothing when n == 0. Actually decrease offset when n < 0.

Parameters
nNumber by which to increase offset.
Returns
Reference to this instance after increase of offset.

Definition at line 114 of file v-iterator.hpp.

114  {
115  off_+= n;
116  return *this;
117  }

◆ operator-()

template<typename V >
template<typename I >
difference_type gsl::v_iterator< V >::operator- ( v_iterator< I > const &  i) const
inline

Difference in offset between two iterators.

Throw runtime_error if iterators do not point into same vector.

Template Parameters
IType of vector for iterator with offset to subtract.
Parameters
iIterator with offset to subtract.
Returns
Difference between offset of this iterator and offset of i.

Definition at line 164 of file v-iterator.hpp.

164  {
166  return off_ - i.off_;
167  }

◆ operator--() [1/2]

template<typename V >
v_iterator& gsl::v_iterator< V >::operator-- ( )
inline

Decrement offset of element pointed to.

Returns
Reference to this instance after decrement of offset.

Definition at line 96 of file v-iterator.hpp.

96  {
97  --off_;
98  return *this;
99  }

◆ operator--() [2/2]

template<typename V >
v_iterator gsl::v_iterator< V >::operator-- ( int  )
inline

Decrement offset of element pointed to.

Returns
Copy of this instance made before decrement of offset.

Definition at line 103 of file v-iterator.hpp.

103  {
104  v_iterator tmp= *this;
105  --(*this); // Call prefix-decrement!
106  return tmp;
107  }

◆ operator-=()

template<typename V >
v_iterator& gsl::v_iterator< V >::operator-= ( difference_type  n)
inline

For positive n, decrease, by n, offset of element pointed to.

This is like fast reverse in place for an iterator. Do nothing when n == 0. Actually increase offset when n < 0.

Parameters
nNumber by which to decrease offset.
Returns
Reference to this instance after decrease of offset.

Definition at line 124 of file v-iterator.hpp.

124  {
125  off_-= n;
126  return *this;
127  }

◆ operator<()

template<typename V >
template<typename B >
bool gsl::v_iterator< V >::operator< ( v_iterator< B > const &  b) const
inline

Compare two iterators for ordering.

Throw runtime_error if iterators do not point into same vector.

Template Parameters
BType of vector for second iterator.
Parameters
bSecond iterator.
Returns
True only if this iterator point to element earlier in vector than element pointed to by second iterator.

Definition at line 195 of file v-iterator.hpp.

195  {
197  return off_ < b.off_;
198  }

◆ operator<=()

template<typename V >
template<typename B >
bool gsl::v_iterator< V >::operator<= ( v_iterator< B > const &  b) const
inline

Compare two iterators for ordering.

Throw runtime_error if iterators do not point into same vector.

Template Parameters
BType of vector for second iterator.
Parameters
bSecond iterator.
Returns
True only if this iterator point to element either same as or earlier in vector than element pointed to by second iterator.

Definition at line 217 of file v-iterator.hpp.

217  {
219  return off_ <= b.off_;
220  }

◆ operator==()

template<typename V >
template<typename B >
bool gsl::v_iterator< V >::operator== ( v_iterator< B > const &  b) const
inline

Compare two iterators for equality.

Throw runtime_error if iterators do not point into same vector.

Template Parameters
BType of vector for second iterator.
Parameters
bSecond iterator.
Returns
True only if this and second iterator point to same element.

Definition at line 174 of file v-iterator.hpp.

174  {
176  return off_ == b.off_;
177  }

◆ operator>()

template<typename V >
template<typename B >
bool gsl::v_iterator< V >::operator> ( v_iterator< B > const &  b) const
inline

Compare two iterators for ordering.

Throw runtime_error if iterators do not point into same vector.

Template Parameters
BType of vector for second iterator.
Parameters
bSecond iterator.
Returns
True only if this iterator point to element later in vector than element pointed to by second iterator.

Definition at line 206 of file v-iterator.hpp.

206  {
208  return off_ > b.off_;
209  }

◆ operator>=()

template<typename V >
template<typename B >
bool gsl::v_iterator< V >::operator>= ( v_iterator< B > const &  b) const
inline

Compare two iterators for ordering.

Throw runtime_error if iterators do not point into same vector.

Template Parameters
BType of vector for second iterator.
Parameters
bSecond iterator.
Returns
True only if this iterator point to element either same as or later in vector than element pointed to by second iterator.

Definition at line 228 of file v-iterator.hpp.

228  {
230  return off_ >= b.off_;
231  }

◆ operator[]()

template<typename V >
reference gsl::v_iterator< V >::operator[] ( difference_type  i) const
inline

Dereference element at offset from element pointed to by iterator.

Parameters
iOffset from element pointed to by iterator.
Returns
Reference to element at offset i from current element.

Definition at line 77 of file v-iterator.hpp.

77 { return vi_[off_ + i]; }

Friends And Related Function Documentation

◆ operator+ [1/2]

template<typename V >
v_iterator operator+ ( difference_type  n,
v_iterator< V >  i 
)
friend

Produce new iterator at offset greater than that of existing iterator.

This is like fast forward for an iterator.

Parameters
nOffset.
iIterator.
Returns
Iterator whose internal offset is n more than that of i.

Definition at line 144 of file v-iterator.hpp.

144  {
145  return i + n;
146  }

◆ operator+ [2/2]

template<typename V >
v_iterator operator+ ( v_iterator< V >  i,
difference_type  n 
)
friend

Produce new iterator at offset greater than that of existing iterator.

This is like fast forward for an iterator.

Parameters
iIterator.
nOffset.
Returns
Iterator whose internal offset is n more than that of i.

Definition at line 134 of file v-iterator.hpp.

134  {
135  i+= n;
136  return i;
137  }

◆ operator-

template<typename V >
v_iterator operator- ( v_iterator< V >  i,
difference_type  n 
)
friend

Produce new iterator at offset less than that of existing iterator.

This is like fast reverse for an iterator.

Parameters
iIterator.
nOffset.
Returns
Iterator whose internal offset is n less than that of i.

Definition at line 153 of file v-iterator.hpp.

153  {
154  i-= n;
155  return i;
156  }

The documentation for this class was generated from the following file:
gsl::v_iterator::vi_
V & vi_
Reference to instance of container.
Definition: v-iterator.hpp:22
gsl::v_iterator::check_same_vector
void check_same_vector(v_iterator< B > const &b) const
Throw exception if each of two iterators point into different vector.
Definition: v-iterator.hpp:31
gsl::v_iterator::off_
difference_type off_
Current offset pointed to in container.
Definition: v-iterator.hpp:23