Bari.Core.Build.BuildContext.RemoveIrrelevantBranches C# (CSharp) Method

RemoveIrrelevantBranches() private method

private RemoveIrrelevantBranches ( AdjacencyGraph graph, IBuilder rootBuilder ) : void
graph AdjacencyGraph
rootBuilder IBuilder
return void
        private void RemoveIrrelevantBranches(AdjacencyGraph<IBuilder, EquatableEdge<IBuilder>> graph, IBuilder rootBuilder)
        {
            var bfs = new BreadthFirstSearchAlgorithm<IBuilder, EquatableEdge<IBuilder>>(graph);
            var toKeep = new HashSet<EquatableEdge<IBuilder>>();
            var buildersToKeep = new HashSet<IBuilder>();
            bfs.TreeEdge += e => toKeep.Add(e);
            bfs.NonTreeEdge += e => toKeep.Add(e);
            bfs.DiscoverVertex += b => buildersToKeep.Add(b);
            bfs.Compute(rootBuilder);
            graph.RemoveEdgeIf(edge => !toKeep.Contains(edge));
            graph.RemoveVertexIf(vertex => !buildersToKeep.Contains(vertex));
        }