Example #1
0
        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);
                }
            }
        }
Example #2
0
        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);
        }