Skip to content

Commit

Permalink
editoast: add ::new methods for track_ranges
Browse files Browse the repository at this point in the history
  • Loading branch information
Baptiste Prevot authored and Castavo committed Oct 23, 2023
1 parent 2e62fb9 commit 73afcfc
Show file tree
Hide file tree
Showing 9 changed files with 164 additions and 341 deletions.
24 changes: 12 additions & 12 deletions editoast/src/converters/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -409,12 +409,12 @@ fn speed_section(edge: &Edge, limit: &String, dir: ApplicableDirections) -> Spee
SpeedSection {
id,
speed_limit,
track_ranges: vec![ApplicableDirectionsTrackRange {
track: edge.id.clone().into(),
begin: 0.,
end: edge.length(),
applicable_directions: dir,
}],
track_ranges: vec![ApplicableDirectionsTrackRange::new(
edge.id.clone(),
0.,
edge.length(),
dir,
)],
..Default::default()
}
}
Expand Down Expand Up @@ -490,12 +490,12 @@ pub fn catenaries(edge: &Edge) -> Option<Catenary> {
edge.tags.get("voltage").map(|voltage| Catenary {
id: edge.id.clone().into(),
voltage: voltage.clone().into(),
track_ranges: vec![ApplicableDirectionsTrackRange {
track: edge.id.clone().into(),
begin: 0.,
end: edge.length(),
applicable_directions: ApplicableDirections::Both,
}],
track_ranges: vec![ApplicableDirectionsTrackRange::new(
edge.id.clone(),
0.,
edge.length(),
ApplicableDirections::Both,
)],
})
}

Expand Down
16 changes: 8 additions & 8 deletions editoast/src/infra_cache/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -806,12 +806,12 @@ pub mod tests {
) -> SpeedSection {
let mut track_ranges = vec![];
for (obj_id, begin, end) in range_list {
track_ranges.push(ApplicableDirectionsTrackRange {
track: obj_id.as_ref().into(),
track_ranges.push(ApplicableDirectionsTrackRange::new(
obj_id,
begin,
end,
applicable_directions: ApplicableDirections::Both,
});
ApplicableDirections::Both,
));
}
SpeedSection {
id: id.as_ref().into(),
Expand All @@ -825,12 +825,12 @@ pub mod tests {
pub fn create_catenary_cache<T: AsRef<str>>(id: T, range_list: Vec<(T, f64, f64)>) -> Catenary {
let mut track_ranges = vec![];
for (obj_id, begin, end) in range_list {
track_ranges.push(ApplicableDirectionsTrackRange {
track: obj_id.as_ref().into(),
track_ranges.push(ApplicableDirectionsTrackRange::new(
obj_id,
begin,
end,
applicable_directions: ApplicableDirections::Both,
});
ApplicableDirections::Both,
));
}
Catenary {
id: id.as_ref().into(),
Expand Down
153 changes: 44 additions & 109 deletions editoast/src/models/pathfinding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -230,88 +230,48 @@ pub mod tests {
pub fn simple_pathfinding(infra_id: i64) -> Pathfinding {
// T1 T2 T3 T4 T5
// |------> < ------| |------> |------> |------>
let route_paths = vec![
RoutePath {
route: "route_1".into(),
track_ranges: vec![
DirectionalTrackRange::new("track_1", 0.0, 10.0, Direction::StartToStop),
DirectionalTrackRange::new("track_2", 7.0, 10.0, Direction::StopToStart),
DirectionalTrackRange::new("track_2", 7.0, 7.0, Direction::StartToStop),
],
signaling_type: "BAL3".into(),
},
RoutePath {
route: "route_2".into(),
track_ranges: vec![DirectionalTrackRange::new(
"track_2",
3.0,
7.0,
Direction::StopToStart,
)],
signaling_type: "BAL3".into(),
},
RoutePath {
route: "route_3".into(),
track_ranges: vec![
DirectionalTrackRange::new("track_2", 0.0, 3.0, Direction::StopToStart),
DirectionalTrackRange::new("track_3", 0.0, 10.0, Direction::StartToStop),
DirectionalTrackRange::new("track_4", 0.0, 2.0, Direction::StartToStop),
],
signaling_type: "BAL3".into(),
},
RoutePath {
route: "route_4".into(),
track_ranges: vec![
DirectionalTrackRange::new("track_4", 2.0, 10.0, Direction::StartToStop),
DirectionalTrackRange::new("track_5", 0.0, 8.0, Direction::StartToStop),
],
signaling_type: "BAL3".into(),
},
];
Pathfinding {
infra_id,
payload: diesel_json::Json(PathfindingPayload {
route_paths: vec![
RoutePath {
route: "route_1".into(),
track_ranges: vec![
DirectionalTrackRange {
track: "track_1".into(),
begin: 0.0,
end: 10.0,
direction: Direction::StartToStop,
},
DirectionalTrackRange {
track: "track_2".into(),
begin: 7.0,
end: 10.0,
direction: Direction::StopToStart,
},
DirectionalTrackRange {
// This case happens I swear
track: "track_2".into(),
begin: 7.0,
end: 7.0,
direction: Direction::StartToStop,
},
],
signaling_type: "BAL3".into(),
},
RoutePath {
route: "route_2".into(),
track_ranges: vec![DirectionalTrackRange {
track: "track_2".into(),
begin: 3.0,
end: 7.0,
direction: Direction::StopToStart,
}],
signaling_type: "BAL3".into(),
},
RoutePath {
route: "route_3".into(),
track_ranges: vec![
DirectionalTrackRange {
track: "track_2".into(),
begin: 0.0,
end: 3.0,
direction: Direction::StopToStart,
},
DirectionalTrackRange {
track: "track_3".into(),
begin: 0.0,
end: 10.0,
direction: Direction::StartToStop,
},
DirectionalTrackRange {
track: "track_4".into(),
begin: 0.0,
end: 2.0,
direction: Direction::StartToStop,
},
],
signaling_type: "BAL3".into(),
},
RoutePath {
route: "route_4".into(),
track_ranges: vec![
DirectionalTrackRange {
track: "track_4".into(),
begin: 2.0,
end: 10.0,
direction: Direction::StartToStop,
},
DirectionalTrackRange {
track: "track_5".into(),
begin: 0.0,
end: 8.0,
direction: Direction::StartToStop,
},
],
signaling_type: "BAL3".into(),
},
],
route_paths,
..Default::default()
}),
..Default::default()
Expand Down Expand Up @@ -353,36 +313,11 @@ pub mod tests {
assert_eq!(
merged_track_ranges,
vec![
DirectionalTrackRange {
track: "track_1".into(),
begin: 0.0,
end: 10.0,
direction: Direction::StartToStop,
},
DirectionalTrackRange {
track: "track_2".into(),
begin: 0.0,
end: 10.0,
direction: Direction::StopToStart,
},
DirectionalTrackRange {
track: "track_3".into(),
begin: 0.0,
end: 10.0,
direction: Direction::StartToStop,
},
DirectionalTrackRange {
track: "track_4".into(),
begin: 0.0,
end: 10.0,
direction: Direction::StartToStop,
},
DirectionalTrackRange {
track: "track_5".into(),
begin: 0.0,
end: 8.0,
direction: Direction::StartToStop,
},
DirectionalTrackRange::new("track_1", 0.0, 10.0, Direction::StartToStop),
DirectionalTrackRange::new("track_2", 0.0, 10.0, Direction::StopToStart),
DirectionalTrackRange::new("track_3", 0.0, 10.0, Direction::StartToStop),
DirectionalTrackRange::new("track_4", 0.0, 10.0, Direction::StartToStop),
DirectionalTrackRange::new("track_5", 0.0, 8.0, Direction::StartToStop),
]
);
}
Expand Down
35 changes: 35 additions & 0 deletions editoast/src/schema/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,16 @@ pub struct TrackRange {
pub end: f64,
}

impl TrackRange {
pub fn new<T: AsRef<str>>(track: T, begin: f64, end: f64) -> Self {
Self {
track: track.as_ref().into(),
begin,
end,
}
}
}

#[derive(Debug, Derivative, Clone, Deserialize, Serialize, PartialEq)]
#[serde(deny_unknown_fields)]
#[derivative(Default)]
Expand Down Expand Up @@ -244,6 +254,15 @@ impl DirectionalTrackRange {
self.begin
}
}

pub fn new<T: AsRef<str>>(track: T, begin: f64, end: f64, direction: Direction) -> Self {
Self {
track: track.as_ref().into(),
begin,
end,
direction,
}
}
}

#[derive(Debug, Derivative, Clone, Deserialize, Serialize, PartialEq)]
Expand All @@ -258,6 +277,22 @@ pub struct ApplicableDirectionsTrackRange {
pub applicable_directions: ApplicableDirections,
}

impl ApplicableDirectionsTrackRange {
pub fn new<T: AsRef<str>>(
track: T,
begin: f64,
end: f64,
applicable_directions: ApplicableDirections,
) -> Self {
Self {
track: track.as_ref().into(),
begin,
end,
applicable_directions,
}
}
}

#[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(deny_unknown_fields, rename_all = "SCREAMING_SNAKE_CASE")]
pub enum Direction {
Expand Down
12 changes: 6 additions & 6 deletions editoast/src/schema/route.rs
Original file line number Diff line number Diff line change
Expand Up @@ -109,12 +109,12 @@ impl Route {
} else {
0.
};
track_ranges.push(DirectionalTrackRange {
track: cur_track_id.clone().into(),
begin: cur_offset.min(end_offset),
end: cur_offset.max(end_offset),
direction: cur_dir,
});
track_ranges.push(DirectionalTrackRange::new(
cur_track_id.clone(),
cur_offset.min(end_offset),
cur_offset.max(end_offset),
cur_dir,
));

// Search for the exit_point
if cur_track_id == exit_track {
Expand Down
46 changes: 15 additions & 31 deletions editoast/src/views/infra/pathfinding.rs
Original file line number Diff line number Diff line change
Expand Up @@ -272,22 +272,21 @@ fn build_path_output(path: &Vec<PathfindingStep>, infra_cache: &InfraCache) -> P
} else {
0.0
};
track_ranges.push(DirectionalTrackRange {
track: path[i].track.clone().into(),
begin: path[i].position.min(end),
end: path[i].position.max(end),
direction: path[i].direction,
});
track_ranges.push(DirectionalTrackRange::new(
path[i].track.clone(),
path[i].position.min(end),
path[i].position.max(end),
path[i].direction,
));
});
let last = &path[path.len() - 1];
let before_last = &path[path.len() - 2];
track_ranges.push(DirectionalTrackRange {
track: last.track.clone().into(),
begin: last.position.min(before_last.position),
end: last.position.max(before_last.position),
direction: last.direction,
});

track_ranges.push(DirectionalTrackRange::new(
last.track.clone(),
last.position.min(before_last.position),
last.position.max(before_last.position),
last.direction,
));
// Fill switches directions
let switches_directions = path
.iter()
Expand Down Expand Up @@ -354,24 +353,9 @@ mod tests {
assert_eq!(
path.track_ranges,
vec![
DirectionalTrackRange {
track: "A".into(),
begin: 30.,
end: 500.,
direction: Direction::StartToStop
},
DirectionalTrackRange {
track: "B".into(),
begin: 0.,
end: 500.,
direction: Direction::StartToStop
},
DirectionalTrackRange {
track: "C".into(),
begin: 0.,
end: 470.,
direction: Direction::StartToStop
}
DirectionalTrackRange::new("A", 30., 500., Direction::StartToStop),
DirectionalTrackRange::new("B", 0., 500., Direction::StartToStop),
DirectionalTrackRange::new("C", 0., 470., Direction::StartToStop),
]
);
assert_eq!(path.detectors, vec!["D1".into()]);
Expand Down
Loading

0 comments on commit 73afcfc

Please sign in to comment.