[Lazarus] A bit off topic: iPhone developers

ik idokan at gmail.com
Sun Mar 29 12:30:49 CEST 2009


On Fri, Mar 27, 2009 at 02:22:17AM +0100, Hans-Peter Diettrich wrote:
> Graeme Geldenhuys schrieb:
> 
> > HasNext()         Returns true if the collection has more items
> >                   when traversing the collection in the forward
> >                   direction.
> 
> This (and the Peek methods) require that the collection is organized 
> strictly sequential, for Previous in both directions.

Not really. It only says that you need either a way to determine if there
are more elements or one element lookahead.

 I have my doubts about previous being part of the base iterator though.
That is as limiting as a "everything is a vector" approach to iterators.

Just "eof" and "next" should be it. If you want to go backwards, see if the
collection provides a separate iterator for the backwards motion. But having
it in the base spec means that it is defunct half of the time, and, like
vector is a too complicated abstraciton for an iteration.

> The implementation for an DataSet can consume an considerable amount of
> time for such operations. It looks to me as if such an iterator interface
> has very limited practical use.

Why is would this slower than a vector <count/items> type of iterator?
Because one can implement a real iterator on top of a vector
(hasnext:=(currentrec<count))

> > Remove()          Removes from the collection the last item that
> >                   was returned by the Next() or Previous() calls.
> >                   (optional modifier operation)
> > SetItem(item)     Replaces the last item returned by the Next()
> >                   or Previous() calls with the specified item.
> >                   (optional modifier operation)
> 
> Which element will the iterator represent, after such an operation? 

The first not seen element or end-of-iteration.

> After Remove it has to represent the next or previous item, depending on 
> the direction of traversion.

> > A *huge* benefit of using iterators, is that the developers doesn't
> > need to worry about if the list/container is 0-based or 1-based, how
> > to get the next or previous item etc... It now gives the developer a
> > consistent interface API to work with, no matter what is being
> > iterated.
> 
> Nice try, but I prefer the slimmer Count and Item[] interface,

Problem is that that requires to know the count up front, AND you can't nest
it in the way you can streams.

(have an iterator B that iterates with iterator A over a collection, but skip some)




More information about the Lazarus mailing list