Proposal for SentinelInputRange

Jonathan M Davis jmdavisProg at gmx.com
Wed Feb 27 21:28:07 PST 2013


On Wednesday, February 27, 2013 21:10:15 Walter Bright wrote:
> > Also, I'd point out that even for strings, doing something like this means
> > wrapping them, because their empty isn't defined in a manner which works
> > with isSentinelRange.
> 
> For D strings, yes, for C strings, no need to wrap them.

But you have to deal with D strings, not C strings if you're dealing with 
ranges. char* isn't a range. So, unless you're talking about wrapping a char* 
in a range, char* isn't going to work. And simply appending 0 to the end of a 
D string isn't enough, because isSentinelnputRange would fail, because 
std.array.empty doesn't match it. So, you need a wrapper even if it's only to 
pass the template constraint. That being the case, regardless of whether 
you're dealing with char* or string, you need a wrapper.

And what ranges other than strings can take advantage of anything like this? 
There's no way to append a value to range other than chain, which means that 
you're forced to either construct ranges specifically with the idea that 
they'll be used as sentinel ranges (in which case, they're a wrapper around 
whatever they're using to hold the data internally - probably an array - and 
if you're doing that, why not just use an array in the first place?), or you're 
forced to wrap an existing range (which would then require it to check for 
empty on each popFront so that it can make its front be 0 when it's empty).

What are we gaining here that can't be gained by simply using a few static ifs 
to special case strings? And I don't see how this idea is gaining us much of 
anything outside of strings and maybe arrays - both of which have to be 
wrapped in order for their empty to act appropriately (even if they can avoid 
the extra empty checks internally by appending the sentinel value to their 
end). So, why not just special case strings or arrays in the few situations 
where something like this is needed, especially when it would be so easy to 
do?

- Jonathan M Davis


More information about the Digitalmars-d mailing list