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); }
public void Add(Uri uri, T item) { UriTreeNode <T> node = FindOrCreate(uri, true); node.Item = item; }
public void AddChild(string key, UriTreeNode <T> child) { children[key] = child; }
public UriLookupTable() { this.root = new UriTreeNode <T>(null); }
public T Lookup(Uri uri) { UriTreeNode <T> node = FindOrCreate(uri, false); return(node.Item); }