Skip to content

Commit 4220dea

Browse files
committed
core: fix keepBrakingCurveUnderOverlay() crash when overlay is smaller
Signed-off-by: Pierre-Etienne Bougué <[email protected]>
1 parent 5bcc9bd commit 4220dea

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

core/envelope-sim/src/main/kotlin/fr/sncf/osrd/envelope_sim/etcs/ETCSBrakingCurves.kt

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@ import fr.sncf.osrd.envelope.part.constraints.EnvelopeConstraint
99
import fr.sncf.osrd.envelope.part.constraints.EnvelopePartConstraintType
1010
import fr.sncf.osrd.envelope.part.constraints.PositionConstraint
1111
import fr.sncf.osrd.envelope.part.constraints.SpeedConstraint
12-
import fr.sncf.osrd.envelope_sim.*
12+
import fr.sncf.osrd.envelope_sim.EnvelopeProfile
13+
import fr.sncf.osrd.envelope_sim.EnvelopeSimContext
14+
import fr.sncf.osrd.envelope_sim.PhysicsRollingStock
15+
import fr.sncf.osrd.envelope_sim.TrainPhysicsIntegrator
1316
import fr.sncf.osrd.envelope_sim.etcs.BrakingType.*
1417
import fr.sncf.osrd.envelope_sim.overlays.EnvelopeDeceleration
1518
import java.util.*
@@ -573,17 +576,22 @@ private fun getIndexOfLastPointBeneathOverlay(
573576
speeds: List<Double>,
574577
overlay: Envelope
575578
): Int {
576-
var lastIndex = positions.size - 1
577-
while (
578-
lastIndex >= 0 &&
579-
speeds[lastIndex] >
579+
if (positions.first() > overlay.endPos || positions.last() < overlay.beginPos) {
580+
return -1
581+
}
582+
for (index in positions.size - 1 downTo 0) {
583+
if (positions[index] > overlay.endPos) continue // ignore positions after overlay
584+
if (positions[index] < overlay.beginPos) break // stop if reached positions before overlay
585+
if (
586+
speeds[index] <=
580587
overlay
581-
.get(overlay.findRightDir(positions[lastIndex], -1.0))
582-
.interpolateSpeed(positions[lastIndex])
583-
) {
584-
lastIndex--
588+
.get(overlay.findRightDir(positions[index], -1.0))
589+
.interpolateSpeed(positions[index])
590+
) {
591+
return index
592+
}
585593
}
586-
return lastIndex
594+
return -1
587595
}
588596

589597
private data class BecParams(val dBec: Double, val vBec: Double, val speed: Double) {

0 commit comments

Comments
 (0)