Steven Schveighoffer wrote:
On Fri, 29 Jan 2010 10:53:50 -0500, Michel Fortin <michel.for...@michelf.com> wrote:

On 2010-01-29 10:49:34 -0500, "Steven Schveighoffer" <schvei...@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

Reply via email to