Auto merge of #44031 - scottmcm:swap_with_slice, r=alexcrichton
Add [T]::swap_with_slice The safe version of a method from `ptr`, like `[T]::copy_from_slice` is. Tracking issue: https://github.com/rust-lang/rust/issues/44030
This commit is contained in:
commit
ba65645c78
@ -121,7 +121,7 @@
|
||||
#![feature(unsize)]
|
||||
#![feature(allocator_internals)]
|
||||
|
||||
#![cfg_attr(not(test), feature(fused, fn_traits, placement_new_protocol))]
|
||||
#![cfg_attr(not(test), feature(fused, fn_traits, placement_new_protocol, swap_with_slice))]
|
||||
#![cfg_attr(test, feature(test, box_heap))]
|
||||
|
||||
// Allow testing this library
|
||||
|
@ -1461,6 +1461,31 @@ pub fn copy_from_slice(&mut self, src: &[T]) where T: Copy {
|
||||
core_slice::SliceExt::copy_from_slice(self, src)
|
||||
}
|
||||
|
||||
/// Swaps all elements in `self` with those in `src`.
|
||||
///
|
||||
/// The length of `src` must be the same as `self`.
|
||||
///
|
||||
/// # Panics
|
||||
///
|
||||
/// This function will panic if the two slices have different lengths.
|
||||
///
|
||||
/// # Example
|
||||
///
|
||||
/// ```
|
||||
/// #![feature(swap_with_slice)]
|
||||
///
|
||||
/// let mut src = [1, 2, 3];
|
||||
/// let mut dst = [7, 8, 9];
|
||||
///
|
||||
/// src.swap_with_slice(&mut dst);
|
||||
/// assert_eq!(src, [7, 8, 9]);
|
||||
/// assert_eq!(dst, [1, 2, 3]);
|
||||
/// ```
|
||||
#[unstable(feature = "swap_with_slice", issue = "44030")]
|
||||
pub fn swap_with_slice(&mut self, src: &mut [T]) {
|
||||
core_slice::SliceExt::swap_with_slice(self, src)
|
||||
}
|
||||
|
||||
/// Copies `self` into a new `Vec`.
|
||||
///
|
||||
/// # Examples
|
||||
|
@ -212,6 +212,9 @@ unsafe fn get_unchecked_mut<I>(&mut self, index: I) -> &mut I::Output
|
||||
#[stable(feature = "copy_from_slice", since = "1.9.0")]
|
||||
fn copy_from_slice(&mut self, src: &[Self::Item]) where Self::Item: Copy;
|
||||
|
||||
#[unstable(feature = "swap_with_slice", issue = "44030")]
|
||||
fn swap_with_slice(&mut self, src: &mut [Self::Item]);
|
||||
|
||||
#[stable(feature = "sort_unstable", since = "1.20.0")]
|
||||
fn sort_unstable(&mut self)
|
||||
where Self::Item: Ord;
|
||||
@ -673,6 +676,16 @@ fn copy_from_slice(&mut self, src: &[T]) where T: Copy {
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn swap_with_slice(&mut self, src: &mut [T]) {
|
||||
assert!(self.len() == src.len(),
|
||||
"destination and source slices have different lengths");
|
||||
unsafe {
|
||||
ptr::swap_nonoverlapping(
|
||||
self.as_mut_ptr(), src.as_mut_ptr(), self.len());
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn binary_search_by_key<'a, B, F, Q: ?Sized>(&'a self, b: &Q, mut f: F) -> Result<usize, usize>
|
||||
where F: FnMut(&'a Self::Item) -> B,
|
||||
|
Loading…
Reference in New Issue
Block a user