Skip to content

Commit

Permalink
core: fix identical positions when shifting envelope parts
Browse files Browse the repository at this point in the history
  • Loading branch information
eckter committed Oct 23, 2023
1 parent 76f1ed2 commit fbbfc28
Showing 1 changed file with 21 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import fr.sncf.osrd.envelope.EnvelopePhysics;
import fr.sncf.osrd.envelope.SearchableEnvelope;
import fr.sncf.osrd.envelope_utils.ExcludeFromGeneratedCodeCoverage;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
Expand Down Expand Up @@ -638,10 +639,26 @@ public EnvelopePart slice(

/** Returns a new EnvelopePart, where all positions are shifted by positionDelta */
public EnvelopePart copyAndShift(double positionDelta) {
var newPositions = new double[positions.length];
for (int i = 0; i < positions.length; i++)
newPositions[i] = positions[i] + positionDelta;
return new EnvelopePart(new HashMap<>(attrs), newPositions, speeds, timeDeltas);
var newPositions = new ArrayList<Double>();
var newSpeeds = new ArrayList<Double>();
var newTimeDeltas = new ArrayList<Double>();
newPositions.add(positions[0] + positionDelta);
newSpeeds.add(speeds[0]);
for (int i = 1; i < positions.length; i++) {
var p = positions[i] + positionDelta;
if (newPositions.get(newPositions.size() - 1) != p) {
// Positions that are an epsilon away may be overlapping after the shift, we only add the distinct ones
newPositions.add(p);
newSpeeds.add(speeds[i]);
newTimeDeltas.add(timeDeltas[i - 1]);
}
}
return new EnvelopePart(
new HashMap<>(attrs),
newPositions.stream().mapToDouble(x -> x).toArray(),
newSpeeds.stream().mapToDouble(x -> x).toArray(),
newTimeDeltas.stream().mapToDouble(x -> x).toArray()
);
}

// endregion
Expand Down

0 comments on commit fbbfc28

Please sign in to comment.