Accessors, byLine, input ranges

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Fri Jan 29 08:18:46 PST 2010


Steven Schveighoffer wrote:
> On Fri, 29 Jan 2010 10:53:50 -0500, Michel Fortin 
> <michel.fortin at michelf.com> wrote:
> 
>> On 2010-01-29 10:49:34 -0500, "Steven Schveighoffer" 
>> <schveiguy at yahoo.com> said:
>>
>>> ugh... much simpler with a true stream-like range that supports what 
>>> is  natural for streams:
>>>  for(int i = 0; i < count && !range.empty; i++) {
>>>     elements ~= range.get();
>>> }
>>>  But of course, then this function doesn't work for other range 
>>> types.  I  decided in that discussion long ago that stream ranges 
>>> were going to suck.
>>
>> You can always define a generic take() like this:
>>
>>     E take(R, E)(ref R range) {
>>         E element = range.front;
>>         range.popFront();
>>         return element;
>>     }
>>
>> This will work for any forward range.
>>
> 
> Except stream ranges.  I don't get it...

It should work for stream ranges if front() checks the "filled" flag and 
eats the next line if false, and popFront clears the "filled" flag.

Andrei



More information about the Digitalmars-d mailing list