Subject: Re: libprop iterators
To: Chapman Flack <nblists@anastigmatix.net>
From: Jason Thorpe <thorpej@shagadelic.org>
List: tech-kern
Date: 06/06/2006 09:29:28
On Jun 6, 2006, at 7:33 AM, Chapman Flack wrote:

> libprop iterators currently have the (reasonable) restriction that  
> they
> become invalid if a structure-changing operation (removal or  
> insertion)
> occurs on the underlying collection. Once the iterator is invalidated,
> iteration has to restart at the beginning.

Yes, this was modeled after how iterators work in Foundation in OS  
X.  You're not allowed to mutate a mutable collection while iterating  
it.

> Java provided for that use by giving each iterator a remove() method
> that simply removes from the collection that most recent object the
> iterator returned, and keeps that iterator synchronized. (Any other
> active iterators are still invalidated, of course.)
>
> Even if the collection is so small you don't care about the
> performance, it still helps keep the code concise:
>
>      while ( e = it.next() ) if ( e.isdead() ) it.remove();
>
> is just nicer to read than any of the alternatives.
>
> Would any object if I were to add such a method to libprop iterators?
> It looks to take very few LOC.

I'm not fundamentally opposed to such a thing.  I just don't really  
like operating on an implicit "last object".

If you want to cook up a patch, that's fine with me.  Please post it  
here for review first.  Please call the new function  
"prop_object_iterator_remove".

-- thorpej