@@ -487,6 +487,8 @@ protected static class EdgeIterable implements EdgeExplorer, EdgeIterator
487
487
boolean reverse ;
488
488
final BaseGraph baseGraph ;
489
489
EdgeAccess edgeAccess ;
490
+ private boolean freshFlags ;
491
+ private long cachedFlags ;
490
492
491
493
public EdgeIterable ( BaseGraph baseGraph , EdgeAccess edgeAccess , EdgeFilter filter )
492
494
{
@@ -522,7 +524,7 @@ final boolean init( int tmpEdgeId, int expectedAdjNode )
522
524
nextEdgeId = EdgeIterator .NO_EDGE ;
523
525
if (expectedAdjNode == adjNode || expectedAdjNode == Integer .MIN_VALUE )
524
526
{
525
- reverse = false ;
527
+ reverse = false ;
526
528
return true ;
527
529
} else if (expectedAdjNode == baseNode )
528
530
{
@@ -579,6 +581,7 @@ public final boolean next()
579
581
edgeId = nextEdgeId ;
580
582
adjNode = edgeAccess .getOtherNode (baseNode , edgePointer );
581
583
reverse = baseNode > adjNode ;
584
+ freshFlags = false ;
582
585
583
586
// position to next edge
584
587
nextEdgeId = edgeAccess .edges .getInt (edgeAccess .getLinkPosInEdgeArea (baseNode , adjNode , edgePointer ));
@@ -613,12 +616,19 @@ public final EdgeIteratorState setDistance( double dist )
613
616
@ Override
614
617
public final long getFlags ()
615
618
{
616
- return edgeAccess .getFlags_ (edgePointer , reverse );
619
+ if (!freshFlags )
620
+ {
621
+ cachedFlags = edgeAccess .getFlags_ (edgePointer , reverse );
622
+ freshFlags = true ;
623
+ }
624
+ return cachedFlags ;
617
625
}
618
626
619
627
@ Override
620
628
public final EdgeIteratorState setFlags ( long fl )
621
- {
629
+ {
630
+ cachedFlags = fl ;
631
+ freshFlags = true ;
622
632
edgeAccess .setFlags_ (edgePointer , reverse , fl );
623
633
return this ;
624
634
}
0 commit comments