Revenj.Http.RouteMatch.CreateTemplateMatch C# (CSharp) Method

CreateTemplateMatch() private method

private CreateTemplateMatch ( ) : System.UriTemplateMatch
return System.UriTemplateMatch
        internal UriTemplateMatch CreateTemplateMatch()
        {
            var result = new UriTemplateMatch();
            var bv = result.BoundVariables;
            foreach (var kv in BoundVars)
                bv.Add(kv.Key, kv.Value);
            var rs = result.RelativePathSegments;
            int pos = RawUrl.IndexOf('?');
            var maxLen = pos != -1 ? pos : RawUrl.Length;
            var nextSeg = RawUrl.IndexOf('/', 1) + 1;
            while (nextSeg != 0)
            {
                var lastSeg = nextSeg;
                nextSeg = RawUrl.IndexOf('/', nextSeg) + 1;
                if (nextSeg != 0)
                    rs.Add(RawUrl.Substring(lastSeg, nextSeg - lastSeg - 1));
                else
                    rs.Add(RawUrl.Substring(lastSeg, maxLen - lastSeg));
            }
            var qp = result.QueryParameters;
            if (QueryParams != null)
            {
                foreach (var kv in QueryParams)
                    qp.Add(kv.Key, kv.Value);
                return result;
            }
            if (pos != -1)
            {
                var query = RawUrl;
                pos++;
                while (pos < query.Length)
                {
                    int start = pos;
                    while (pos < query.Length && query[pos] != '=') pos++;
                    var key = HttpUtility.UrlDecode(query.Substring(start, pos - start));
                    pos++;
                    start = pos;
                    while (pos < query.Length && query[pos] != '&') pos++;
                    var value = HttpUtility.UrlDecode(query.Substring(start, pos - start));
                    pos++;
                    qp.Add(key, value);
                }
            }
            return result;
        }