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