Esempio n. 1
0
        public override List <GraphNode <SStatement> > BuildGraphNodes(Graph <SStatement> graph,
                                                                       List <GraphNode <SStatement> > previousNodes)
        {
            var currentNode = graph.AddNode(new GraphNode <SStatement>(this));

            foreach (var node in previousNodes)
            {
                graph.AddDirectedEdge(node, currentNode, 1);
            }

            var currentNodes = new List <GraphNode <SStatement> > {
                currentNode
            };
            var ntrue = IfTrueStatement.BuildGraphNodes(graph, currentNodes);

            if (ElseStatement != null)
            {
                var nfalse = ElseStatement.BuildGraphNodes(graph, currentNodes);
                ntrue.AddRange(nfalse);
            }
            else
            {
                ntrue.Add(currentNode);
            }

            previousNodes = NextStatement != null?NextStatement.BuildGraphNodes(graph, ntrue) : ntrue;

            return(previousNodes);
        }
Esempio n. 2
0
        public override List <GraphNode <SStatement> > BuildGraphNodes(Graph <SStatement> graph,
                                                                       List <GraphNode <SStatement> > previousNodes)
        {
            var currentNodes = new List <GraphNode <SStatement> >();
            var currentNode  = graph.AddNode(new GraphNode <SStatement>(this));

            graph.AddDirectedEdges(previousNodes, currentNode, 1);

            var currentNodeList = new List <GraphNode <SStatement> > {
                currentNode
            };
            var nextNode = new List <GraphNode <SStatement> >();

            if (SwitchStatement != null)
            {
                nextNode.AddRange(SwitchStatement.BuildGraphNodes(graph, currentNodeList));
            }

            foreach (var jumpTarget in jumpTargets)
            {
                var a = FindNodes(graph, jumpTarget.NextStatement);
                if (a != null)
                {
                    foreach (var graphNode in a)
                    {
                        graphNode.Neighbors.Clear();
                        graphNode.Costs.Clear();
                    }
                }

                AddDirectedEdgeToElements(graph, currentNode.Value, jumpTarget.LabeledStatement);
                currentNodes.AddRange(FindNodes(graph, jumpTarget.NextStatement));
            }

            currentNodes.AddRange(nextNode);

            //todo: change default on enum
            if (jumpTargets.Count(q => q.CodeString == "default") == 0)
            {
                currentNodes.Add(currentNode);
            }

            if (NextStatement != null)
            {
                currentNodes = new List <GraphNode <SStatement> >(NextStatement.BuildGraphNodes(graph, currentNodes));
            }

            return(currentNodes);
        }