protocol for using InputRanges

Szymon Gatner noemail at gmail.com
Sun Mar 23 02:34:26 PDT 2014


On Sunday, 23 March 2014 at 00:50:34 UTC, Walter Bright wrote:
>
> 1. If you know the range is not empty, is it allowed to call 
> r.front without calling r.empty first?

IMO: yes. Logic of empty() sould be const and not have side 
effects.

>
> If this is true, extra logic will need to be added to r.front 
> in many cases.
>
> 2. Can r.front be called n times in a row? I.e. is calling 
> front() destructive?
>
> If true, this means that r.front will have to cache a copy in 
> many cases.

Yes, all true. Not sure if there is something like that in Phobos 
but if for example you had RandomValueRange, ever call to front() 
should return the same random number until popFront() is called 
at which point internal front variable is being recalculated and 
cached.

Since only popFront() is non-const, it is there where all the 
magic/mutation should happen.

In my code I also have CachingRange which calls front() on 
underlying range the first time and then stores result 
internally. I use it for ranges which generate front() on the fly 
and I knot it is expensive. I could cache that calculation 
directly in that underlying range but CachingRange is reusable.





More information about the Digitalmars-d mailing list