public static void ForNodes(this Dictionary <IToken, List <INode> > nodeDependencies, TreeContext context, Action <INode> action) { var nodesQueue = new Queue <INode>(new[] { context.Tree.Root }); var assigned = new HashSet <IToken> { context.Tree.Root.Token }; while (nodesQueue.Any()) { var current = nodesQueue.Dequeue(); List <INode> children; if (!nodeDependencies.TryGetValue(current.Token, out children)) { continue; } foreach (var child in children) { var dependencies = context.GetDependencies(child); if (!dependencies.All(x => assigned.Contains(x.Token))) { continue; } action(child); assigned.Add(child.Token); nodesQueue.Enqueue(child); } } }
public static void ForNodes(this Dictionary<IToken, List<INode>> nodeDependencies, TreeContext context, Action<INode> action) { var nodesQueue = new Queue<INode>(new[] { context.Tree.Root }); var assigned = new HashSet<IToken> { context.Tree.Root.Token }; while (nodesQueue.Any()) { var current = nodesQueue.Dequeue(); List<INode> children; if (!nodeDependencies.TryGetValue(current.Token, out children)) { continue; } foreach (var child in children) { var dependencies = context.GetDependencies(child); if (!dependencies.All(x => assigned.Contains(x.Token))) { continue; } action(child); assigned.Add(child.Token); nodesQueue.Enqueue(child); } } }
public static INode GetAssignmentNode(this TreeContext context, IDepend depend) { return(context.GetDependencies(depend) .OrderByDescending(x => x.GetParentalChain().Count) .First()); }