Overhauling the notion of output range

Steven Schveighoffer schveiguy at yahoo.com
Mon Jul 12 09:48:07 PDT 2010


On Mon, 12 Jul 2010 11:05:33 -0400, Andrei Alexandrescu  
<SeeWebsiteForEmail at erdani.org> wrote:

> On 07/12/2010 09:59 AM, Steven Schveighoffer wrote:
>> If I always have to do something like this in order to append a single
>> element:
>>
>> put(r, (&elem)[0..1]);
>
> No, the library does that. Look here:
>
> http://www.dsource.org/projects/phobos/browser/trunk/phobos/std/range.d#L306

So you're saying it's not ok for an output range to support appending a  
single element, but it's ok for put to support appending a single element?

Well, all that will end up happening is cases where appending a single  
element is the only possibility will produce overloaded add functions, one  
that takes a single element, and one that takes an array.  The one that  
takes an array will look like this:

foreach(e; arr)
    add(e);

I can tell you this for sure, because it's exactly what's in many  
dcollections classes.

So what happens when you call put(r, e) for one of these output classes?   
Instead of just calling add(e), it calls (add((&e)[0..1])) which in turn  
goes through some needless loop, which then ends up calling add(e).  I  
don't see why this is preferable.

-Steve


More information about the Digitalmars-d mailing list