Iterators for D

Dave Dave_member at pathlink.com
Mon Nov 6 13:10:19 PST 2006


Dave wrote:
> Walter Bright wrote:
>> It's becoming increasingly obvious that D needs iterators. While 
>> opApply  is far better for some kinds of iteration (such as 
>> recursively traversing a directory), iterators are more efficient in 
>> some cases, and allow for things that opApply makes difficult.
>>
>> So hear are the design goals:
>>
>> 1) Works with dynamic and stat arrays
>> 2) Doesn't need to work with associative arrays
>> 3) Should be possible to achieve "pointer efficiency" with it
>> 4) Needs to be able to restrict lvalue access (what C++ does with 
>> const iterators)
>> 5) Needs to work seamlessly with foreach
>> 6) Iterators need to be copyable
>>
>> So here's one design:
>>
>> .being property returns an iterator that starts at the beginning
>>
>> .end returns an iterator that is at the end
>>
>> Overloading * doesn't work with D. But, instead:
>>
>> Overload opIndex for rvalue access
>> Overload opIndexAssign for lvalue access
>>
>> Overloading opIndex also will work for random access
>>
>> foreach loops will not be able to have a 'key' parameter.
> 
> Would this mechanism work for, say, arrays of structs (not struct*[] 's) 
> so that we could avoid the overhead of either a) copying the struct 
> and/or b) the extra level of indirection in the loop? (In other words, 
> could the iterator provide a reference to each element by default).
> 
> Thanks,
> 
> - Dave

I should add - will native arrays of structs (say) provide this by default w/o having to add 
specialized operators?

Thanks.



More information about the Digitalmars-d mailing list