PHPAnalysis.CFGCTLPreparation.AddSelfLoops C# (CSharp) Метод

AddSelfLoops() публичный Метод

public AddSelfLoops ( EdgeTag>.BidirectionalGraph graph ) : void
graph EdgeTag>.BidirectionalGraph
Результат void
        public void AddSelfLoops(BidirectionalGraph<CFGBlock, TaggedEdge<CFGBlock, EdgeTag>> graph)
        {
            foreach (var vertex in graph.Vertices)
            {
                if (!graph.OutEdges(vertex).Any())
                {
                    graph.AddEdge (new TaggedEdge<CFGBlock, EdgeTag> (vertex, vertex, new EdgeTag (EdgeType.Normal)));
                }
            }
        }

Usage Example

Пример #1
0
        private static File BuildFileCFGAndExtractFileInformation(KeyValuePair<string, XmlDocument> parsedFile)
        {
            var traverser = new XmlTraverser ();
            var metricAnalyzer = new MetricVisitor ();
            var extractor = new ClassAndFunctionExtractor ();
            var printer = new ASTPrinter (Console.Out);
            var cfgcreator = new SuperCFGCreator ();

            traverser.AddVisitor (extractor);
            traverser.AddVisitor (metricAnalyzer);

            traverser.Traverse (parsedFile.Value.FirstChild.NextSibling);
            cfgcreator.Traverse (parsedFile.Value.FirstChild.NextSibling);

            var ctlPrep = new CFGCTLPreparation ();
            ctlPrep.AddSelfLoops (cfgcreator.Graph);

            File file = new File (parsedFile.Value) {
                CFG = cfgcreator.Graph,
                FullPath = parsedFile.Key,
                Interfaces = extractor.Interfaces.GroupBy (i => i.Name, i => i).ToDictionary (i => i.Key, i => i.ToList ()),
                Classes = extractor.Classes.GroupBy (c => c.Name, c => c).ToDictionary (c => c.Key, c => c.ToList ()),
                Closures = extractor.Closures.ToArray (),
                Functions = extractor.Functions.GroupBy (i => i.Name, i => i).ToDictionary (i => i.Key, i => i.ToList ())
            };
            return file;
        }
CFGCTLPreparation