public IRouteTreeBranch AddBranch(string endpoint, RestMethod logic) { IRouteTreeBranch branch = new Branch(this) { Logic = logic }; if (endpoint.Equals("*")) { _wildcardBranch = branch; } else if (endpoint.Equals("**")) { _greedyBranch = new GreedyBranch(this) { Logic = logic }; branch = _greedyBranch; } else if (endpoint.StartsWith("{")) { endpoint = String.Format("^{0}$", endpoint.Trim('{', '}')); _regexBranches[new Regex(endpoint)] = branch; } else { _literalBranches[endpoint] = branch; } return(branch); }
public IRouteTreeBranch GetChild(string endpointName, bool create) { IRouteTreeBranch retVal = null; if (_literalBranches.TryGetValue(endpointName, out retVal)) { return(retVal); } foreach (var pair in _regexBranches) { if (pair.Key.IsMatch(endpointName)) { return(pair.Value); } } if ((_wildcardBranch != null && endpointName.Equals("*"))) { return(_wildcardBranch); } //NOTE.JHB: Fragile and will break if any other branch fails to return //but so far it is good enough if (_greedyBranch != null && endpointName.Equals("**")) { return(_greedyBranch); } if (!create) { return(_wildcardBranch ?? _greedyBranch); } return(AddBranch(endpointName, null)); }
public GreedyBranch(IRouteTreeBranch parent) { Parent = parent; }
/// <summary> /// Constructor /// </summary> public RouteTree() { Trunk = new Branch(null); }
public IRouteTreeBranch AddBranch(string endpoint, RestMethod logic) { IRouteTreeBranch branch = new Branch(this) { Logic = logic }; if (endpoint.Equals("*")) { _wildcardBranch = branch; } else if (endpoint.Equals("**")) { _greedyBranch = new GreedyBranch(this) { Logic = logic }; branch = _greedyBranch; } else if (endpoint.StartsWith("{")) { endpoint = String.Format("^{0}$", endpoint.Trim('{', '}')); _regexBranches[new Regex(endpoint)] = branch; } else { _literalBranches[endpoint] = branch; } return branch; }