Source:
<code>private void propagateTransit (int targetIndex) { TIntIntMap pointToStopDistanceTable = targets.pointToStopDistanceTables.get(targetIndex); if (pointToStopDistanceTable != null) { pointToStopDistanceTable.forEachEntry((stop, distanceMillimeters) -> { <START> if (distanceMillimeters / speedMillimetersPerSecond <= egressLegTimeLimitSeconds) { <END> for (int iteration = 0; iteration < nIterations; iteration++) { int timeAtStop = travelTimesToStop[stop][iteration]; if (timeAtStop > cutoffSeconds || timeAtStop > perIterationTravelTimes[iteration]) { continue; } int timeAtTarget = timeAtStop + distanceMillimeters / speedMillimetersPerSecond; if (timeAtTarget < cutoffSeconds && timeAtTarget < perIterationTravelTimes[iteration]) { perIterationTravelTimes[iteration] = timeAtTarget; if (calculateComponents) { Path[] pathsToStops = pathsToStopsForIteration.get(iteration); perIterationPaths[iteration] = pathsToStops[stop]; } } } } return true; }); } }</code><technical_language>Thanks for pointing out core change. if I understand right applying distance limits walking access legs, now; applying distance limits transfers refactored for clarity; applying distance limits egress legs now. distance limits shorten egress distances, making maximum length building distance tables. surprise people in some cases I guess applying limits all. refactor pull this division foreach loop - division is a slow operation I if JVM figure out variables change loop iteration, especially loop body is a lambda function call. applying egress distance limit egress time limit</technical_language>

Target:
private void propagateTransit (int targetIndex) { TIntIntMap pointToStopLinkageCostTable = targets.pointToStopLinkageCostTables.get(targetIndex); StreetRouter.State.RoutingVariable unit = targets.linkageCostUnit; int egressLimit; if (unit == StreetRouter.State.RoutingVariable.DURATION_SECONDS) { egressLimit = egressLegTimeLimitSeconds; } else if (unit == StreetRouter.State.RoutingVariable.DISTANCE_MILLIMETERS) { egressLimit = egressLegTimeLimitSeconds * speedMillimetersPerSecond; } else { throw new UnsupportedOperationException("Linkage costs have an unknown unit."); } if (pointToStopLinkageCostTable != null) { pointToStopLinkageCostTable.forEachEntry((stop, linkageCost) -> { if (linkageCost < egressLimit){ for (int iteration = 0; iteration < nIterations; iteration++) { int timeAtStop = travelTimesToStop[stop][iteration]; if (timeAtStop > cutoffSeconds || timeAtStop > perIterationTravelTimes[iteration]) { continue; } int secondsFromStopToTarget; if (unit == StreetRouter.State.RoutingVariable.DISTANCE_MILLIMETERS) { secondsFromStopToTarget = linkageCost / speedMillimetersPerSecond; } else if (unit == StreetRouter.State.RoutingVariable.DURATION_SECONDS) { secondsFromStopToTarget = linkageCost; } else { throw new UnsupportedOperationException("Linkage costs have an unknown unit."); } int timeAtTarget = timeAtStop + secondsFromStopToTarget; if (timeAtTarget < cutoffSeconds && timeAtTarget < perIterationTravelTimes[iteration]) { perIterationTravelTimes[iteration] = timeAtTarget; if (calculateComponents) { Path[] pathsToStops = pathsToStopsForIteration.get(iteration); perIterationPaths[iteration] = pathsToStops[stop]; } } } } return true; }); } }