On Friday, 1 March 2013 at 06:19:19 UTC, Chris Nicholson-Sauls
wrote:
A use case that comes immediately to mind: a sentinal range
that, yes wraps, an infinite (but predictable!) range,
effectively allowing you to take a head-slice of the infinite
range.
auto foo = infiniteRangeOfEvenNumbers();
auto upto1000 = GenericSentinalInputRange!1000( foo );
struct GenericSentinelRange(R, Sentinel) {
R r;
@property auto front() {
return r.front;
}
void popFront() {
r.popFront();
}
@property empty() {
return r.front == Sentinel;
}
}
We don't need a new type of range at all. You confuse legitimate
uses case for using a sentinel to terminate a range and uses case
where an actual sentinel range is needed.
So... I could live without a standard sentinal range concept
(have so far, using sentinal injection with input ranges, which
as Walter pointed out is really an incorrect use (abuse?) of
input ranges), but I also know I'd be using it if it existed
(and thereby cleaning up some code versus how I do it now).
You can live without, and guess what : if you use LDC (and
probably GDC) you'll get the performance boost Walter is talking
about.