Compile-time optimization
JS
js.mdnq at gmail.com
Fri Jul 26 06:54:08 PDT 2013
oops, that was a mess... I guess I need to learn how to program.
This one is not much better but at least works. I'll have to
rewrite the code.
module main;
import std.stdio, std.traits;
template tuple(args...)
{
alias tuple = args;
}
template tUnrollArgs(args...)
{
pragma(msg, ">"~args.stringof);
static if (args.length == 0)
alias tUnrollArgs = tuple!();
else
static if (isArray!(typeof(args[0])))
{
pragma(msg, "isarray");
static if (args[0].length > 1)
{
pragma(msg, "unrolling");
static if (args[0].length > 1)
{
pragma(msg, "length > 1");
alias tUnrollArgs = tuple!(tUnrollArgs!(args[0][0]),
tUnrollArgs!(args[0][1..$],args[1..$]));
}
else
{
pragma(msg, "length == 0 || 1");
alias tUnrollArgs = args[0];
}
}
else
{
static if (args[0].length > 1)
{
pragma(msg, "1");
alias tUnrollArgs = tuple!(args[0][0],
tUnrollArgs!(args[0][1..$], args[1..$]));
}
else
{
pragma(msg, "2");
alias tUnrollArgs = tuple!(args[0][0],
tUnrollArgs!(args[1..$]));
}
}
}
else
//static if (args[0].length > 1)
//alias tUnrollArgs = tuple!(args[0],
tUnrollArgs!(args[0][1..$]));
//else
alias tUnrollArgs = args;
}
void main(string[] argv)
{
immutable auto z = ["1", "2"];
writeln(tUnrollArgs!(["a", "b"], z, "c"));
readln();
}
More information about the Digitalmars-d
mailing list