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 unsigned int inner_dimension)
122 : base_type(i, start, stop, inner_dimension)
130 if(this->point_[level-1] == this->stop_[level-1])
133 ++this->point_[level];
134 ++this->i_.template dim<level>();
149 return this->point_[level] < this->stop_[level];
156 return this->point_[level] >= this->stop_[level];
162 this->point_[level] = this->start_[level];
163 this->i_.template dim<level>() -= (this->stop_[level] - this->start_[level]);
167 template <
class MULTI_ITERATOR>
168 class MultiArrayNavigator<MULTI_ITERATOR, 1>
172 typedef typename MULTI_ITERATOR::multi_difference_type
shape_type;
173 typedef typename MULTI_ITERATOR::iterator
iterator;
176 : start_(), stop_(shape), point_(start_),
177 inner_dimension_(inner_dimension),
178 inner_shape_(stop_[inner_dimension] - start_[inner_dimension]),
181 stop_[inner_dimension] = start_[inner_dimension] + 1;
185 unsigned int inner_dimension)
186 : start_(start), stop_(stop), point_(start_),
187 inner_dimension_(inner_dimension),
188 inner_shape_(stop_[inner_dimension] - start_[inner_dimension]),
191 stop_[inner_dimension] = start_[inner_dimension] + 1;
197 ++i_.template dim<level>();
207 return i_.iteratorForDimension(inner_dimension_);
212 return begin() + inner_shape_;
217 return point_[level] < stop_[level];
222 return point_[level] >= stop_[level];
233 point_[level] = start_[level];
234 i_.template dim<level>() -= (stop_[level] - start_[level]);
238 unsigned int inner_dimension_, inner_shape_;
291 template <
unsigned int Dimensions,
unsigned int N = Dimensions>
300 enum { level = N-1 };
313 this->end_[level] = (this->inner_dimension_ == level)
315 : this->shape_[level];
326 if(this->i_[level] < this->end_[level])
342 return this->inner_dimension_ == level
344 : this->i_[level] < this->end_[level];
361 this->end_[level] = (this->inner_dimension_ == level)
363 : this->shape_[level];
368 template <
unsigned int Dimensions>
369 class MultiCoordinateNavigator<Dimensions, 1>
377 inner_dimension_(inner_dimension)
379 end_[level] = (inner_dimension_ == level)
402 res[inner_dimension_] = shape_[inner_dimension_];
408 return i_[level] < end_[level];
420 end_[level] = (inner_dimension_ == level)
426 unsigned int inner_dimension_;
MULTI_ITERATOR::multi_difference_type shape_type
Definition: navigator.hxx:107
MULTI_ITERATOR::iterator iterator
Definition: navigator.hxx:111
bool hasMore() const
Definition: navigator.hxx:147
void operator++(int)
Definition: navigator.hxx:333
bool atEnd() const
Definition: navigator.hxx:349
std::ptrdiff_t MultiArrayIndex
Definition: multi_iterator.hxx:348
bool hasMore() const
Definition: navigator.hxx:340
MultiCoordinateNavigator(value_type const &shape, unsigned int inner_dimension)
Definition: navigator.hxx:310
void operator++()
Definition: navigator.hxx:127
Definition: multi_iterator.hxx:354
A navigator that provides access to the 1D subranges of an n-dimensional range given by a vigra::Mult...
Definition: navigator.hxx:95
void operator++(int)
Definition: navigator.hxx:140
TinyVector< MultiArrayIndex, N > type
Definition: multi_iterator.hxx:360
MultiArrayNavigator(MULTI_ITERATOR const &i, shape_type const &shape, unsigned int inner_dimension)
Definition: navigator.hxx:116
void operator++()
Definition: navigator.hxx:320
A navigator that provides access to the 1D subranges of an n-dimensional range given by an nD shape...
Definition: navigator.hxx:292
MultiArrayShape< Dimensions >::type value_type
Definition: navigator.hxx:304
bool atEnd() const
Definition: navigator.hxx:154