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