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