24 #include <boost/assert.hpp> 30 template<
typename Type,
typename DerivedType>
35 template<
typename Type,
typename DerivedType>
41 template<
typename Type,
typename DerivedType>
44 ,_offset(copy._offset)
49 template<
typename Type,
typename DerivedType>
52 std::size_t slow_offset
55 this->_data = &data_ptr;
56 this->_raw = data_ptr.data();
57 this->_offset = slow_offset*data_ptr.fast_axis_length();
60 template<
typename Type,
typename DerivedType>
62 const DataSequence2D<Cpu,
typename std::remove_cv<Type>::type> &data_ptr,
63 std::size_t slow_offset
66 this->_data = &data_ptr;
67 this->_raw = data_ptr.data();
68 this->_offset = slow_offset*data_ptr.fast_axis_length();
73 template<
typename Type,
typename DerivedType>
75 BOOST_ASSERT_MSG(this->_raw !=
nullptr,
"Cannot dereference iterator over null DataSequence2D");
76 BOOST_ASSERT_MSG(this->_offset < this->_data->fast_axis_length()*this->_data->slow_axis_length(),
"Cannot dereference post-end iterator");
77 return this->_raw+this->_offset;
80 template<
typename Type,
typename DerivedType>
82 BOOST_ASSERT_MSG(this->_raw !=
nullptr,
"Cannot dereference iterator over null DataSequence2D");
83 BOOST_ASSERT_MSG(this->_offset < this->_data->fast_axis_length()*this->_data->slow_axis_length(),
"Cannot dereference post-end iterator");
84 return *(this->_raw+this->_offset);
87 template<
typename Type,
typename DerivedType>
90 return static_cast<DerivedType&
>(*this);
94 template<
typename Type,
typename DerivedType>
96 DerivedType r(static_cast<DerivedType const&>(*
this));
101 template<
typename Type,
typename DerivedType>
107 template<
typename Type,
typename DerivedType>
109 DerivedType r(static_cast<DerivedType const&>(*
this));
114 template<
typename Type,
typename DerivedType>
116 this->_offset += off;
117 return static_cast<DerivedType&
>(*this);
120 template<
typename Type,
typename DerivedType>
122 this->_offset -= off;
123 return static_cast<DerivedType&
>(*this);
126 template<
typename Type,
typename DerivedType>
129 DerivedType r(static_cast<DerivedType const&>(*
this));
134 template<
typename Type,
typename DerivedType>
137 DerivedType r(static_cast<DerivedType const&>(*
this));
142 template<
typename Type,
typename DerivedType>
145 return this->_offset - right._offset;
148 template<
typename Type,
typename DerivedType>
151 return this->_offset < right._offset;
154 template<
typename Type,
typename DerivedType>
157 return this->_offset > right._offset;
160 template<
typename Type,
typename DerivedType>
163 return this->_offset <= right._offset;
166 template<
typename Type,
typename DerivedType>
168 return (this->_data==right._data) && (this->_offset >= right._offset);
171 template<
typename Type,
typename DerivedType>
173 return *((*this)+off);
176 template<
typename Type,
typename DerivedType>
179 return (it._data == _data) && (it._offset == _offset);
182 template<
typename Type,
typename DerivedType>
185 return (it._data == _data) && (it._offset != _offset);
188 template<
typename Type,
typename DerivedType>
190 return it1.operator==(it2);
193 template<
typename Type,
typename DerivedType>
195 return it1.operator!=(it2);
Iterator over DataSequence2D types, over "fast" axis. CPU specific type.
Some limits and constants for FLDO.
A 2-dimensional sequencial data of type T.
~DataSequence2DFastIteratorBase()
Destroy the iterator.
DataSequence2DFastIteratorBase()
default constructor. Required by random_access_iterator_tag