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;
 
  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>
 
  170 class MultiArrayNavigator<MULTI_ITERATOR, 1>
 
  174     typedef typename MULTI_ITERATOR::multi_difference_type 
shape_type;
 
  175     typedef typename MULTI_ITERATOR::iterator 
iterator;
 
  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;
 
  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>();
 
  211         return i_.iteratorForDimension(inner_dimension_);
 
  216         return begin() + inner_shape_;
 
  221         return point_[level] < stop_[level];
 
  226         return point_[level] >= stop_[level];
 
  237         point_[level] = start_[level];
 
  238         i_.template dim<level>() -= (stop_[level] - start_[level]);
 
  242     unsigned int inner_dimension_, inner_shape_;
 
  295 template <
unsigned int Dimensions, 
unsigned int N = Dimensions>
 
  304     enum { level = N-1 };
 
  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>
 
  373 class MultiCoordinateNavigator<Dimensions, 1>
 
  381       inner_dimension_(inner_dimension)
 
  383         end_[level] = (inner_dimension_ == level)
 
  406         res[inner_dimension_] = shape_[inner_dimension_];
 
  412         return i_[level] < end_[level];
 
  424         end_[level] = (inner_dimension_ == level)
 
  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_fwd.hxx:60
bool hasMore() const 
Definition: navigator.hxx:344
MultiCoordinateNavigator(value_type const &shape, unsigned int inner_dimension)
Definition: navigator.hxx:314
void operator++()
Definition: navigator.hxx:129
Definition: multi_fwd.hxx:63
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
TinyVector< MultiArrayIndex, N > type
Definition: multi_shape.hxx:272
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