public static List <StrongComponent> getTopoOnScc(LoadInnerLogic.Graph graph, Graph graphN = null) { graphN ??= Transform.transformGraph(graph); var graphT = Transform.transformTransposeGraph(graph); return(topoOnScc(StrongComponents(graphN, graphT))); }
private static List <Node> transformNodes(LoadInnerLogic.Graph graph, bool transpose) { var nodes = newNodes(graph.onlyNodes()); //graph succs ? var edges = !transpose ? graph.edges : transposeEdges(graph.edges); nodes.ForEach(node => node.succs = outgoingEdges(node.attr.id, edges) .ConvertAll(edge => new System.Tuple <Node, Dictionary <string, string> >(findNode(edge.tailId, nodes), edge.edgeAttr))); return(nodes); }
private static Graph CreateGraph(LoadInnerLogic.Graph graph, bool transpose = false) { var newGraph = new Graph(graph.Type, new Attributes(graph.id, graph.id, graph.GraphAttr, graph.NodeAttr, graph.EdgeAttr), graph.strict) { subgraphs = transformSubgraphs(graph), nodes = transformNodes(graph, transpose) }; return(newGraph); }
private static List <Attributes> transformSubgraphs(LoadInnerLogic.Graph graph) { return(graph.onlySubgraphs().ConvertAll(sub => new Attributes() { belonging = sub.belonging, EdgeAttr = sub.EdgeAttr, GraphAttr = sub.GraphAttr, NodeAttr = sub.NodeAttr, id = sub.id })); }
public static Graph transformGraph(LoadInnerLogic.Graph graph) => CreateGraph(graph);
public static Graph transformTransposeGraph(LoadInnerLogic.Graph graph) => CreateGraph(graph, true);