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);
                }
            }
        }
Ejemplo n.º 3
0
 public static INode GetAssignmentNode(this TreeContext context, IDepend depend)
 {
     return(context.GetDependencies(depend)
            .OrderByDescending(x => x.GetParentalChain().Count)
            .First());
 }