36 #ifndef VIGRA_NAVIGATOR_HXX 37 #define VIGRA_NAVIGATOR_HXX 39 #include "multi_shape.hxx" 96 template <
class MULTI_ITERATOR,
unsigned int N>
105 enum { level = N-1 };
109 typedef typename MULTI_ITERATOR::multi_difference_type
shape_type;
113 typedef typename MULTI_ITERATOR::iterator
iterator;
119 : base_type(i, shape, inner_dimension)
122 MultiArrayNavigator(MULTI_ITERATOR
const & i, shape_type
const & start, shape_type
const & stop,
123 unsigned int inner_dimension)
124 : base_type(i, start, stop, inner_dimension)
132 if(this->point_[level-1] == this->stop_[level-1])
135 ++this->point_[level];
136 ++this->i_.template dim<level>();
151 return this->point_[level] < this->stop_[level];
158 return this->point_[level] >= this->stop_[level];
164 this->point_[level] = this->start_[level];
165 this->i_.template dim<level>() -= (this->stop_[level] - this->start_[level]);
169 template <
class MULTI_ITERATOR>
174 typedef typename MULTI_ITERATOR::multi_difference_type
shape_type;
175 typedef typename MULTI_ITERATOR::iterator
iterator;
177 MultiArrayNavigator(MULTI_ITERATOR
const & i, shape_type
const & shape,
unsigned int inner_dimension)
178 : start_(), stop_(shape), point_(start_),
179 inner_dimension_(inner_dimension),
180 inner_shape_(stop_[inner_dimension] - start_[inner_dimension]),
183 if(stop_[inner_dimension] > start_[inner_dimension])
184 stop_[inner_dimension] = start_[inner_dimension] + 1;
187 MultiArrayNavigator(MULTI_ITERATOR
const & i, shape_type
const & start, shape_type
const & stop,
188 unsigned int inner_dimension)
189 : start_(start), stop_(stop), point_(start_),
190 inner_dimension_(inner_dimension),
191 inner_shape_(stop_[inner_dimension] - start_[inner_dimension]),
194 if(stop_[inner_dimension] > start_[inner_dimension])
195 stop_[inner_dimension] = start_[inner_dimension] + 1;
201 ++i_.template dim<level>();
209 iterator begin()
const 211 return i_.iteratorForDimension(inner_dimension_);
216 return begin() + inner_shape_;
221 return point_[level] < stop_[level];
226 return point_[level] >= stop_[level];
229 shape_type
const & point()
const 237 point_[level] = start_[level];
238 i_.template dim<level>() -= (stop_[level] - start_[level]);
241 shape_type start_, stop_, point_;
242 unsigned int inner_dimension_, inner_shape_;
295 template <
unsigned int Dimensions,
unsigned int N = Dimensions>
304 enum { level = N-1 };
315 : base_type(shape, inner_dimension)
317 this->end_[level] = (this->inner_dimension_ == level)
319 : this->shape_[level];
330 if(this->i_[level] < this->end_[level])
346 return this->inner_dimension_ == level
348 : this->i_[level] < this->end_[level];
365 this->end_[level] = (this->inner_dimension_ == level)
367 : this->shape_[level];
372 template <
unsigned int Dimensions>
381 inner_dimension_(inner_dimension)
383 end_[level] = (inner_dimension_ == level)
398 value_type
const & begin()
const 403 value_type end()
const 406 res[inner_dimension_] = shape_[inner_dimension_];
412 return i_[level] < end_[level];
424 end_[level] = (inner_dimension_ == level)
429 value_type shape_, i_, end_;
430 unsigned int inner_dimension_;
MULTI_ITERATOR::multi_difference_type shape_type
Definition: navigator.hxx:109
MULTI_ITERATOR::iterator iterator
Definition: navigator.hxx:113
bool hasMore() const
Definition: navigator.hxx:149
void operator++(int)
Definition: navigator.hxx:337
bool atEnd() const
Definition: navigator.hxx:353
std::ptrdiff_t MultiArrayIndex
Definition: multi_shape.hxx:55
bool hasMore() const
Definition: navigator.hxx:344
MultiCoordinateNavigator(value_type const &shape, unsigned int inner_dimension)
Definition: navigator.hxx:314
Definition: accessor.hxx:43
void operator++()
Definition: navigator.hxx:129
Definition: multi_shape.hxx:231
A navigator that provides access to the 1D subranges of an n-dimensional range given by a vigra::Mult...
Definition: navigator.hxx:97
void operator++(int)
Definition: navigator.hxx:142
MultiArrayNavigator(MULTI_ITERATOR const &i, shape_type const &shape, unsigned int inner_dimension)
Definition: navigator.hxx:118
void operator++()
Definition: navigator.hxx:324
A navigator that provides access to the 1D subranges of an n-dimensional range given by an nD shape...
Definition: navigator.hxx:296
MultiArrayShape< Dimensions >::type value_type
Definition: navigator.hxx:308
bool atEnd() const
Definition: navigator.hxx:156