<div>Delphi supports iterator for the "for in" in different ways:</div>
<div> </div>
<div>* Dynamic arrays, static arrays, sets, strings and records have "built-in" iterators</div>
<div> </div>
<div>* For classes and interface it requires a method called "GetEnumerator".</div>
<div>    GetEnumerator can return a class, an interface or a record. This class, interface or record must have a member called "MoveNext" and a property called "Current". MoveNext returns a Boolean and Current returns the item.
</div>
<div> </div>
<div>You can for example do the following with a dynamic array:</div>
<div> </div>
<div>type</div>
<div>  TDoubleArray = array of Double;</div>
<div> </div>
<div>var</div>
<div>  A : TDoubleArray;</div>
<div>  D : Double;</div>
<div> </div>
<div>begin</div>
<div>  A := TDoubleArray.Create(1.0, 2.1, 3.2);</div>
<div>  for D in A do</div>
<div>    Writeln(D);</div>
<div>end;</div>
<div> </div>
<div> </div>
<div><span class="gmail_quote">On 14/06/07, <b class="gmail_sendername">Bram Kuijvenhoven</b> <<a href="mailto:kuifwaremailinglists@xs4all.nl">kuifwaremailinglists@xs4all.nl</a>> wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Daniël Mantione wrote:<br>><br>> Op Thu, 14 Jun 2007, schreef Florian Klaempfl:<br>><br>>> Graeme Geldenhuys schrieb:
<br>>>> I like the "for-in" code.<br>>> Using the default property is clean, using count imo not. Thought I<br>>> admit I've no idea so far to do it better.<br>><br>> Well, there already is a ";default;" directive, we could add a ";counter;"
<br>> directive.<br><br>Something like that would be nice, but maybe an even nicer approach would be<br><br>property Items[index:Integer] read GetItem write SetItem low GetLow high GetHigh;<br><br>or (to be more friendly to legacy code parsers)
<br><br>property Items[index:Integer] read GetItem write SetItem; low GetLow; high GetHigh;<br><br>Then you can use Low(object.Items) and High(object.Items), even Low(object) if Items is the default property.<br><br><br>If you stick with the 'Count' concept, I'd opt for
<br><br>property Items[index:Integer] read GetItem write SetItem; count GetCount;<br>property Items[index:Integer] read GetItem write SetItem; count FCount;<br><br>Alternatives:<br><br>property Items[index:Integer] read GetItem write SetItem; length GetLength;
<br>property Items[index:Integer] read GetItem write SetItem; size GetSize;<br><br><br>To support properties that cannot be indexed by simple ordinals, an iterator mechanism could be added, like<br><br>property Items[key:string]; iterator GetIterator;
<br><br>where GetIterator must return e.g. an IIterator interface, which is then to be defined in Objpas or the like, much like IUnkown.<br><br><br>Add support for all this to the RTTI and you can even use it in streaming, scripting engines etc.
<br><br>Regards,<br><br>Bram<br>_______________________________________________<br>fpc-devel maillist  -  <a href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a><br><a href="http://lists.freepascal.org/mailman/listinfo/fpc-devel">
http://lists.freepascal.org/mailman/listinfo/fpc-devel</a><br></blockquote></div><br>