|
Boost : |
From: Jeremy Siek (jsiek_at_[hidden])
Date: 2001-03-24 14:02:32
On Fri, 23 Mar 2001, Michael D. Crawford wrote:
crawfo> // Alternatively, if iterator support is built into ZDCPixmap then we can
crawfo> // initialize from a member function that returns an iterator:
crawfo> //
crawfo> // PixelIterator iter( myPix.TopLeft() );
An alternative that avoids touching the existing XDCPixmap is to
write TopLeft as a free function instead of a member function.
PixelIterator iter = top_left(myPix);
crawfo> But there's a problem - how can they be used two-dimensionally in a loop? One
crawfo> can only loop over one index at a time. One possible solution although a
crawfo> little ugly is to put inner loop iterators inside to limit loops
There's a couple more alternatives here.
1. Use two iterators, the "outer iterator" iterates over rows
of the image, and the "inner iterator" iterates down each row.
PixelRowIterator row_iter = rows_begin(myPix);
for (; row_iter != rows_end(myPix); ++row_iter) {
PixelIterator iter = begin(*row_iter);
for (; iter != end(*row_iter); ++iter)
...
}
MTL provides this kind of interface for matrices.
2. Use a single iterator that knows how to wrap around. The
problem with this approach is that it introduces and if statement
into the inner loop, which hurts performance.
Cheers,
Jeremy
----------------------------------------------------------------------
Jeremy Siek www: http://www.lsc.nd.edu/~jsiek/
Ph.D. Candidate email: jsiek_at_[hidden]
Univ. of Notre Dame work phone: (219) 631-3906
----------------------------------------------------------------------
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk