gslcpp
Modern-C++ Wrapper for GSL
|
Go to the documentation of this file.
16 template<
typename V>
class v_iterator {
19 using difference_type= std::ptrdiff_t;
26 template<
typename OV>
friend class v_iterator;
33 throw std::runtime_error(
"iterators for different vectors");
41 template<
bool is_const>
struct element;
46 template<>
struct element<
true> {
using type=
typename V::E
const; };
51 template<>
struct element<
false> {
using type=
typename V::E; };
55 using E=
typename element<std::is_const_v<V>>::type;
63 using iterator_category= std::random_access_iterator_tag;
89 v_iterator tmp= *
this;
104 v_iterator tmp= *
this;
134 friend v_iterator
operator+(v_iterator i, difference_type n) {
144 friend v_iterator
operator+(difference_type n, v_iterator i) {
153 friend v_iterator
operator-(v_iterator i, difference_type n) {
164 difference_type
operator-(v_iterator<I>
const &i)
const {
165 check_same_vector(i);
166 return off_ - i.off_;
174 template<
typename B>
bool operator==(v_iterator<B>
const &b)
const {
175 check_same_vector(b);
176 return off_ == b.off_;
184 template<
typename B>
bool operator!=(v_iterator<B>
const &b)
const {
185 check_same_vector(b);
186 return off_ != b.off_;
195 template<
typename B>
bool operator<(v_iterator<B>
const &b)
const {
196 check_same_vector(b);
197 return off_ < b.off_;
206 template<
typename B>
bool operator>(v_iterator<B>
const &b)
const {
207 check_same_vector(b);
208 return off_ > b.off_;
217 template<
typename B>
bool operator<=(v_iterator<B>
const &b)
const {
218 check_same_vector(b);
219 return off_ <= b.off_;
228 template<
typename B>
bool operator>=(v_iterator<B>
const &b)
const {
229 check_same_vector(b);
230 return off_ >= b.off_;
bool operator>=(v_iterator< B > const &b) const
Compare two iterators for ordering.
reference operator*() const
Dereference iterator.
friend v_iterator operator-(v_iterator i, difference_type n)
Produce new iterator at offset less than that of existing iterator.
difference_type operator-(v_iterator< I > const &i) const
Difference in offset between two iterators.
v_iterator operator++(int)
Increment offset of element pointed to.
V & vi_
Reference to instance of container.
void check_same_vector(v_iterator< B > const &b) const
Throw exception if each of two iterators point into different vector.
friend v_iterator operator+(v_iterator i, difference_type n)
Produce new iterator at offset greater than that of existing iterator.
reference operator[](difference_type i) const
Dereference element at offset from element pointed to by iterator.
difference_type off_
Current offset pointed to in container.
v_iterator & operator--()
Decrement offset of element pointed to.
bool operator<=(v_iterator< B > const &b) const
Compare two iterators for ordering.
bool operator>(v_iterator< B > const &b) const
Compare two iterators for ordering.
bool operator<(v_iterator< B > const &b) const
Compare two iterators for ordering.
v_iterator & operator-=(difference_type n)
For positive n, decrease, by n, offset of element pointed to.
v_iterator & operator++()
Increment offset of element pointed to.
bool operator==(v_iterator< B > const &b) const
Compare two iterators for equality.
v_iterator(V &vi, difference_type off)
Construct instance of iterator.
friend v_iterator operator+(difference_type n, v_iterator i)
Produce new iterator at offset greater than that of existing iterator.
v_iterator & operator+=(difference_type n)
For positive n, increase, by n, offset of element pointed to.
Namespace for C++-interface to GSL.
v_iterator operator--(int)
Decrement offset of element pointed to.
bool operator!=(v_iterator< B > const &b) const
Compare two iterators for inequality.