From aa7f65d96b8f9ef2c6bbf4dcca88102373665c93 Mon Sep 17 00:00:00 2001 From: David Thomas Date: Thu, 7 Mar 2024 09:57:12 +0000 Subject: [PATCH] Avoid reallocating for trimming --- Cargo.toml | 1 + src/lib.rs | 15 ++++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 496e7fe..ee98ccf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -18,6 +18,7 @@ test = true cfg-if = "1.0" unicase = { version = "2.6", optional = true } ordered-multimap = "0.7" +trim-in-place = "0.1.7" [features] default = [] diff --git a/src/lib.rs b/src/lib.rs index ea8757b..1a6e514 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -58,6 +58,7 @@ use ordered_multimap::{ list_ordered_multimap::{Entry, IntoIter, Iter, IterMut, OccupiedEntry, VacantEntry}, ListOrderedMultimap, }; +use trim_in_place::TrimInPlace; #[cfg(feature = "case-insensitive")] use unicase::UniCase; @@ -1293,9 +1294,9 @@ impl<'a> Parser<'a> { self.parse_comment(); } '[' => match self.parse_section() { - Ok(sec) => { - let msec = sec[..].trim(); - cursec = Some((*msec).to_string()); + Ok(mut sec) => { + sec.trim_in_place(); + cursec = Some(sec); match result.entry(cursec.clone()) { SectionEntry::Vacant(v) => { v.insert(Default::default()); @@ -1312,8 +1313,8 @@ impl<'a> Parser<'a> { return self.error("missing key"); } match self.parse_val() { - Ok(val) => { - let mval = val[..].trim().to_owned(); + Ok(mut mval) => { + mval.trim_in_place(); match result.entry(cursec.clone()) { SectionEntry::Vacant(v) => { // cursec must be None (the General Section) @@ -1332,8 +1333,8 @@ impl<'a> Parser<'a> { } } _ => match self.parse_key() { - Ok(key) => { - let mkey: String = key[..].trim().to_owned(); + Ok(mut mkey) => { + mkey.trim_in_place(); curkey = mkey; } Err(e) => return Err(e),