private void IterateOverGraph(Action <DatasetViewGraph, DatasetFacade, DatasetFacade> action) { var root = m_Project.Root(); action(m_Graph, null, root); var nodes = new Queue <DatasetFacade>(); nodes.Enqueue(root); while (nodes.Count > 0) { var dataset = nodes.Dequeue(); foreach (var child in dataset.Children()) { var temp = child; if (InternalContext.IsSynchronized) { action(m_Graph, dataset, temp); } else { Action a = () => action(m_Graph, dataset, temp); InternalContext.Invoke(a); } nodes.Enqueue(child); } } }
private void RemoveDatasetFromGraph() { var datasets = new List <DatasetFacade>(); foreach (var pair in m_VertexMap) { datasets.Add(pair.Key); } Action <DatasetViewGraph, DatasetFacade, DatasetFacade> action = (graph, parent, child) => { if (m_VertexMap.ContainsKey(child)) { datasets.Remove(child); } }; IterateOverGraph(action); Action deleteAction = () => { foreach (var dataset in datasets) { m_Graph.RemoveVertex(m_VertexMap[dataset]); m_VertexMap.Remove(dataset); } }; if (InternalContext.IsSynchronized) { deleteAction(); } else { InternalContext.Invoke(deleteAction); } Notify(() => Graph); }