protocol for using InputRanges

Steven Schveighoffer schveiguy at yahoo.com
Thu Mar 27 08:44:40 PDT 2014


On Thu, 27 Mar 2014 11:19:15 -0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> On 3/27/14, 3:49 AM, "Marc Schütz" <schuetzm at gmx.net>" wrote:
>> I was originally going to do that, but then I took a closer look at the
>> documentation, which says ([1] in the documentation of  
>> `isInputRange()`):
>>
>> "Calling r.front is allowed only if calling r.empty has, or would have,
>> returned false."
>
> Probably we need to amend that. For efficient ranges, front() and  
> popFront() should only be guaranteed to work if either empty() or  
> length() were evaluated first, and they returned false or nonzero,  
> respectively.

This is a misleading statement. An array is probably the most efficient of  
ranges, which does not require this.

We should be more specific here. For certain types of *nonempty* ranges,  
front is only guaranteed to work if empty/length was called before front  
is called. I would not necessarily lump popFront into that requirement  
automatically, popFront may be able to cope with not having cached the  
first element without losing efficiency.

Questions to answer:

1. What types of ranges does this rule apply to?
2. What is the cost of not requiring this in terms of efficiency and ease  
of implementation.
3. Is there a better mechanism to use than misusing empty? should we  
introduce another property/call?

At the moment, the only candidates I can think of are lazy caching ranges.  
How many of those exist?

-Steve


More information about the Digitalmars-d mailing list