@@ -171,12 +171,12 @@ class IncrementalConflictDetectorImpl(trainRequirements: List<TrainRequirements>
171
171
// look for requirement times overlaps.
172
172
// as spacing requirements are exclusive, any overlap is a conflict
173
173
val res = mutableListOf<Conflict >()
174
- for (requirements in spacingZoneRequirements.values ) {
175
- for (conflictGroup in detectRequirementConflicts(requirements ) { _, _ -> true }) {
174
+ for (entry in spacingZoneRequirements) {
175
+ for (conflictGroup in detectRequirementConflicts(entry.value ) { _, _ -> true }) {
176
176
val trains = conflictGroup.map { it.trainId }
177
177
val beginTime = conflictGroup.minBy { it.beginTime }.beginTime
178
178
val endTime = conflictGroup.maxBy { it.endTime }.endTime
179
- res.add(Conflict (trains, beginTime, endTime, ConflictType .SPACING ))
179
+ res.add(Conflict (trains, beginTime, endTime, ConflictType .SPACING , listOf (entry.key) ))
180
180
}
181
181
}
182
182
return res
@@ -185,13 +185,13 @@ class IncrementalConflictDetectorImpl(trainRequirements: List<TrainRequirements>
185
185
private fun detectRoutingConflicts (): List <Conflict > {
186
186
// for each zone, check compatibility of overlapping requirements
187
187
val res = mutableListOf<Conflict >()
188
- for (requirements in routingZoneRequirements.values ) {
188
+ for (entry in routingZoneRequirements) {
189
189
for (conflictGroup in
190
- detectRequirementConflicts(requirements ) { a, b -> a.config != b.config }) {
190
+ detectRequirementConflicts(entry.value ) { a, b -> a.config != b.config }) {
191
191
val trains = conflictGroup.map { it.trainId }
192
192
val beginTime = conflictGroup.minBy { it.beginTime }.beginTime
193
193
val endTime = conflictGroup.maxBy { it.endTime }.endTime
194
- res.add(Conflict (trains, beginTime, endTime, ConflictType .ROUTING ))
194
+ res.add(Conflict (trains, beginTime, endTime, ConflictType .ROUTING , listOf (entry.key) ))
195
195
}
196
196
}
197
197
return res
@@ -220,7 +220,7 @@ class IncrementalConflictDetectorImpl(trainRequirements: List<TrainRequirements>
220
220
val endTime = min(req.endTime, otherReq.endTime)
221
221
if (beginTime < endTime)
222
222
res.add(
223
- Conflict (listOf (otherReq.trainId), beginTime, endTime, ConflictType .SPACING )
223
+ Conflict (listOf (otherReq.trainId), beginTime, endTime, ConflictType .SPACING , listOf (req.zone) )
224
224
)
225
225
}
226
226
@@ -240,7 +240,7 @@ class IncrementalConflictDetectorImpl(trainRequirements: List<TrainRequirements>
240
240
val endTime = min(zoneReq.endTime, otherReq.endTime)
241
241
if (beginTime < endTime)
242
242
res.add(
243
- Conflict (listOf (otherReq.trainId), beginTime, endTime, ConflictType .ROUTING )
243
+ Conflict (listOf (otherReq.trainId), beginTime, endTime, ConflictType .ROUTING , listOf (zoneReq.zone) )
244
244
)
245
245
}
246
246
}
@@ -447,6 +447,12 @@ fun mergeMap(
447
447
events.add(Event (EventType .END , conflict.endTime))
448
448
}
449
449
450
+ // TODO
451
+ val reqZones = mutableListOf<String >()
452
+ for (conflict in conflicts) {
453
+ reqZones.addAll(conflict.requirements);
454
+ }
455
+
450
456
events.sort()
451
457
var eventCount = 0
452
458
var eventBeginning = 0.0
@@ -462,7 +468,8 @@ fun mergeMap(
462
468
trainIds.toMutableList(),
463
469
eventBeginning,
464
470
event.time,
465
- conflictType
471
+ conflictType,
472
+ reqZones
466
473
)
467
474
)
468
475
}
0 commit comments