private void create(DecisionNode node, int depth)
{
string indent = new string(' ', depth * 4);
if (!node.IsLeaf)
{
int attributeIndex = node.Branches.AttributeIndex;
// Create all comparison expressions
for (int i = 0; i < node.Branches.Count; i++)
{
DecisionNode child = node.Branches[i];
string cmp = ComparisonExtensions.ToString(child.Comparison);
if (i == 0)
writer.Write(indent + "if ");
else
writer.Write(indent + "else if ");
string value = child.Value.Value.ToString(CultureInfo.InvariantCulture);
writer.Write("(input[{0}] {1} {2}) {{", attributeIndex, cmp, value);
writer.WriteLine();
create(child, depth + 1);
writer.WriteLine(indent + "}");
}
writer.WriteLine(indent + "else throw new ArgumentException(\"input\", \"Unexpected value at position " + attributeIndex + ".\");");
}
else // node is a leaf
{
if (node.Output.HasValue)
{
string value = node.Output.Value.ToString(CultureInfo.InvariantCulture);
writer.WriteLine(indent + "return " + value + ";");
}
else
{
writer.WriteLine(indent + "return -1;");
}
}
}