Rollup merge of #67238 - llogiq:moo-and-improved, r=Dylan-DPC
Small std::borrow::Cow improvements This is a small set of improvements (+ one more tested code path) for `Cow`.
This commit is contained in:
commit
60ebeda94f
@ -195,14 +195,10 @@ impl<B: ?Sized + ToOwned> Clone for Cow<'_, B> {
|
||||
}
|
||||
|
||||
fn clone_from(&mut self, source: &Self) {
|
||||
if let Owned(ref mut dest) = *self {
|
||||
if let Owned(ref o) = *source {
|
||||
o.borrow().clone_into(dest);
|
||||
return;
|
||||
}
|
||||
match (self, source) {
|
||||
(&mut Owned(ref mut dest), &Owned(ref o)) => o.borrow().clone_into(dest),
|
||||
(t, s) => *t = s.clone(),
|
||||
}
|
||||
|
||||
*self = source.clone();
|
||||
}
|
||||
}
|
||||
|
||||
@ -449,9 +445,7 @@ impl<'a> AddAssign<&'a str> for Cow<'a, str> {
|
||||
fn add_assign(&mut self, rhs: &'a str) {
|
||||
if self.is_empty() {
|
||||
*self = Cow::Borrowed(rhs)
|
||||
} else if rhs.is_empty() {
|
||||
return;
|
||||
} else {
|
||||
} else if !rhs.is_empty() {
|
||||
if let Cow::Borrowed(lhs) = *self {
|
||||
let mut s = String::with_capacity(lhs.len() + rhs.len());
|
||||
s.push_str(lhs);
|
||||
@ -467,9 +461,7 @@ impl<'a> AddAssign<Cow<'a, str>> for Cow<'a, str> {
|
||||
fn add_assign(&mut self, rhs: Cow<'a, str>) {
|
||||
if self.is_empty() {
|
||||
*self = rhs
|
||||
} else if rhs.is_empty() {
|
||||
return;
|
||||
} else {
|
||||
} else if !rhs.is_empty() {
|
||||
if let Cow::Borrowed(lhs) = *self {
|
||||
let mut s = String::with_capacity(lhs.len() + rhs.len());
|
||||
s.push_str(lhs);
|
||||
|
@ -138,4 +138,7 @@ fn check_cow_clone_from() {
|
||||
let c2: Cow<'_, str> = Cow::Owned(s);
|
||||
c1.clone_from(&c2);
|
||||
assert!(c1.into_owned().capacity() >= 25);
|
||||
let mut c3: Cow<'_, str> = Cow::Borrowed("bye");
|
||||
c3.clone_from(&c2);
|
||||
assert_eq!(c2, c3);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user