1 #ifndef SEQUENCE_COL_VIEW_ITERATOR_HPP__ 2 #define SEQUENCE_COL_VIEW_ITERATOR_HPP__ 16 static_assert(std::is_pointer<POINTER>::value,
17 "iterator must wrap a pointer type");
20 typename std::iterator_traits<POINTER>::difference_type;
22 using value_type =
typename std::iterator_traits<POINTER>::value_type;
24 using reference =
typename std::iterator_traits<POINTER>::reference;
29 typename std::iterator_traits<POINTER>::iterator_category;
46 : start{ data_ }, data{ data_ }, stride{ stride_ }, offset{
72 this->start = rhs.
start;
73 this->data = rhs.
data;
82 return (this->data + this->offset) <= (rhs.
data + rhs.
offset);
87 return (this->data + this->offset) < (rhs.
data + rhs.
offset);
92 return !(*
this <= rhs);
97 return !(*
this < rhs);
102 return !(*this < rhs) && !(*this > rhs);
107 return !(*
this == rhs);
111 template <
typename POINTER>
119 rv.offset += d * rv.
stride;
123 template <
typename POINTER>
133 template <
typename POINTER>
143 template <
typename POINTER>
151 rv.offset -= d * rv.
stride;
155 template <
typename POINTER>
165 template <
typename POINTER>
175 template <
typename POINTER>
186 template <
typename POINTER>
197 template <
typename POINTER>
205 throw std::invalid_argument(
"attempt to subtract " 206 "iterators from different " difference_type stride
Stride needed to increment/decrement.
col_view_iterator< POINTER > & operator++(col_view_iterator< POINTER > &i)
const reference operator*() const
Get value pointed to.
col_view_iterator< POINTER > operator-(col_view_iterator< POINTER > i, typename col_view_iterator< POINTER >::difference_type d)
The namespace in which this library resides.
difference_type offset
Offset w.r.to data.
POINTER data
Iterator data.
reference operator*()
Get value pointed to.
reference operator[](difference_type n)
Access a reference n elements away.
col_view_iterator< POINTER > & operator-=(col_view_iterator< POINTER > &i, typename col_view_iterator< POINTER >::difference_type d)
typename std::iterator_traits< POINTER >::value_type value_type
Value type.
col_view_iterator< POINTER > & operator+=(col_view_iterator< POINTER > &i, typename col_view_iterator< POINTER >::difference_type d)
col_view_iterator & operator=(const col_view_iterator &rhs)
Assignment operator.
Iterator for column views.
typename std::iterator_traits< POINTER >::difference_type difference_type
Difference type.
typename std::iterator_traits< POINTER >::reference reference
Reference type.
col_view_iterator(POINTER data_, difference_type stride_, difference_type offset_)
Constructor.
const reference operator[](difference_type n) const
Access a const reference n elements away.
typename std::iterator_traits< POINTER >::iterator_category iterator_category
Iterator category.
POINTER pointer
Pointer type.
col_view_iterator< POINTER > & operator--(col_view_iterator< POINTER > &i)
col_view_iterator< POINTER > operator+(col_view_iterator< POINTER > i, typename col_view_iterator< POINTER >::difference_type d)