diff options
| author | Corey Farwell <coreyf@rwell.org> | 2017-02-13 10:58:48 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-02-13 10:58:48 -0500 |
| commit | 5b79f33c65693f1cd727da68abcc40e77349b073 (patch) | |
| tree | 656d77553d545e01f9bd894d626c43ef6dff79a5 /src/libcore | |
| parent | 717ac960b51a5a2bbedf0e4da899aec7ab2ab7ee (diff) | |
| parent | a5e8bbf32b32ed7d3b06149fdfa0977c0ec0a22e (diff) | |
| download | rust-5b79f33c65693f1cd727da68abcc40e77349b073.tar.gz rust-5b79f33c65693f1cd727da68abcc40e77349b073.zip | |
Rollup merge of #39716 - F001:swapCell, r=alexcrichton
Add `swap` method for `Cell` Addition to #39264 r? @alexcrichton
Diffstat (limited to 'src/libcore')
| -rw-r--r-- | src/libcore/cell.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs index ab44342ebf0..d130b0279a2 100644 --- a/src/libcore/cell.rs +++ b/src/libcore/cell.rs @@ -186,6 +186,7 @@ use fmt::{self, Debug, Display}; use marker::Unsize; use mem; use ops::{Deref, DerefMut, CoerceUnsized}; +use ptr; /// A mutable memory location. /// @@ -387,6 +388,32 @@ impl<T> Cell<T> { 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. /// /// # Examples |
