Skip to content

Commit 8b024cd

Browse files
author
Peter
committed
cache flags in EdgeIterable
1 parent ccc1f95 commit 8b024cd

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

core/src/main/java/com/graphhopper/storage/BaseGraph.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,8 @@ protected static class EdgeIterable implements EdgeExplorer, EdgeIterator
487487
boolean reverse;
488488
final BaseGraph baseGraph;
489489
EdgeAccess edgeAccess;
490+
private boolean freshFlags;
491+
private long cachedFlags;
490492

491493
public EdgeIterable( BaseGraph baseGraph, EdgeAccess edgeAccess, EdgeFilter filter )
492494
{
@@ -522,7 +524,7 @@ final boolean init( int tmpEdgeId, int expectedAdjNode )
522524
nextEdgeId = EdgeIterator.NO_EDGE;
523525
if (expectedAdjNode == adjNode || expectedAdjNode == Integer.MIN_VALUE)
524526
{
525-
reverse = false;
527+
reverse = false;
526528
return true;
527529
} else if (expectedAdjNode == baseNode)
528530
{
@@ -579,6 +581,7 @@ public final boolean next()
579581
edgeId = nextEdgeId;
580582
adjNode = edgeAccess.getOtherNode(baseNode, edgePointer);
581583
reverse = baseNode > adjNode;
584+
freshFlags = false;
582585

583586
// position to next edge
584587
nextEdgeId = edgeAccess.edges.getInt(edgeAccess.getLinkPosInEdgeArea(baseNode, adjNode, edgePointer));
@@ -613,12 +616,19 @@ public final EdgeIteratorState setDistance( double dist )
613616
@Override
614617
public final long getFlags()
615618
{
616-
return edgeAccess.getFlags_(edgePointer, reverse);
619+
if (!freshFlags)
620+
{
621+
cachedFlags = edgeAccess.getFlags_(edgePointer, reverse);
622+
freshFlags = true;
623+
}
624+
return cachedFlags;
617625
}
618626

619627
@Override
620628
public final EdgeIteratorState setFlags( long fl )
621-
{
629+
{
630+
cachedFlags = fl;
631+
freshFlags = true;
622632
edgeAccess.setFlags_(edgePointer, reverse, fl);
623633
return this;
624634
}

core/src/main/java/com/graphhopper/storage/EdgeAccess.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ final long getFlags_( long edgePointer, boolean reverse )
121121
return resFlags;
122122
}
123123

124-
final void setFlags_( long edgePointer, boolean reverse, long flags )
124+
final long setFlags_( long edgePointer, boolean reverse, long flags )
125125
{
126126
if (reverse)
127127
flags = reverseFlags(edgePointer, flags);
@@ -130,6 +130,8 @@ final void setFlags_( long edgePointer, boolean reverse, long flags )
130130

131131
if (flagsSizeIsLong)
132132
edges.setInt(edgePointer + E_FLAGS + 4, bitUtil.getIntHigh(flags));
133+
134+
return flags;
133135
}
134136

135137
/**

0 commit comments

Comments
 (0)