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
This commit is contained in:
parent
05acc869b9
commit
f7318277e2
|
@ -622,17 +622,17 @@ impl str::FromStr for DateTime<FixedOffset> {
|
||||||
|
|
||||||
fn from_str(s: &str) -> ParseResult<DateTime<FixedOffset>> {
|
fn from_str(s: &str) -> ParseResult<DateTime<FixedOffset>> {
|
||||||
const ITEMS: &'static [Item<'static>] = &[
|
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::Literal("-"),
|
||||||
Item::Space(""), Item::Numeric(Numeric::Month, Pad::Zero),
|
Item::Numeric(Numeric::Month, Pad::Zero),
|
||||||
Item::Space(""), Item::Literal("-"),
|
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::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::Literal(":"),
|
||||||
Item::Space(""), Item::Numeric(Numeric::Minute, Pad::Zero),
|
Item::Numeric(Numeric::Minute, Pad::Zero),
|
||||||
Item::Space(""), Item::Literal(":"),
|
Item::Space(""), Item::Literal(":"),
|
||||||
Item::Space(""), Item::Numeric(Numeric::Second, Pad::Zero),
|
Item::Numeric(Numeric::Second, Pad::Zero),
|
||||||
Item::Fixed(Fixed::Nanosecond),
|
Item::Fixed(Fixed::Nanosecond),
|
||||||
Item::Space(""), Item::Fixed(Fixed::TimezoneOffsetZ),
|
Item::Space(""), Item::Fixed(Fixed::TimezoneOffsetZ),
|
||||||
Item::Space(""),
|
Item::Space(""),
|
||||||
|
|
|
@ -1508,11 +1508,11 @@ impl str::FromStr for NaiveDate {
|
||||||
|
|
||||||
fn from_str(s: &str) -> ParseResult<NaiveDate> {
|
fn from_str(s: &str) -> ParseResult<NaiveDate> {
|
||||||
const ITEMS: &'static [Item<'static>] = &[
|
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::Literal("-"),
|
||||||
Item::Space(""), Item::Numeric(Numeric::Month, Pad::Zero),
|
Item::Numeric(Numeric::Month, Pad::Zero),
|
||||||
Item::Space(""), Item::Literal("-"),
|
Item::Space(""), Item::Literal("-"),
|
||||||
Item::Space(""), Item::Numeric(Numeric::Day, Pad::Zero),
|
Item::Numeric(Numeric::Day, Pad::Zero),
|
||||||
Item::Space(""),
|
Item::Space(""),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -1473,17 +1473,17 @@ impl str::FromStr for NaiveDateTime {
|
||||||
|
|
||||||
fn from_str(s: &str) -> ParseResult<NaiveDateTime> {
|
fn from_str(s: &str) -> ParseResult<NaiveDateTime> {
|
||||||
const ITEMS: &'static [Item<'static>] = &[
|
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::Literal("-"),
|
||||||
Item::Space(""), Item::Numeric(Numeric::Month, Pad::Zero),
|
Item::Numeric(Numeric::Month, Pad::Zero),
|
||||||
Item::Space(""), Item::Literal("-"),
|
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::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::Literal(":"),
|
||||||
Item::Space(""), Item::Numeric(Numeric::Minute, Pad::Zero),
|
Item::Numeric(Numeric::Minute, Pad::Zero),
|
||||||
Item::Space(""), Item::Literal(":"),
|
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::Nanosecond), Item::Space(""),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -1304,11 +1304,11 @@ impl str::FromStr for NaiveTime {
|
||||||
|
|
||||||
fn from_str(s: &str) -> ParseResult<NaiveTime> {
|
fn from_str(s: &str) -> ParseResult<NaiveTime> {
|
||||||
const ITEMS: &'static [Item<'static>] = &[
|
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::Literal(":"),
|
||||||
Item::Space(""), Item::Numeric(Numeric::Minute, Pad::Zero),
|
Item::Numeric(Numeric::Minute, Pad::Zero),
|
||||||
Item::Space(""), Item::Literal(":"),
|
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::Nanosecond), Item::Space(""),
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue