Skip to content

Commit

Permalink
[wip] core: project RS constraints on the relaxed path
Browse files Browse the repository at this point in the history
TODO:
* test with holes between blocked ranges
* test incompatible gauge
  • Loading branch information
bougue-pe committed Jul 11, 2024
1 parent c783c53 commit 8ee6553
Show file tree
Hide file tree
Showing 8 changed files with 285 additions and 81 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,22 @@
package fr.sncf.osrd.signaling.impl

import fr.sncf.osrd.signaling.*
import fr.sncf.osrd.sim_infra.api.*
import fr.sncf.osrd.signaling.BlockDiagReporter
import fr.sncf.osrd.signaling.MovementAuthorityView
import fr.sncf.osrd.signaling.SigBlock
import fr.sncf.osrd.signaling.SigSystemManager
import fr.sncf.osrd.signaling.SignalDiagReporter
import fr.sncf.osrd.signaling.SignalingTrainState
import fr.sncf.osrd.signaling.SpeedLimitView
import fr.sncf.osrd.sim_infra.api.SigParameters
import fr.sncf.osrd.sim_infra.api.SigParametersSchema
import fr.sncf.osrd.sim_infra.api.SigSettings
import fr.sncf.osrd.sim_infra.api.SigSettingsSchema
import fr.sncf.osrd.sim_infra.api.SigState
import fr.sncf.osrd.sim_infra.api.SigStateSchema
import fr.sncf.osrd.sim_infra.api.SignalDriver
import fr.sncf.osrd.sim_infra.api.SignalDriverId
import fr.sncf.osrd.sim_infra.api.SignalingSystem
import fr.sncf.osrd.sim_infra.api.SignalingSystemId
import fr.sncf.osrd.utils.indexing.StaticIdxSpace

class MockSigSystemManager(
Expand Down Expand Up @@ -62,6 +76,10 @@ class MockSigSystemManager(
return parametersSchema
}

override fun getName(sigSystem: SignalingSystemId): String {
return this.sigSystem
}

override val drivers: StaticIdxSpace<SignalDriver>
get() = StaticIdxSpace(1u)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,24 @@
package fr.sncf.osrd.signaling.impl

import fr.sncf.osrd.signaling.*
import fr.sncf.osrd.sim_infra.api.*
import fr.sncf.osrd.signaling.BlockDiagReporter
import fr.sncf.osrd.signaling.MovementAuthorityView
import fr.sncf.osrd.signaling.SigBlock
import fr.sncf.osrd.signaling.SigSystemManager
import fr.sncf.osrd.signaling.SignalDiagReporter
import fr.sncf.osrd.signaling.SignalingSystemDriver
import fr.sncf.osrd.signaling.SignalingTrainState
import fr.sncf.osrd.signaling.SpeedLimitView
import fr.sncf.osrd.sim_infra.api.SigParameters
import fr.sncf.osrd.sim_infra.api.SigParametersSchema
import fr.sncf.osrd.sim_infra.api.SigSettings
import fr.sncf.osrd.sim_infra.api.SigSettingsSchema
import fr.sncf.osrd.sim_infra.api.SigState
import fr.sncf.osrd.sim_infra.api.SigStateSchema
import fr.sncf.osrd.sim_infra.api.SignalDriver
import fr.sncf.osrd.sim_infra.api.SignalDriverId
import fr.sncf.osrd.sim_infra.api.SignalingSystem
import fr.sncf.osrd.sim_infra.api.SignalingSystemId
import fr.sncf.osrd.sim_infra.api.findSignalingSystemOrThrow
import fr.sncf.osrd.utils.indexing.StaticIdxSpace
import fr.sncf.osrd.utils.indexing.StaticPool

Expand Down Expand Up @@ -69,6 +85,10 @@ class SigSystemManagerImpl : SigSystemManager {
return sigSystemPool[sigSystem].parametersSchema
}

override fun getName(sigSystem: SignalingSystemId): String {
return sigSystemPool[sigSystem].id
}

override val drivers
get() = driverPool.space()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,14 @@ package fr.sncf.osrd.sim_infra.api
import fr.sncf.osrd.reporting.exceptions.OSRDError
import fr.sncf.osrd.sim_infra.impl.SignalParameters
import fr.sncf.osrd.utils.Direction
import fr.sncf.osrd.utils.indexing.*
import fr.sncf.osrd.utils.units.*
import fr.sncf.osrd.utils.indexing.DirStaticIdxList
import fr.sncf.osrd.utils.indexing.MutableStaticIdxArraySet
import fr.sncf.osrd.utils.indexing.StaticIdx
import fr.sncf.osrd.utils.indexing.StaticIdxList
import fr.sncf.osrd.utils.indexing.StaticIdxSpace
import fr.sncf.osrd.utils.indexing.mutableStaticIdxArrayListOf
import fr.sncf.osrd.utils.units.Length
import fr.sncf.osrd.utils.units.OffsetList

/** A type of signaling system, which is used both for blocks and signals */
sealed interface SignalingSystem
Expand Down Expand Up @@ -45,6 +51,8 @@ interface InfraSigSystemManager {

fun getParametersSchema(sigSystem: SignalingSystemId): SigParametersSchema

fun getName(sigSystem: SignalingSystemId): String

val drivers: StaticIdxSpace<SignalDriver>

fun findDriver(outputSig: SignalingSystemId, inputSig: SignalingSystemId): SignalDriverId
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package fr.sncf.osrd.utils

import fr.sncf.osrd.utils.units.*
import fr.sncf.osrd.utils.units.Distance
import fr.sncf.osrd.utils.units.meters
import java.util.function.BiFunction

/**
Expand Down Expand Up @@ -95,3 +96,20 @@ fun <T> mergeDistanceRangeMaps(
// Build the whole map at once to avoid redundant computations.
return distanceRangeMapOf(resEntries)
}

/**
* Filters the 'filtered' map, keeping only ranges also present in 'filter' map (values from
* 'filter' map are not considered)
*/
fun <T, R> filterIntersection(
filtered: DistanceRangeMap<T>,
filter: DistanceRangeMap<R>
): DistanceRangeMap<T> {
val res = distanceRangeMapOf<T>()
for (range in filter) {
val rangeFirst = filtered.clone()
rangeFirst.truncate(range.lower, range.upper)
res.putMany(rangeFirst.asList())
}
return res
}
Loading

0 comments on commit 8ee6553

Please sign in to comment.