public ICollection <TItem> Hide(IEnumerable <TItem> elements) { var worker = new WalkerWorker <TItem, TEdge> (this.Sink); foreach (var item in elements) { worker.Remove(item); foreach (var edge in this.Sink.Twig(item)) { worker.Remove(edge); } } RevoveEdgesOfChanged(worker); CommitRemove(worker); //List<TItem> changes = new List<TItem>(WalkerWorker.Changes); //WalkerWorker.Changes.Clear(); //WalkerWorker.RemoveOrphans(this.View); //CommitRemove(WalkerWorker); //changes.AddRange(WalkerWorker.Changes); //WalkerWorker.Changes.Clear(); return(worker.Changes); }
public virtual ICollection <TItem> CollapseToFocused(IEnumerable <TItem> elements) { var worker = new WalkerWorker <TItem, TEdge> (this.Sink); NeverRemove(worker, elements); foreach (TItem item in Sink) { worker.RemoveCollapsed(item, Sink); worker.Remove(item); } CommitRemove(worker); return(worker.Changes); }
protected virtual void RevoveEdgesOfChanged(WalkerWorker <TItem, TEdge> worker) { var changeStack = new Stack <TItem> (worker.Changes); while (changeStack.Count != 0) { TItem item = changeStack.Pop(); if (item is TEdge) { TEdge edge = (TEdge)item; if (worker.Changes.Contains(edge.Root) || worker.Changes.Contains(edge.Leaf)) { worker.Remove(edge); } } } }