On 12/17/14 6:15 AM, zeljkog wrote:
On 15.12.14 01:00, "Nordlöw" wrote:
Isn't this algorithm already encoded somewhere in Phobos?

void append(T, Args...)(ref T[] arr, auto ref Args args){
{
    static if (args.length == 1)
       arr ~= args[0];     // inlined
    else{
       arr.length += args.length;
       foreach(i, e; args)
          arr[$ - args.length + i] = e;
    }
}

I've just tested, this looks usable.
Equal for 1 item, considerably (~40%) faster for 2, and much (100+%) faster for 
more.
Also more convenient.

This makes sense. The cost of calling a function is much much higher than copying a single element.

Maybe samthing like that should go to Fobos.

Definitely. I would love to see the improvement, however, of having arr ~= [a, b, c] do this automatically by the compiler.

I wonder how your code compares to this:

void append(T)(ref T[] arr, T[] args...)
{
   arr ~= args;
}

Which is how I would have approached it. Your solution is more general, but mine has the benefit of avoiding the double-initialization of the data.

-Steve

Reply via email to