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 AddLeaf(Route route) { if (route.HasSpread) { SpreadRoute = route; } else if (route.EndsWithArgument) { ArgRoute = route; } else { NamedLeaves.Add(route.LastSegment, route); } }