public Set removeEdgesToPlanarity()

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;
  }