diff options
| author | Brian Anderson <banderson@mozilla.com> | 2014-02-09 14:05:31 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2014-02-09 16:23:39 -0800 |
| commit | 07c5e5d81363b6cdbca64637832620ab4870d258 (patch) | |
| tree | c50243096b7db657c9b8906b987d7f5fd005258c /src/libstd | |
| parent | 1b7733109d7b692c2ddd404f1bb6c751c3194750 (diff) | |
| download | rust-07c5e5d81363b6cdbca64637832620ab4870d258.tar.gz rust-07c5e5d81363b6cdbca64637832620ab4870d258.zip | |
std: Clean up the swap function a little
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/util.rs | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/src/libstd/util.rs b/src/libstd/util.rs index 4f7fbbc2bbc..644b5cefdc8 100644 --- a/src/libstd/util.rs +++ b/src/libstd/util.rs @@ -26,19 +26,16 @@ pub fn id<T>(x: T) -> T { x } pub fn swap<T>(x: &mut T, y: &mut T) { unsafe { // Give ourselves some scratch space to work with - let mut tmp: T = mem::uninit(); - let t: *mut T = &mut tmp; + let mut t: T = mem::uninit(); // Perform the swap, `&mut` pointers never alias - let x_raw: *mut T = x; - let y_raw: *mut T = y; - ptr::copy_nonoverlapping_memory(t, &*x_raw, 1); - ptr::copy_nonoverlapping_memory(x, &*y_raw, 1); - ptr::copy_nonoverlapping_memory(y, &*t, 1); + ptr::copy_nonoverlapping_memory(&mut t, &*x, 1); + ptr::copy_nonoverlapping_memory(x, &*y, 1); + ptr::copy_nonoverlapping_memory(y, &t, 1); // y and t now point to the same thing, but we need to completely forget `tmp` // because it's no longer relevant. - cast::forget(tmp); + cast::forget(t); } } |
