Skip to content

Commit a2a11c8

Browse files
committed
avoid traversalKey and use traversalId or edgeKey instead, depending on the use case graphhopper#1549
1 parent 5cc82b7 commit a2a11c8

File tree

16 files changed

+64
-64
lines changed

16 files changed

+64
-64
lines changed

core/files/changelog.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
0.12
2-
renamed public TraversalMode.createTraversalId => TraversalMode.createTraversalKey, protected AbstractBidirAlgo.getTraversalId => AbstractBidirAlgo.getTraversalKey
2+
renamed VirtualEdgeIteratorState.getOriginalEdgeKey to more precise getOriginalEdgeKey #1549
33
access refactoring #1436 that moves AccessValue into SpatialRule.Access
44
refactoring of EncodingManager to use builder pattern. Migration should be simple. Replace new EncodingManager with EncodingManager.create
55
The methods GraphHopper.setEnableInstructions/setPreferredLanguage is now in EncodingManager.Builder

core/src/main/java/com/graphhopper/routing/AStar.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,15 @@ private Path runAlgo() {
103103
if (Double.isInfinite(alreadyVisitedWeight))
104104
continue;
105105

106-
int traversalKey = traversalMode.createTraversalKey(iter, false);
107-
AStarEntry ase = fromMap.get(traversalKey);
106+
int traversalId = traversalMode.createTraversalId(iter, false);
107+
AStarEntry ase = fromMap.get(traversalId);
108108
if (ase == null || ase.weightOfVisitedPath > alreadyVisitedWeight) {
109109
int neighborNode = iter.getAdjNode();
110110
currWeightToGoal = weightApprox.approximate(neighborNode);
111111
estimationFullWeight = alreadyVisitedWeight + currWeightToGoal;
112112
if (ase == null) {
113113
ase = new AStarEntry(iter.getEdge(), neighborNode, estimationFullWeight, alreadyVisitedWeight);
114-
fromMap.put(traversalKey, ase);
114+
fromMap.put(traversalId, ase);
115115
} else {
116116
// assert (ase.weight > 0.9999999 * estimationFullWeight) : "Inconsistent distance estimate. It is expected weight >= estimationFullWeight but was "
117117
// + ase.weight + " < " + estimationFullWeight + " (" + ase.weight / estimationFullWeight + "), and weightOfVisitedPath:"
@@ -126,7 +126,7 @@ private Path runAlgo() {
126126
ase.parent = currEdge;
127127
prioQueueOpenSet.add(ase);
128128

129-
updateBestPath(iter, ase, traversalKey);
129+
updateBestPath(iter, ase, traversalId);
130130
}
131131
}
132132

@@ -157,7 +157,7 @@ public int getVisitedNodes() {
157157
return visitedCount;
158158
}
159159

160-
protected void updateBestPath(EdgeIteratorState edgeState, SPTEntry bestSPTEntry, int traversalKey) {
160+
protected void updateBestPath(EdgeIteratorState edgeState, SPTEntry bestSPTEntry, int traversalId) {
161161
}
162162

163163
public static class AStarEntry extends SPTEntry {

core/src/main/java/com/graphhopper/routing/AbstractBidirAlgo.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -216,14 +216,14 @@ private void fillEdges(SPTEntry currEdge, PriorityQueue<SPTEntry> prioQueue,
216216
continue;
217217

218218
final int origEdgeId = getOrigEdgeId(iter, reverse);
219-
final int traversalKey = getTraversalKey(iter, origEdgeId, reverse);
219+
final int traversalId = getTraversalId(iter, origEdgeId, reverse);
220220
final double weight = calcWeight(iter, currEdge, reverse);
221221
if (Double.isInfinite(weight))
222222
continue;
223-
SPTEntry entry = bestWeightMap.get(traversalKey);
223+
SPTEntry entry = bestWeightMap.get(traversalId);
224224
if (entry == null) {
225225
entry = createEntry(iter, origEdgeId, weight, currEdge, reverse);
226-
bestWeightMap.put(traversalKey, entry);
226+
bestWeightMap.put(traversalId, entry);
227227
prioQueue.add(entry);
228228
} else if (entry.getWeightOfVisitedPath() > weight) {
229229
prioQueue.remove(entry);
@@ -233,12 +233,12 @@ private void fillEdges(SPTEntry currEdge, PriorityQueue<SPTEntry> prioQueue,
233233
continue;
234234

235235
if (updateBestPath)
236-
updateBestPath(iter, entry, traversalKey, reverse);
236+
updateBestPath(iter, entry, traversalId, reverse);
237237
}
238238
}
239239

240-
protected void updateBestPath(EdgeIteratorState edgeState, SPTEntry entry, int traversalKey, boolean reverse) {
241-
SPTEntry entryOther = bestWeightMapOther.get(traversalKey);
240+
protected void updateBestPath(EdgeIteratorState edgeState, SPTEntry entry, int traversalId, boolean reverse) {
241+
SPTEntry entryOther = bestWeightMapOther.get(traversalId);
242242
if (entryOther == null)
243243
return;
244244

@@ -283,8 +283,8 @@ protected int getIncomingEdge(SPTEntry entry) {
283283
return entry.edge;
284284
}
285285

286-
protected int getTraversalKey(EdgeIteratorState edge, int origEdgeId, boolean reverse) {
287-
return traversalMode.createTraversalKey(edge, reverse);
286+
protected int getTraversalId(EdgeIteratorState edge, int origEdgeId, boolean reverse) {
287+
return traversalMode.createTraversalId(edge, reverse);
288288
}
289289

290290
protected double calcWeight(EdgeIteratorState iter, SPTEntry currEdge, boolean reverse) {

core/src/main/java/com/graphhopper/routing/AbstractBidirectionEdgeCHNoSOD.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public boolean finished() {
7878
}
7979

8080
@Override
81-
protected void updateBestPath(EdgeIteratorState edgeState, SPTEntry entry, int traversalKey, boolean reverse) {
81+
protected void updateBestPath(EdgeIteratorState edgeState, SPTEntry entry, int traversalId, boolean reverse) {
8282
// special case where the fwd/bwd search runs directly into the opposite node, for example if the highest level
8383
// node of the shortest path matches the source or target. in this case one of the searches does not contribute
8484
// anything to the shortest path.
@@ -142,7 +142,7 @@ protected int getIncomingEdge(SPTEntry entry) {
142142
}
143143

144144
@Override
145-
protected int getTraversalKey(EdgeIteratorState edge, int origEdgeId, boolean reverse) {
145+
protected int getTraversalId(EdgeIteratorState edge, int origEdgeId, boolean reverse) {
146146
int baseNode = graph.getOtherNode(origEdgeId, edge.getAdjNode());
147147
return GHUtility.createEdgeKey(baseNode, edge.getAdjNode(), origEdgeId, reverse);
148148
}

core/src/main/java/com/graphhopper/routing/AlternativeRoute.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,8 @@ public List<AlternativeInfo> calcAlternatives(final int maxPaths,
300300
final double maxShareFactor, final double shareInfluence,
301301
final double minPlateauFactor, final double plateauInfluence) {
302302
final double maxWeight = maxWeightFactor * bestPath.getWeight();
303-
final GHIntObjectHashMap<IntSet> traversalKeyMap = new GHIntObjectHashMap<>();
304-
final AtomicInteger startTID = addToMap(traversalKeyMap, bestPath);
303+
final GHIntObjectHashMap<IntSet> traversalIdMap = new GHIntObjectHashMap<>();
304+
final AtomicInteger startTID = addToMap(traversalIdMap, bestPath);
305305

306306
// find all 'good' alternatives from forward-SPT matching the backward-SPT and optimize by
307307
// small total weight (1), small share and big plateau (3a+b) and do these expensive calculations
@@ -321,8 +321,8 @@ public List<AlternativeInfo> calcAlternatives(final int maxPaths,
321321

322322
bestWeightMapFrom.forEach(new IntObjectPredicate<SPTEntry>() {
323323
@Override
324-
public boolean apply(final int traversalKey, final SPTEntry fromSPTEntry) {
325-
SPTEntry toSPTEntry = bestWeightMapTo.get(traversalKey);
324+
public boolean apply(final int traversalId, final SPTEntry fromSPTEntry) {
325+
SPTEntry toSPTEntry = bestWeightMapTo.get(traversalId);
326326
if (toSPTEntry == null)
327327
return true;
328328

@@ -357,9 +357,9 @@ public boolean apply(final int traversalKey, final SPTEntry fromSPTEntry) {
357357
// e.g. when starting point has two edges and one is part of the best path the other edge is path of an alternative
358358
assert traversalMode.isEdgeBased();
359359
} else {
360-
int nextToTraversalKey = traversalMode.createTraversalKey(tmpFromEntry.adjNode,
360+
int nextToTraversalId = traversalMode.createTraversalId(tmpFromEntry.adjNode,
361361
tmpFromEntry.parent.adjNode, tmpFromEntry.edge, true);
362-
SPTEntry tmpNextToSPTEntry = bestWeightMapTo.get(nextToTraversalKey);
362+
SPTEntry tmpNextToSPTEntry = bestWeightMapTo.get(nextToTraversalId);
363363
if (tmpNextToSPTEntry == null)
364364
return true;
365365

@@ -385,10 +385,10 @@ public boolean apply(final int traversalKey, final SPTEntry fromSPTEntry) {
385385
SPTEntry prevToSPTEntry = toSPTEntry;
386386
// List<Integer> plateauEdges = new ArrayList<Integer>();
387387
while (prevToSPTEntry.parent != null) {
388-
int nextFromTraversalKey = traversalMode.createTraversalKey(prevToSPTEntry.adjNode, prevToSPTEntry.parent.adjNode,
388+
int nextFromTraversalId = traversalMode.createTraversalId(prevToSPTEntry.adjNode, prevToSPTEntry.parent.adjNode,
389389
prevToSPTEntry.edge, false);
390390

391-
SPTEntry nextFromSPTEntry = bestWeightMapFrom.get(nextFromTraversalKey);
391+
SPTEntry nextFromSPTEntry = bestWeightMapFrom.get(nextFromTraversalId);
392392
// end of a plateau
393393
if (nextFromSPTEntry == null)
394394
break;
@@ -428,7 +428,7 @@ public boolean apply(final int traversalKey, final SPTEntry fromSPTEntry) {
428428

429429
// for now do not add alternatives to set, if we do we need to remove then on alternatives.clear too (see below)
430430
// AtomicInteger tid = addToMap(traversalIDMap, path);
431-
// int tid = traversalMode.createTraversalKey(path.calcEdges().get(0), false);
431+
// int tid = traversalMode.createTraversalId(path.calcEdges().get(0), false);
432432
alternatives.add(new AlternativeInfo(sortBy, path, fromEE, toEE, shareWeight, altNames));
433433

434434
Collections.sort(alternatives, ALT_COMPARATOR);
@@ -449,7 +449,7 @@ public boolean apply(final int traversalKey, final SPTEntry fromSPTEntry) {
449449
SPTEntry getFirstShareEE(SPTEntry startEE, boolean reverse) {
450450
while (startEE.parent != null) {
451451
// TODO we could make use of traversal ID directly if stored in SPTEntry
452-
int tid = traversalMode.createTraversalKey(startEE.adjNode, startEE.parent.adjNode, startEE.edge, reverse);
452+
int tid = traversalMode.createTraversalId(startEE.adjNode, startEE.parent.adjNode, startEE.edge, reverse);
453453
if (isAlreadyExisting(tid))
454454
return startEE;
455455

@@ -465,7 +465,7 @@ SPTEntry getFirstShareEE(SPTEntry startEE, boolean reverse) {
465465
*/
466466
boolean isAlreadyExisting(final int tid) {
467467
final AtomicBoolean exists = new AtomicBoolean(false);
468-
traversalKeyMap.forEach(new IntObjectPredicate<IntSet>() {
468+
traversalIdMap.forEach(new IntObjectPredicate<IntSet>() {
469469
@Override
470470
public boolean apply(int key, IntSet set) {
471471
if (set.contains(tid)) {
@@ -524,7 +524,7 @@ AtomicInteger addToMap(GHIntObjectHashMap<IntSet> map, Path path) {
524524
IntSet set = new GHIntHashSet();
525525
final AtomicInteger startTID = new AtomicInteger(-1);
526526
for (EdgeIteratorState iterState : path.calcEdges()) {
527-
int tid = traversalMode.createTraversalKey(iterState, false);
527+
int tid = traversalMode.createTraversalId(iterState, false);
528528
set.add(tid);
529529
if (startTID.get() < 0) {
530530
// for node based traversal we need to explicitely add base node as starting node and to list

core/src/main/java/com/graphhopper/routing/Dijkstra.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -80,16 +80,16 @@ protected void runAlgo() {
8080
if (!accept(iter, currEdge.edge))
8181
continue;
8282

83-
int traversalKey = traversalMode.createTraversalKey(iter, false);
83+
int traversalId = traversalMode.createTraversalId(iter, false);
8484
double tmpWeight = weighting.calcWeight(iter, false, currEdge.edge) + currEdge.weight;
8585
if (Double.isInfinite(tmpWeight))
8686
continue;
8787

88-
SPTEntry nEdge = fromMap.get(traversalKey);
88+
SPTEntry nEdge = fromMap.get(traversalId);
8989
if (nEdge == null) {
9090
nEdge = new SPTEntry(iter.getEdge(), iter.getAdjNode(), tmpWeight);
9191
nEdge.parent = currEdge;
92-
fromMap.put(traversalKey, nEdge);
92+
fromMap.put(traversalId, nEdge);
9393
fromHeap.add(nEdge);
9494
} else if (nEdge.weight > tmpWeight) {
9595
fromHeap.remove(nEdge);
@@ -100,7 +100,7 @@ protected void runAlgo() {
100100
} else
101101
continue;
102102

103-
updateBestPath(iter, nEdge, traversalKey);
103+
updateBestPath(iter, nEdge, traversalId);
104104
}
105105

106106
if (fromHeap.isEmpty())
@@ -131,7 +131,7 @@ public int getVisitedNodes() {
131131
return visitedNodes;
132132
}
133133

134-
protected void updateBestPath(EdgeIteratorState edgeState, SPTEntry bestSPTEntry, int traversalKey) {
134+
protected void updateBestPath(EdgeIteratorState edgeState, SPTEntry bestSPTEntry, int traversalId) {
135135
}
136136

137137
@Override

core/src/main/java/com/graphhopper/routing/DijkstraBidirectionCH.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ private boolean entryIsStallable(SPTEntry entry, IntObjectMap<SPTEntry> bestWeig
6262
// reached via a suboptimal path. We do this regardless of the CH level of the adjacent nodes.
6363
EdgeIterator iter = edgeExplorer.setBaseNode(entry.adjNode);
6464
while (iter.next()) {
65-
int traversalKey = traversalMode.createTraversalKey(iter, reverse);
66-
SPTEntry adjNode = bestWeightMap.get(traversalKey);
65+
int traversalId = traversalMode.createTraversalId(iter, reverse);
66+
SPTEntry adjNode = bestWeightMap.get(traversalId);
6767
if (adjNode != null &&
6868
adjNode.weight + weighting.calcWeight(iter, !reverse, getIncomingEdge(entry)) < entry.weight) {
6969
return true;

core/src/main/java/com/graphhopper/routing/QueryGraph.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,8 @@ public int compare(QueryResult o1, QueryResult o2) {
298298

299299
GHPoint3D prevPoint = fullPL.toGHPoint(0);
300300
int adjNode = closestEdge.getAdjNode();
301-
int origTraversalKey = GHUtility.createEdgeKey(baseNode, adjNode, closestEdge.getEdge(), false);
302-
int origRevTraversalKey = GHUtility.createEdgeKey(baseNode, adjNode, closestEdge.getEdge(), true);
301+
int origEdgeKey = GHUtility.createEdgeKey(baseNode, adjNode, closestEdge.getEdge(), false);
302+
int origRevEdgeKey = GHUtility.createEdgeKey(baseNode, adjNode, closestEdge.getEdge(), true);
303303
int prevWayIndex = 1;
304304
int prevNodeId = baseNode;
305305
int virtNodeId = virtualNodes.getSize() + mainNodes;
@@ -323,7 +323,7 @@ public int compare(QueryResult o1, QueryResult o2) {
323323

324324
queryResults.add(res);
325325
boolean isPillar = res.getSnappedPosition() == QueryResult.Position.PILLAR;
326-
createEdges(origTraversalKey, origRevTraversalKey,
326+
createEdges(origEdgeKey, origRevEdgeKey,
327327
prevPoint, prevWayIndex, isPillar,
328328
res.getSnappedPoint(), res.getWayIndex(),
329329
fullPL, closestEdge, prevNodeId, virtNodeId);
@@ -346,7 +346,7 @@ public int compare(QueryResult o1, QueryResult o2) {
346346

347347
// two edges between last result and adjacent node are still missing if not all points skipped
348348
if (addedEdges)
349-
createEdges(origTraversalKey, origRevTraversalKey,
349+
createEdges(origEdgeKey, origRevEdgeKey,
350350
prevPoint, prevWayIndex, false,
351351
fullPL.toGHPoint(fullPL.getSize() - 1), fullPL.getSize() - 2,
352352
fullPL, closestEdge, virtNodeId - 1, adjNode);
@@ -390,7 +390,7 @@ public QueryGraph setUseEdgeExplorerCache(boolean useEECache) {
390390
return this;
391391
}
392392

393-
private void createEdges(int origTraversalKey, int origRevTraversalKey,
393+
private void createEdges(int origEdgeKey, int origRevEdgeKey,
394394
GHPoint3D prevSnapped, int prevWayIndex, boolean isPillar, GHPoint3D currSnapped, int wayIndex,
395395
PointList fullPL, EdgeIteratorState closestEdge,
396396
int prevNodeId, int nodeId) {
@@ -412,9 +412,9 @@ private void createEdges(int origTraversalKey, int origRevTraversalKey,
412412

413413
boolean reverse = closestEdge.get(EdgeIteratorState.REVERSE_STATE);
414414
// edges between base and snapped point
415-
VirtualEdgeIteratorState baseEdge = new VirtualEdgeIteratorState(origTraversalKey,
415+
VirtualEdgeIteratorState baseEdge = new VirtualEdgeIteratorState(origEdgeKey,
416416
virtEdgeId, prevNodeId, nodeId, baseDistance, closestEdge.getFlags(), closestEdge.getName(), basePoints, reverse);
417-
VirtualEdgeIteratorState baseReverseEdge = new VirtualEdgeIteratorState(origRevTraversalKey,
417+
VirtualEdgeIteratorState baseReverseEdge = new VirtualEdgeIteratorState(origRevEdgeKey,
418418
virtEdgeId, nodeId, prevNodeId, baseDistance, IntsRef.deepCopyOf(closestEdge.getFlags()), closestEdge.getName(), baseReversePoints, !reverse);
419419

420420
baseEdge.setReverseEdge(baseReverseEdge);

core/src/main/java/com/graphhopper/routing/VirtualEdgeIteratorState.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public class VirtualEdgeIteratorState implements EdgeIteratorState, CHEdgeIterat
3838
private final int edgeId;
3939
private final int baseNode;
4040
private final int adjNode;
41-
private final int originalTraversalKey;
41+
private final int originalEdgeKey;
4242
private double distance;
4343
private IntsRef edgeFlags;
4444
private String name;
@@ -47,9 +47,9 @@ public class VirtualEdgeIteratorState implements EdgeIteratorState, CHEdgeIterat
4747
private EdgeIteratorState reverseEdge;
4848
private final boolean reverse;
4949

50-
public VirtualEdgeIteratorState(int originalTraversalKey, int edgeId, int baseNode, int adjNode, double distance,
50+
public VirtualEdgeIteratorState(int originalEdgeKey, int edgeId, int baseNode, int adjNode, double distance,
5151
IntsRef edgeFlags, String name, PointList pointList, boolean reverse) {
52-
this.originalTraversalKey = originalTraversalKey;
52+
this.originalEdgeKey = originalEdgeKey;
5353
this.edgeId = edgeId;
5454
this.baseNode = baseNode;
5555
this.adjNode = adjNode;
@@ -61,13 +61,13 @@ public VirtualEdgeIteratorState(int originalTraversalKey, int edgeId, int baseNo
6161
}
6262

6363
/**
64-
* This method returns the original edge via its traversal key. I.e. also the direction is
64+
* This method returns the original edge via its key. I.e. also the direction is
6565
* already correctly encoded.
6666
*
6767
* @see GHUtility#createEdgeKey(int, int, int, boolean)
6868
*/
69-
public int getOriginalTraversalKey() {
70-
return originalTraversalKey;
69+
public int getOriginalEdgeKey() {
70+
return originalEdgeKey;
7171
}
7272

7373
@Override

0 commit comments

Comments
 (0)