protocol for using InputRanges

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Tue Mar 25 12:44:47 PDT 2014


On 3/25/14, 12:16 PM, Dicebot wrote:
> 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.

Suggestion: focusing on what to do within the present context is more 
productive.

Andrei



More information about the Digitalmars-d mailing list