Re: Iterators and removing

At 06:21 AM 4/2/98 -0500, Axel Wienberg wrote:
>
>Hi,
>
>I've got a question on the behaviour of NodeIterators.  What is supposed to
>happen if the current node of an iterator is removed from its parent?
>
>The method toNext() of NodeIterator is defined as follows:
>
>   This method alters the internal state of the iterator such that the
node it
>   references is the next in the sequence the iterator is presenting relative
>   to the current position.
>
>But now the node is no longer part of the sequence represented by the
iterator.
>This case actually occurs if you want to conditionally remove the children of
>some node.
>
>It gets even more confusing if you reinsert the node at a different
position as
>a child of the same parent: Does the Iterator move along with its node?  Or
>what if you insert it as a child of an entirely different parent?
>
>

We discussed this in the IG recently; I'm not sure if we reached a
consensus.  My position is that if one removes a node that an iterator
points to, the "current" node becomes undefined and the getCurrent() method
should throw an exception, and toNext() and toPrevious() would return the
values that would have been returned had the node not been deleted.  In
other words, I imagine the iterator pointing to the empty spot where the
current node WAS; since there is no node there, "current" is undefined, but
next and previous are.

I think the alternatives are confusing for users and challenging for
implementors, and don't add anything in the way of conceptual integrity.





Mike Champion

Received on Friday, 3 April 1998 09:29:37 UTC