37 #ifndef VIGRA_IMAGEITERATORADAPTER_HXX
38 #define VIGRA_IMAGEITERATORADAPTER_HXX
76 template <
class IMAGE_ITERATOR>
86 typedef typename IMAGE_ITERATOR::value_type
PixelType;
90 typedef typename IMAGE_ITERATOR::reference
reference;
98 typedef typename IMAGE_ITERATOR::pointer
pointer;
122 IMAGE_ITERATOR::operator=(i);
131 IMAGE_ITERATOR::operator=(i);
188 IMAGE_ITERATOR ret(*
this);
196 IMAGE_ITERATOR ret(*
this);
204 return this->y - c.y;
225 return this->y < c.y;
232 return IMAGE_ITERATOR::operator*();
239 return IMAGE_ITERATOR::operator()(0, d);
246 return IMAGE_ITERATOR::operator->();
282 template <
class IMAGE_ITERATOR>
304 typedef typename IMAGE_ITERATOR::pointer
pointer;
328 IMAGE_ITERATOR::operator=(i);
337 IMAGE_ITERATOR::operator=(i);
394 IMAGE_ITERATOR ret(*
this);
402 IMAGE_ITERATOR ret(*
this);
410 return this->x - c.x;
431 return this->x < c.x;
438 return IMAGE_ITERATOR::operator*();
445 return IMAGE_ITERATOR::operator()(d, 0);
452 return IMAGE_ITERATOR::operator->();
481 template <
class IMAGE_ITERATOR>
499 typedef typename IMAGE_ITERATOR::pointer
pointer;
512 IMAGE_ITERATOR
const & end)
513 : IMAGE_ITERATOR(start), x_(0.0), y_(0.0)
515 int dx = end.x - start.x;
516 int dy = end.y - start.y;
517 int adx = (dx < 0) ? -dx : dx;
518 int ady = (dy < 0) ? -dy : dy;
519 int dd = (adx > ady) ? adx : ady;
522 dx_ = (double)dx / dd;
523 dy_ = (double)dy / dd;
524 if(adx > ady) y_ += dy_ / 2.0;
525 else x_ += dx_ / 2.0;
538 else if(x_ <= -1.0) {
547 else if(y_ <= -1.0) {
583 return IMAGE_ITERATOR::operator*();
590 return IMAGE_ITERATOR::operator->();
601 double x_, y_, dx_, dy_;
608 #endif // VIGRA_IMAGEITERATORADAPTER_HXX