On Thursday, 28 February 2013 at 01:12:19 UTC, Walter Bright
wrote:
A SentinelInputRange is an InputRange with the following
additions:
1. a compile time property 'sentinel' that is the terminating
value of the range
2. empty is defined as: empty = (front == sentinel)
3. it is not necessary for empty to be called before front
A C style 0-terminated string is an example of a
SentinelInputRange.
The additions to std.range would be:
1. isSentinelInputRange(T) which returns true if T is a
SentinelInputRange
2. a unittest
3. documentation of this
An addition to std.string would be a function that takes a
char* and returns a SentinelInputRange.
Motivation:
1. easy conversion of C strings to ranges
2. necessary for a fast implementation of a lexer
Any takers?
Can you explain what it does buy us ? Is it faster to check for
the sentinel value that to check for emptiness ?
Is it really handy in generic code ? For instance, if I use a
switch, the actual sentinel value may be conflicting with other
element in the switch. How does this kind of problem are solved ?
Do they are problems in the first place ?