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); } }
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); }
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); }
protected virtual void OnChildRemoved(IMonohierarchy <T, TKey> child) { }
protected Monohierarchy(IMonohierarchy <T, TKey> parent) { Parent = parent; DictChildren = new ThreadSafeDictionary <TKey, IMonohierarchy <T, TKey> > (); }
public virtual bool ContainsChild(IMonohierarchy <T, TKey> child) { return(DictChildren.ContainsKey(child.Key)); }