in graphLayout/jetbrains.mps.graphLayout.planarization/source_gen/jetbrains/mps/graphLayout/planarization/PQPlanarityTest.java [31:85]
public Set<Edge> removeEdgesToPlanarity(Graph graph, Map<Node, Integer> stNumbering) {
myEdgesOrder = new NodeMap<List<Edge>>(graph);
Set<Edge> removed = SetSequence.fromSet(new LinkedHashSet<Edge>());
if (SHOW_LOG > 0) {
System.out.println("GRAPH!!! " + graph);
System.out.println(stNumbering);
}
Node[] nodeOrder = new Node[graph.getNumNodes()];
for (Node node : ListSequence.fromList(graph.getNodes())) {
nodeOrder[MapSequence.fromMap(stNumbering).get(node)] = node;
}
myTree = new PQTree();
PQNode curPQNode = new PNode(nodeOrder[0], null);
myTree.setRoot(curPQNode);
for (int i = 0; i < nodeOrder.length - 1; i++) {
Node curGraphNode = nodeOrder[i];
for (Edge edge : ListSequence.fromList(curGraphNode.getOutEdges())) {
PNode node = new PNode(edge.getTarget(), edge);
curPQNode.addLastChild(node);
}
Node nextGraphNode = nodeOrder[i + 1];
if (SHOW_LOG > 0) {
System.out.println(myTree);
System.out.println("next node is: " + nextGraphNode);
}
curPQNode = myTree.modifyTree(nextGraphNode);
PQNode parent = curPQNode.getParent();
List<Edge> remainingEdges;
if (parent instanceof QNode) {
remainingEdges = ((QNode) parent).getEdgesOrder().getInEdgesOrder(nextGraphNode);
} else {
remainingEdges = ListSequence.fromListAndArray(new ArrayList<Edge>(), ((PNode) curPQNode).getEdge());
}
Set<Edge> allInEdges = SetSequence.fromSet(new LinkedHashSet<Edge>());
SetSequence.fromSet(allInEdges).addSequence(ListSequence.fromList(nextGraphNode.getEdges(Edge.Direction.BACK)));
SetSequence.fromSet(allInEdges).removeSequence(ListSequence.fromList(remainingEdges));
SetSequence.fromSet(removed).addSequence(SetSequence.fromSet(allInEdges));
}
EdgesOrder order = ((QNode) ListSequence.fromList(myTree.getRoot().getChildren()).first()).getEdgesOrder();
for (Node node : ListSequence.fromList(graph.getNodes())) {
MapSequence.fromMap(myEdgesOrder).put(node, order.getInEdgesOrder(node));
}
if (SHOW_LOG > 0) {
System.out.println(myTree);
for (int i = nodeOrder.length - 1; i >= 0; i--) {
Node node = nodeOrder[i];
System.out.print("node " + node + ":");
System.out.print(" in edges: " + order.getInEdgesOrder(node));
System.out.println(" out edges: " + order.getOutEdgesOrder(node));
}
System.out.println("removed edges: ");
System.out.println(removed);
}
return removed;
}