[ImageJ-devel] [fiji-devel] RE: Simplifying loops?

Stephan Saalfeld saalfeld at mpi-cbg.de
Mon Jun 14 19:21:03 CDT 2010


Self-correction:
fwd() and bck() will not return boolean because I do not want them to
check anything by default.  In the following example, all pixels are
iterated until an exception (e.g. IndexOutOfBounds on type() call)
occurs:

Cursor<T> c;
try {
    for (;;c.fwd()){
        // meat of the loop
}
catch (Exception e){}

I assume that this is the fastest way to iterate over all pixels
assuming that something at the basic language level is throwing an
appropriate Exception.

Best,
Stephan



On Mon, 2010-06-14 at 20:06 +0200, Stephan Saalfeld wrote: 
> Hi,
> 
> we implement java.lang.Iterator<T extends Type<T>> where next() returns
> T, so no, next() cannot return boolean, fwd() and back() might do that.
> In the coming changes, Image<T> implements java.lang.Iterable<T>, such
> that the Java language shortcut works:
> 
> Image< T > image;
> for ( final T : image ) {
>     // meat of the loop
> }
> 
> How's that?
> 
> Currently, Cursor<T> implements Iterable<T> such that you can do:
> 
> Cursor<T> cursor;
> for (final T : cursor ) ...
> 
> instead,  but that's less sensible and will not stay.
> 
> Best,
> Stephan
> 
> 
> 
> 
> On Mon, 2010-06-14 at 18:54 +0200, Johannes Schindelin wrote: 
> > Hi,
> > 
> > On Mon, 14 Jun 2010, Stephan Preibisch wrote:
> > 
> > > This is definitely something we could do as far as the linked iterators
> > > work. Right now we did not do that because it is quite often extra work,
> > > e.g. if you copy an image you need only one check instead of two:
> > > 
> > > cursor1, cursor2;
> > > 
> > > while ( cursor1.hasNext() ) 
> > > {
> > > 	cursor1.fwd();
> > > 	cursor2.fwd();
> > > 	// meat of the loop
> > > }
> > 
> > Ah, I see. Maybe just a shortcut
> > 
> > 	public boolean next() {
> > 		if (!hasNext())
> > 			return false;
> > 		fwd();
> > 		return true;
> > 	}
> > 
> > to optimize for the common case?
> > 
> > Ciao,
> > Dscho
> > 
> 





More information about the ImageJ-devel mailing list