Re: iterators
Stefan Ram wrote:
ram@zedat.fu-berlin.de (Stefan Ram) writes:
class Example
implements de.dclj.ram.Value<T>, de.dclj.ram.Advanceable
{ public T value(){ ... }
public boolean advance(){ ... }}
I made a design error:
If there is not even one first value available,
the client can not detect this. So now, I prefer:
class ExampleIterator
implements
de.dclj.ram.IsAvailable,
de.dclj.ram.Value<T>,
de.dclj.ram.Advanceable,
{ public boolean IsAvailable(){ ... }
public T value() { ... }
public void advance() { ... }}
It gets more complicated than that if you consider different classes of
iterators (ListIterators in Java for example, or Random Access Iterators
in C++)
ListIterators actually keep track of the location "between" elements.
isAvailable doesn't make sense in that case.
One thing that I miss in Java is reversible iterators. Actually, there
are a lot of things I'd like to rework in the Java collections library,
but unfortunately there aren't any ways of doing so without breaking
everything or creating ugly bridge code.
What I would *love* is an iterator that can be made smart enough to not
throw ConcurrentModificationException if the modification can be proven
to be non-conflicting (such as appending to a list, or removing a node
from a linked-list, which is not any node being pointed to by the iterator.)
--
Daniel Pitts' Tech Blog: <http://virtualinfinity.net/wordpress/>