Rollup merge of #39716 - F001:swapCell, r=alexcrichton
Add `swap` method for `Cell` Addition to #39264 r? @alexcrichton
This commit is contained in:
@@ -186,6 +186,7 @@ use fmt::{self, Debug, Display};
|
|||||||
use marker::Unsize;
|
use marker::Unsize;
|
||||||
use mem;
|
use mem;
|
||||||
use ops::{Deref, DerefMut, CoerceUnsized};
|
use ops::{Deref, DerefMut, CoerceUnsized};
|
||||||
|
use ptr;
|
||||||
|
|
||||||
/// A mutable memory location.
|
/// A mutable memory location.
|
||||||
///
|
///
|
||||||
@@ -387,6 +388,32 @@ impl<T> Cell<T> {
|
|||||||
drop(old);
|
drop(old);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Swaps the values of two Cells.
|
||||||
|
/// Difference with `std::mem::swap` is that this function doesn't require `&mut` reference.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// #![feature(move_cell)]
|
||||||
|
/// use std::cell::Cell;
|
||||||
|
///
|
||||||
|
/// let c1 = Cell::new(5i32);
|
||||||
|
/// let c2 = Cell::new(10i32);
|
||||||
|
/// c1.swap(&c2);
|
||||||
|
/// assert_eq!(10, c1.get());
|
||||||
|
/// assert_eq!(5, c2.get());
|
||||||
|
/// ```
|
||||||
|
#[inline]
|
||||||
|
#[unstable(feature = "move_cell", issue = "39264")]
|
||||||
|
pub fn swap(&self, other: &Self) {
|
||||||
|
if ptr::eq(self, other) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
unsafe {
|
||||||
|
ptr::swap(self.value.get(), other.value.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Replaces the contained value.
|
/// Replaces the contained value.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
|
|||||||
Reference in New Issue
Block a user