mirror of
https://github.com/a-b-street/abstreet.git
synced 2024-12-27 00:12:55 +03:00
different parser for ticks from filenames
This commit is contained in:
parent
0df92bab75
commit
a863283571
@ -19,6 +19,7 @@ ordered-float = "0.5.0"
|
||||
pretty_assertions = "0.5.1"
|
||||
rand = { version = "0.5.1", features = ["serde1"] }
|
||||
rayon = "1.0"
|
||||
regex = "1.0.6"
|
||||
serde = "1.0"
|
||||
serde_derive = "1.0"
|
||||
structopt = "0.2"
|
||||
|
@ -21,6 +21,7 @@ extern crate ordered_float;
|
||||
extern crate pretty_assertions;
|
||||
extern crate rand;
|
||||
extern crate rayon;
|
||||
extern crate regex;
|
||||
extern crate serde;
|
||||
#[macro_use]
|
||||
extern crate serde_derive;
|
||||
|
@ -1,5 +1,6 @@
|
||||
use dimensioned::si;
|
||||
use rand::{Rng, XorShiftRng};
|
||||
use regex::Regex;
|
||||
|
||||
pub const TIMESTEP: Time = si::Second {
|
||||
value_unsafe: 0.1,
|
||||
@ -29,6 +30,7 @@ impl Tick {
|
||||
Tick(10 * secs)
|
||||
}
|
||||
|
||||
// TODO Why have these two forms? Consolidate
|
||||
pub fn parse(string: &str) -> Option<Tick> {
|
||||
let parts: Vec<&str> = string.split(":").collect();
|
||||
if parts.is_empty() {
|
||||
@ -62,6 +64,19 @@ impl Tick {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse_filename(string: &str) -> Option<Tick> {
|
||||
lazy_static! {
|
||||
static ref RE: Regex = Regex::new(r"(\d+)h(\d+)m(\d+)\.(\d+)s").unwrap();
|
||||
}
|
||||
let caps = RE.captures(string)?;
|
||||
let hours = 60 * 60 * 10 * u32::from_str_radix(&caps[1], 10).ok()?;
|
||||
let minutes = 60 * 10 * u32::from_str_radix(&caps[2], 10).ok()?;
|
||||
let seconds = 10 * u32::from_str_radix(&caps[3], 10).ok()?;
|
||||
let ms = u32::from_str_radix(&caps[4], 10).ok()?;
|
||||
|
||||
Some(Tick(hours + minutes + seconds + ms))
|
||||
}
|
||||
|
||||
pub fn as_time(&self) -> Time {
|
||||
(self.0 as f64) * TIMESTEP
|
||||
}
|
||||
|
@ -313,9 +313,9 @@ impl Sim {
|
||||
|
||||
// TODO Return a descriptive error again
|
||||
pub fn load_most_recent(&self) -> Result<Sim, std::io::Error> {
|
||||
let (_, load) = self.find_all_savestates().and_then(|mut list| {
|
||||
list.pop().ok_or(io_error("empty directory"))
|
||||
})?;
|
||||
let (_, load) = self
|
||||
.find_all_savestates()
|
||||
.and_then(|mut list| list.pop().ok_or(io_error("empty directory")))?;
|
||||
info!("Loading {}", load);
|
||||
abstutil::read_json(&load)
|
||||
}
|
||||
@ -329,12 +329,13 @@ impl Sim {
|
||||
))? {
|
||||
let path = entry?.path();
|
||||
let filename = path
|
||||
.file_name()
|
||||
.expect("path isn't a filename")
|
||||
.to_os_string()
|
||||
.into_string()
|
||||
.expect("can't convert path to string");
|
||||
let tick = Tick::parse(&filename).expect(&format!("invalid Tick: {}", filename));
|
||||
.file_name()
|
||||
.expect("path isn't a filename")
|
||||
.to_os_string()
|
||||
.into_string()
|
||||
.expect("can't convert path to string");
|
||||
let tick =
|
||||
Tick::parse_filename(&filename).expect(&format!("invalid Tick: {}", filename));
|
||||
results.push((
|
||||
tick,
|
||||
path.as_path()
|
||||
|
Loading…
Reference in New Issue
Block a user