Add impls for iterators of Cow<OsStr>
This commit is contained in:
parent
2fcb8b5c20
commit
05ea200213
1 changed files with 34 additions and 0 deletions
|
@ -1204,6 +1204,16 @@ impl<'a> Extend<&'a OsStr> for OsString {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "osstring_extend", since = "1.52.0")]
|
||||||
|
impl<'a> Extend<Cow<'a, OsStr>> for OsString {
|
||||||
|
#[inline]
|
||||||
|
fn extend<T: IntoIterator<Item = Cow<'a, OsStr>>>(&mut self, iter: T) {
|
||||||
|
for s in iter {
|
||||||
|
self.push(&s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[stable(feature = "osstring_extend", since = "1.52.0")]
|
#[stable(feature = "osstring_extend", since = "1.52.0")]
|
||||||
impl FromIterator<OsString> for OsString {
|
impl FromIterator<OsString> for OsString {
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -1234,3 +1244,27 @@ impl<'a> FromIterator<&'a OsStr> for OsString {
|
||||||
buf
|
buf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[stable(feature = "osstring_extend", since = "1.52.0")]
|
||||||
|
impl<'a> FromIterator<Cow<'a, OsStr>> for OsString {
|
||||||
|
#[inline]
|
||||||
|
fn from_iter<I: IntoIterator<Item = Cow<'a, OsStr>>>(iter: I) -> Self {
|
||||||
|
let mut iterator = iter.into_iter();
|
||||||
|
|
||||||
|
// Because we're iterating over `OsString`s, we can avoid at least
|
||||||
|
// one allocation by getting the first owned string from the iterator
|
||||||
|
// and appending to it all the subsequent strings.
|
||||||
|
match iterator.next() {
|
||||||
|
None => OsString::new(),
|
||||||
|
Some(Cow::Owned(mut buf)) => {
|
||||||
|
buf.extend(iterator);
|
||||||
|
buf
|
||||||
|
}
|
||||||
|
Some(Cow::Borrowed(buf)) => {
|
||||||
|
let mut buf = OsString::from(buf);
|
||||||
|
buf.extend(iterator);
|
||||||
|
buf
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue