From f7318277e217aa31da2c022867fa23b5a20d92fa Mon Sep 17 00:00:00 2001 From: Michal Srb Date: Fri, 22 Nov 2019 14:30:45 +0100 Subject: [PATCH] Simplify ITEMS in FromStr implementations The Item::Space calls str::trim_left and Item::Numeric also calls str::trim_left before doing anything else, so there is no need to have Item::Space before Item::Numeric. Speeds up parsing: name remove-cloned ns/iter simplify-from-str ns/iter diff ns/iter diff % speedup datetime::tests::bench_datetime_from_str 582 448 -134 -23.02% x 1.30 datetime::tests::bench_datetime_parse_from_rfc2822 244 242 -2 -0.82% x 1.01 datetime::tests::bench_datetime_parse_from_rfc3339 239 234 -5 -2.09% x 1.02 --- src/datetime.rs | 12 ++++++------ src/naive/date.rs | 6 +++--- src/naive/datetime.rs | 12 ++++++------ src/naive/time.rs | 6 +++--- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/datetime.rs b/src/datetime.rs index e39020d..7e32da7 100644 --- a/src/datetime.rs +++ b/src/datetime.rs @@ -622,17 +622,17 @@ impl str::FromStr for DateTime { fn from_str(s: &str) -> ParseResult> { const ITEMS: &'static [Item<'static>] = &[ - Item::Space(""), Item::Numeric(Numeric::Year, Pad::Zero), + Item::Numeric(Numeric::Year, Pad::Zero), Item::Space(""), Item::Literal("-"), - Item::Space(""), Item::Numeric(Numeric::Month, Pad::Zero), + Item::Numeric(Numeric::Month, Pad::Zero), Item::Space(""), Item::Literal("-"), - Item::Space(""), Item::Numeric(Numeric::Day, Pad::Zero), + Item::Numeric(Numeric::Day, Pad::Zero), Item::Space(""), Item::Literal("T"), // XXX shouldn't this be case-insensitive? - Item::Space(""), Item::Numeric(Numeric::Hour, Pad::Zero), + Item::Numeric(Numeric::Hour, Pad::Zero), Item::Space(""), Item::Literal(":"), - Item::Space(""), Item::Numeric(Numeric::Minute, Pad::Zero), + Item::Numeric(Numeric::Minute, Pad::Zero), Item::Space(""), Item::Literal(":"), - Item::Space(""), Item::Numeric(Numeric::Second, Pad::Zero), + Item::Numeric(Numeric::Second, Pad::Zero), Item::Fixed(Fixed::Nanosecond), Item::Space(""), Item::Fixed(Fixed::TimezoneOffsetZ), Item::Space(""), diff --git a/src/naive/date.rs b/src/naive/date.rs index a307604..9ac240f 100644 --- a/src/naive/date.rs +++ b/src/naive/date.rs @@ -1508,11 +1508,11 @@ impl str::FromStr for NaiveDate { fn from_str(s: &str) -> ParseResult { const ITEMS: &'static [Item<'static>] = &[ - Item::Space(""), Item::Numeric(Numeric::Year, Pad::Zero), + Item::Numeric(Numeric::Year, Pad::Zero), Item::Space(""), Item::Literal("-"), - Item::Space(""), Item::Numeric(Numeric::Month, Pad::Zero), + Item::Numeric(Numeric::Month, Pad::Zero), Item::Space(""), Item::Literal("-"), - Item::Space(""), Item::Numeric(Numeric::Day, Pad::Zero), + Item::Numeric(Numeric::Day, Pad::Zero), Item::Space(""), ]; diff --git a/src/naive/datetime.rs b/src/naive/datetime.rs index feeb9d4..ba9cf4f 100644 --- a/src/naive/datetime.rs +++ b/src/naive/datetime.rs @@ -1473,17 +1473,17 @@ impl str::FromStr for NaiveDateTime { fn from_str(s: &str) -> ParseResult { const ITEMS: &'static [Item<'static>] = &[ - Item::Space(""), Item::Numeric(Numeric::Year, Pad::Zero), + Item::Numeric(Numeric::Year, Pad::Zero), Item::Space(""), Item::Literal("-"), - Item::Space(""), Item::Numeric(Numeric::Month, Pad::Zero), + Item::Numeric(Numeric::Month, Pad::Zero), Item::Space(""), Item::Literal("-"), - Item::Space(""), Item::Numeric(Numeric::Day, Pad::Zero), + Item::Numeric(Numeric::Day, Pad::Zero), Item::Space(""), Item::Literal("T"), // XXX shouldn't this be case-insensitive? - Item::Space(""), Item::Numeric(Numeric::Hour, Pad::Zero), + Item::Numeric(Numeric::Hour, Pad::Zero), Item::Space(""), Item::Literal(":"), - Item::Space(""), Item::Numeric(Numeric::Minute, Pad::Zero), + Item::Numeric(Numeric::Minute, Pad::Zero), Item::Space(""), Item::Literal(":"), - Item::Space(""), Item::Numeric(Numeric::Second, Pad::Zero), + Item::Numeric(Numeric::Second, Pad::Zero), Item::Fixed(Fixed::Nanosecond), Item::Space(""), ]; diff --git a/src/naive/time.rs b/src/naive/time.rs index 9ae72f2..ff02f4d 100644 --- a/src/naive/time.rs +++ b/src/naive/time.rs @@ -1304,11 +1304,11 @@ impl str::FromStr for NaiveTime { fn from_str(s: &str) -> ParseResult { const ITEMS: &'static [Item<'static>] = &[ - Item::Space(""), Item::Numeric(Numeric::Hour, Pad::Zero), + Item::Numeric(Numeric::Hour, Pad::Zero), Item::Space(""), Item::Literal(":"), - Item::Space(""), Item::Numeric(Numeric::Minute, Pad::Zero), + Item::Numeric(Numeric::Minute, Pad::Zero), Item::Space(""), Item::Literal(":"), - Item::Space(""), Item::Numeric(Numeric::Second, Pad::Zero), + Item::Numeric(Numeric::Second, Pad::Zero), Item::Fixed(Fixed::Nanosecond), Item::Space(""), ];