示例#1
0
        UriTreeNode <T> FindOrCreate(Uri uri, bool createNew)
        {
            List <string> segments = GetSegments(uri);

            UriTreeNode <T> current = root;

            lock (ThisLock)
            {
                for (int i = 0; i < segments.Count; i++)
                {
                    UriTreeNode <T> next = current.FindChild(segments[i]);
                    if (next == null)
                    {
                        if (createNew)
                        {
                            next = new UriTreeNode <T>(segments[i]);
                            current.AddChild(segments[i], next);
                        }
                        else
                        {
                            return(current);
                        }
                    }

                    current = next;
                }
            }

            return(current);
        }
示例#2
0
        public void Add(Uri uri, T item)
        {
            UriTreeNode <T> node = FindOrCreate(uri, true);

            node.Item = item;
        }
示例#3
0
 public void AddChild(string key, UriTreeNode <T> child)
 {
     children[key] = child;
 }
示例#4
0
 public UriLookupTable()
 {
     this.root = new UriTreeNode <T>(null);
 }
示例#5
0
        public T Lookup(Uri uri)
        {
            UriTreeNode <T> node = FindOrCreate(uri, false);

            return(node.Item);
        }