Exemplo n.º 1
0
        private void Visit(BfsTopologicalNode node)
        {
            //If the node was found in the depth stack, report an error as this means a circular dependence was found.
            if (stackVisitedNodes.Contains(node))
            {
                List<BfsTopologicalNode> reversed = new List<BfsTopologicalNode>(stackVisitedNodes);
                reversed.Reverse();
                StringBuilder b = new StringBuilder("A circular depencence was detected: ");
                foreach (BfsTopologicalNode topoNode in reversed)
                    b.Append( topoNode.NamedField.Name + " -> ");
                b.Append(node.NamedField.Name);
                BfsCompiler.ReportError(node.NamedField.SourceRange,b.ToString());
            }

            if (!node.Visited)
            {
                node.Visited = true;
                stackVisitedNodes.Push(node);
                foreach (BfsTopologicalNode subnode in node.Nodes)
                    Visit(subnode);
                stackVisitedNodes.Pop();
                if(this.nodes.Contains(node))
                    resultList.Add(node.NamedField);
            }
        }
Exemplo n.º 2
0
        private BfsTopologicalNode GetTopoNode(IBfsNamedField namedField)
        {
            if (topoDictionary.ContainsKey(namedField))
                return topoDictionary[namedField];

            BfsTopologicalNode newNode = new BfsTopologicalNode(namedField);
            topoDictionary.Add(namedField, newNode);
            return newNode;
        }