示例#1
0
        IEnumerable <IMonohierarchy <T, TKey> > EnumerateItems(IMonohierarchy <T, TKey> root)
        {
            var queue = new Queue <IMonohierarchy <T, TKey> >();

            queue.Enqueue(root);
            while (queue.Any())
            {
                var w = queue.Dequeue();
                yield return(w);

                w.Children.ForEach(queue.Enqueue);
            }
        }
示例#2
0
 public bool RemoveChild(IMonohierarchy <T, TKey> child)
 {
     if (child == null)
     {
         throw new ArgumentNullException("child");
     }
     if (!DictChildren.Remove(child.Key))
     {
         return(false);
     }
     OnChildRemoved(child);
     return(true);
 }
示例#3
0
 public bool GetChild(TKey key, out IMonohierarchy <T, TKey> child)
 {
     if (DictChildren.TryGetValue(key, out child))
     {
         return(true);
     }
     foreach (IMonohierarchy <T, TKey> c in DictChildren.Values)
     {
         if (c.GetChild(key, out child))
         {
             return(true);
         }
     }
     child = null;
     return(false);
 }
示例#4
0
 protected virtual void OnChildRemoved(IMonohierarchy <T, TKey> child)
 {
 }
示例#5
0
 protected Monohierarchy(IMonohierarchy <T, TKey> parent)
 {
     Parent       = parent;
     DictChildren = new ThreadSafeDictionary <TKey, IMonohierarchy <T, TKey> > ();
 }
示例#6
0
 public virtual bool ContainsChild(IMonohierarchy <T, TKey> child)
 {
     return(DictChildren.ContainsKey(child.Key));
 }