setSPTEntryTo(toSPTEntry).setSPTEntry(fromSPTEntry). setWeight(weight); path.extract();
protected void updateBestPath(EdgeIteratorState edgeState, SPTEntry entry, int traversalId, boolean reverse) { SPTEntry entryOther = bestWeightMapOther.get(traversalId); if (entryOther == null) return; // update μ double weight = entry.getWeightOfVisitedPath() + entryOther.getWeightOfVisitedPath(); if (traversalMode.isEdgeBased()) { if (entryOther.edge != entry.edge) throw new IllegalStateException("cannot happen for edge based execution of " + getName()); if (entryOther.adjNode != entry.adjNode) { // prevents the path to contain the edge at the meeting point twice and subtracts the weight (excluding turn weight => no previous edge) entry = entry.getParent(); weight -= weighting.calcWeight(edgeState, reverse, EdgeIterator.NO_EDGE); } else if (!traversalMode.hasUTurnSupport()) // we detected a u-turn at meeting point, skip if not supported return; } if (weight < bestPath.getWeight()) { bestPath.setSwitchToFrom(reverse); bestPath.setSPTEntry(entry); bestPath.setSPTEntryTo(entryOther); bestPath.setWeight(weight); } }
@Override protected void updateBestPath(EdgeIteratorState edgeState, SPTEntry entryCurrent, int traversalId) { SPTEntry entryOther = bestWeightMapOther.get(traversalId); if (entryOther == null) return; boolean reverse = bestWeightMapFrom == bestWeightMapOther; // update μ double newWeight = entryCurrent.weight + entryOther.weight; if (traversalMode.isEdgeBased()) { if (entryOther.edge != entryCurrent.edge) throw new IllegalStateException("cannot happen for edge based execution of " + getName()); if (entryOther.adjNode != entryCurrent.adjNode) { // prevents the path to contain the edge at the meeting point twice and subtract the weight (excluding turn weight => no previous edge) entryCurrent = entryCurrent.parent; newWeight -= weighting.calcWeight(edgeState, reverse, EdgeIterator.NO_EDGE); } else if (!traversalMode.hasUTurnSupport()) // we detected a u-turn at meeting point, skip if not supported return; } if (newWeight < bestPath.getWeight()) { bestPath.setSwitchToFrom(reverse); bestPath.setSPTEntry(entryCurrent); bestPath.setWeight(newWeight); bestPath.setSPTEntryTo(entryOther); } }
bestPath.setSPTEntry(entryCurrent); bestPath.setWeight(newWeight); bestPath.setSPTEntryTo(entryOther);
protected void updateBestPath(EdgeIteratorState edgeState, SPTEntry entry, int traversalId, boolean reverse) { SPTEntry entryOther = bestWeightMapOther.get(traversalId); if (entryOther == null) return; // update μ double weight = entry.getWeightOfVisitedPath() + entryOther.getWeightOfVisitedPath(); if (traversalMode.isEdgeBased()) { if (entryOther.edge != entry.edge) throw new IllegalStateException("cannot happen for edge based execution of " + getName()); if (entryOther.adjNode != entry.adjNode) { // prevents the path to contain the edge at the meeting point twice and subtracts the weight (excluding turn weight => no previous edge) entry = entry.getParent(); weight -= weighting.calcWeight(edgeState, reverse, EdgeIterator.NO_EDGE); } else if (!traversalMode.hasUTurnSupport()) // we detected a u-turn at meeting point, skip if not supported return; } if (weight < bestPath.getWeight()) { bestPath.setSwitchToFrom(reverse); bestPath.setSPTEntry(entry); bestPath.setSPTEntryTo(entryOther); bestPath.setWeight(weight); } }
setSPTEntryTo(toSPTEntry).setSPTEntry(fromSPTEntry). setWeight(weight); path.extract();
setSPTEntryTo(toSPTEntry).setSPTEntry(fromSPTEntry). setWeight(weight); path.extract();
setSPTEntryTo(toSPTEntry).setSPTEntry(fromSPTEntry). setWeight(weight); path.extract();