public Route Select(string[] segments, int position) { var hasMore = position < segments.Length - 1; var current = segments[position]; if (!hasMore) { if (NamedLeaves.ContainsKey(current)) { return(NamedLeaves[current]); } if (NamedNodes.ContainsKey(current)) { var leaf = NamedNodes[current].SpreadRoute; if (leaf != null) { return(leaf); } } if (ArgRoute != null) { return(ArgRoute); } if (SpreadRoute != null) { return(SpreadRoute); } } else { if (NamedNodes.ContainsKey(current)) { var leaf = NamedNodes[current].Select(segments, position + 1); if (leaf != null) { return(leaf); } } foreach (var node in ArgNodes) { var leaf = node.Select(segments, position + 1); if (leaf != null) { return(leaf); } } } return(SpreadRoute); }
public void AddChild(Node child) { child.Parent = this; var lastSegment = child.LastSegment(); if (lastSegment == "*") { ArgNodes.Add(child); } else { NamedNodes.Add(lastSegment, child); } }
public IState GetVariable(string variableName) => NamedNodes.First(n => n.Name == "T" + variableName).State;
public SolvingNode GetVariableNode(string variableName) => NamedNodes.First(n => n.Name == "T" + variableName);