36 #ifndef VIGRA_NAVIGATOR_HXX
37 #define VIGRA_NAVIGATOR_HXX
94 template <
class MULTI_ITERATOR,
unsigned int N>
103 enum { level = N-1 };
107 typedef typename MULTI_ITERATOR::multi_difference_type
shape_type;
111 typedef typename MULTI_ITERATOR::iterator
iterator;
121 if(inner_dimension != level)
122 end_.template dim<level>() += shape[level];
132 ++i_.template dim<level>();
134 base_type::reset(i_);
149 return this->inner_dimension_ == level ?
158 return this->inner_dimension_ == level ?
164 void reset(MULTI_ITERATOR
const & i)
167 if(this->inner_dimension_ != level)
168 end_.template dim<level>() += this->shape_[level];
172 MULTI_ITERATOR i_, end_;
175 template <
class MULTI_ITERATOR>
176 class MultiArrayNavigator<MULTI_ITERATOR, 1>
180 typedef typename MULTI_ITERATOR::multi_difference_type
shape_type;
181 typedef typename MULTI_ITERATOR::iterator
iterator;
185 inner_dimension_(inner_dimension),
189 if(inner_dimension != level)
190 end_.template dim<level>() += shape[level];
195 ++i_.template dim<level>();
205 return i_.iteratorForDimension(inner_dimension_);
210 return begin() + shape_[inner_dimension_];
220 return !( i_ < end_);
224 void reset(MULTI_ITERATOR
const & i)
227 if(inner_dimension_ != level)
228 end_.template dim<level>() += shape_[level];
232 unsigned int inner_dimension_;
233 MULTI_ITERATOR i_, end_;