mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-26 22:05:14 +00:00
Optimize FromIterator<OsString> to reuse the first allocation
This commit is contained in:
parent
3ed6184434
commit
2fcb8b5c20
@ -1208,11 +1208,18 @@ impl<'a> Extend<&'a OsStr> for OsString {
|
||||
impl FromIterator<OsString> for OsString {
|
||||
#[inline]
|
||||
fn from_iter<I: IntoIterator<Item = OsString>>(iter: I) -> Self {
|
||||
let mut buf = Self::new();
|
||||
for s in iter {
|
||||
buf.push(&s);
|
||||
let mut iterator = iter.into_iter();
|
||||
|
||||
// Because we're iterating over `OsString`s, we can avoid at least
|
||||
// one allocation by getting the first string from the iterator
|
||||
// and appending to it all the subsequent strings.
|
||||
match iterator.next() {
|
||||
None => OsString::new(),
|
||||
Some(mut buf) => {
|
||||
buf.extend(iterator);
|
||||
buf
|
||||
}
|
||||
}
|
||||
buf
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user