protocol for using InputRanges

Szymon Gatner noemail at gmail.com
Fri Mar 28 16:24:35 PDT 2014


On Friday, 28 March 2014 at 23:14:56 UTC, Tobias Müller wrote:
> On Thursday, 27 March 2014 at 20:49:16 UTC, Walter Bright wrote:
>> On 3/27/2014 12:21 PM, Rainer Schuetze wrote:
>>> This loop is intuitive. Not being allowed to call empty or 
>>> front multiple times
>>> or not at all is unintuitive. They should not be named as if 
>>> they are properties
>>> then.
>>
>> I can concede that. But I can't concede being able to call 
>> front without first calling empty, or calling popFront without 
>> calling empty and front, or requiring 'pump priming' in the 
>> constructor.
>
> Disclaimer: I'm a C++ programmer just lurking here, I've never
> actually used D.
>
> I find it very counter-intuitive that 'empty' is required before
> front or popFront.
> Since 'pump priming' in the constructor isn't wanted either, i'd
> suggest the following protocol:
>
> while (popFront())
> {
>     front;
> }
>

In c++ if you had a list or deque you would obviously did 
if(empty()) before calling front() too, and the before a call to 
pop_front(). Container is kind of range and in c++ it looks 
exactly the same:

while (!cont.empty())
{
   auto& var = cont.front();
   cont.pop_front(); // consume
}

3 operations are needed.


More information about the Digitalmars-d mailing list