ArrayList<Node> deadEndNodes = new ArrayList<Node>(); while (deadEndData.getInDeadEndCount() == incidentNodes.size() - 1) { deadEndNodes.addAll(deadEndData.getDeadEndNodes()); deadEndData.getDeadEndNodes().clear(); deadEndData.setDeadEndEntryNode(node); while (deadEndData.getDeadEndEntryNode() != null && it.hasNext()) { node = it.next(); deadEndData = getNodeData(node); if (deadEndData.getDeadEndEntryNode() == null) { deadEndData.incrementInDeadEndCount(); incidentNodes = getIncidentNodes(node); } else { deadEndData.getDeadEndNodes().addAll(deadEndNodes); for (Node node : network.getNodes().values()) { deadEndData = getNodeData(node); for (Node n : deadEndData.getDeadEndNodes()) { DeadEndData r = getNodeData(n); r.setDeadEndEntryNode(node); deadEndNodeCount++; deadEndData.getDeadEndNodes().clear();
/** * Returns the role for the given Node. Creates a new Role if none exists yet. * @param n The Node for which to create a role. * @return The role for the given Node */ public DeadEndData getNodeData(final Node n) { DeadEndData r = this.nodeData.get(n); if (null == r) { r = new DeadEndData(); this.nodeData.put(n, r); } return r; }
deadEndEntryNodes.add(getPreProcessData(toNode).getDeadEndEntryNode());
this.deadEndEntryNode = getPreProcessData(toNode).getDeadEndEntryNode();
if ((ddData.getDeadEndEntryNode() == null) || (ddOutData.getDeadEndEntryNode() != null) || ((this.deadEndEntryNode != null) && (this.deadEndEntryNode.getId() == ddData.getDeadEndEntryNode().getId()))) { addToPendingNodes(l, n, pendingNodes, currTime, currCost, toNode);
if(ddData.getDeadEndEntryNode()==null || ddOutData.getDeadEndEntryNode()!=null) addToPendingNodes(l, n, pendingNodes, currTime, currCost); else { TO_NODES: for(Node deadEndEntryNode:deadEndEntryNodes) if(deadEndEntryNode != null && deadEndEntryNode.getId() == ddData.getDeadEndEntryNode().getId()) { addToPendingNodes(l, n, pendingNodes, currTime, currCost); break TO_NODES;
this.deadEndEntryNode = getPreProcessData(toNode).getDeadEndEntryNode();
/** * Logic that was previously located in the relaxNode(...) method. * By doing so, the FastDijkstra can overwrite relaxNode without copying the logic. */ /*package*/ void relaxNodeLogic(final Link l, final RouterPriorityQueue<Node> pendingNodes, final double currTime, final double currCost, final Node toNode, final PreProcessDijkstra.DeadEndData ddOutData) { if (this.pruneDeadEnds) { if (canPassLink(l)) { Node n = l.getToNode(); PreProcessDijkstra.DeadEndData ddData = getPreProcessData(n); /* IF the current node n is not in a dead end * OR it is in the same dead end as the fromNode * OR it is in the same dead end as the toNode * THEN we add the current node to the pending nodes */ if ((ddData.getDeadEndEntryNode() == null) || (ddOutData.getDeadEndEntryNode() != null) || ((this.deadEndEntryNode != null) && (this.deadEndEntryNode.getId() == ddData.getDeadEndEntryNode().getId()))) { addToPendingNodes(l, n, pendingNodes, currTime, currCost, toNode); } } } else { if (canPassLink(l)) { addToPendingNodes(l, l.getToNode(), pendingNodes, currTime, currCost, toNode); } } }