37 #ifndef VIGRA_IMAGEITERATORADAPTER_HXX
38 #define VIGRA_IMAGEITERATORADAPTER_HXX
75 template <
class IMAGE_ITERATOR>
85 typedef typename IMAGE_ITERATOR::value_type
PixelType;
89 typedef typename IMAGE_ITERATOR::reference
reference;
97 typedef typename IMAGE_ITERATOR::pointer
pointer;
121 IMAGE_ITERATOR::operator=(i);
130 IMAGE_ITERATOR::operator=(i);
187 IMAGE_ITERATOR ret(*
this);
195 IMAGE_ITERATOR ret(*
this);
203 return this->y - c.y;
224 return this->y < c.y;
231 return IMAGE_ITERATOR::operator*();
238 return IMAGE_ITERATOR::operator()(0, d);
245 return IMAGE_ITERATOR::operator->();
280 template <
class IMAGE_ITERATOR>
302 typedef typename IMAGE_ITERATOR::pointer
pointer;
326 IMAGE_ITERATOR::operator=(i);
335 IMAGE_ITERATOR::operator=(i);
392 IMAGE_ITERATOR ret(*
this);
400 IMAGE_ITERATOR ret(*
this);
408 return this->x - c.x;
429 return this->x < c.x;
436 return IMAGE_ITERATOR::operator*();
443 return IMAGE_ITERATOR::operator()(d, 0);
450 return IMAGE_ITERATOR::operator->();
478 template <
class IMAGE_ITERATOR>
496 typedef typename IMAGE_ITERATOR::pointer
pointer;
509 IMAGE_ITERATOR
const & end)
510 : IMAGE_ITERATOR(start), x_(0.0), y_(0.0)
512 int dx = end.x - start.x;
513 int dy = end.y - start.y;
514 int adx = (dx < 0) ? -dx : dx;
515 int ady = (dy < 0) ? -dy : dy;
516 int dd = (adx > ady) ? adx : ady;
519 dx_ = (double)dx / dd;
520 dy_ = (double)dy / dd;
521 if(adx > ady) y_ += dy_ / 2.0;
522 else x_ += dx_ / 2.0;
535 else if(x_ <= -1.0) {
544 else if(y_ <= -1.0) {
580 return IMAGE_ITERATOR::operator*();
587 return IMAGE_ITERATOR::operator->();
598 double x_, y_, dx_, dy_;
605 #endif // VIGRA_IMAGEITERATORADAPTER_HXX