protocol for using InputRanges

Dicebot public at dicebot.lv
Tue Mar 25 12:16:20 PDT 2014


On Monday, 24 March 2014 at 22:26:10 UTC, Joseph Rushton Wakeling 
wrote:
> On 24/03/14 14:20, Dicebot wrote:
>> I think there is one design mistake with current InputRange 
>> rules that makes
>> usage so inconsistent. We have `empty` but don't have any 
>> distinct `not yet
>> started` state. If calling `popFront` at least once was 
>> required before
>> accessing `front`, I can't imagine the case where having any 
>> non-trivial code in
>> `front` would have been necessary.
>
> I floated some ideas along those lines, for a "first" method 
> that would be automatically called immediately before the first 
> call to front, popFront, etc., whatever came first.

I was thinking about something more simple. Current pattern is:

while (!r.empty)
{
     auto useme = r.front;
     r.popFront;
}

And I think this would have been more practical:

r.popFront;

while (!r.empty)
{
    // same
}

So every range is supposed to start in "init" state and provide 
data only after first popFront. No other changes. It is not a 
silver bullet but looks like an improvement over current design 
to me.


More information about the Digitalmars-d mailing list