review
This commit is contained in:
parent
755cfbf236
commit
50cbbef86a
@ -2034,37 +2034,38 @@ impl<T> [T] {
|
|||||||
unsafe { (from_raw_parts_mut(ptr, mid), from_raw_parts_mut(ptr.add(mid), len - mid)) }
|
unsafe { (from_raw_parts_mut(ptr, mid), from_raw_parts_mut(ptr.add(mid), len - mid)) }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Divides one slice into two at an index returning, `None` if slice is too
|
/// Divides one slice into two at an index, returning `None` if the slice is
|
||||||
/// short.
|
/// too short.
|
||||||
///
|
///
|
||||||
/// The first will contain all indices from `[0, mid)` (excluding
|
/// If `mid ≤ len` returns a pair of slices where the first will contain all
|
||||||
/// the index `mid` itself) and the second will contain all
|
/// indices from `[0, mid)` (excluding the index `mid` itself) and the
|
||||||
/// indices from `[mid, len)` (excluding the index `len` itself).
|
/// second will contain all indices from `[mid, len)` (excluding the index
|
||||||
|
/// `len` itself).
|
||||||
///
|
///
|
||||||
/// Returns `None` if `mid > len`.
|
/// Otherwise, if `mid > len`, returns `None`.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
/// ```
|
/// ```
|
||||||
/// #![feature(split_at_checked)]
|
/// #![feature(split_at_checked)]
|
||||||
///
|
///
|
||||||
/// let v = [1, 2, 3, 4, 5, 6];
|
/// let v = [1, -2, 3, -4, 5, -6];
|
||||||
///
|
///
|
||||||
/// {
|
/// {
|
||||||
/// let (left, right) = v.split_at_checked(0).unwrap();
|
/// let (left, right) = v.split_at_checked(0).unwrap();
|
||||||
/// assert_eq!(left, []);
|
/// assert_eq!(left, []);
|
||||||
/// assert_eq!(right, [1, 2, 3, 4, 5, 6]);
|
/// assert_eq!(right, [1, -2, 3, -4, 5, -6]);
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// {
|
/// {
|
||||||
/// let (left, right) = v.split_at_checked(2).unwrap();
|
/// let (left, right) = v.split_at_checked(2).unwrap();
|
||||||
/// assert_eq!(left, [1, 2]);
|
/// assert_eq!(left, [1, -2]);
|
||||||
/// assert_eq!(right, [3, 4, 5, 6]);
|
/// assert_eq!(right, [3, -4, 5, -6]);
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
/// {
|
/// {
|
||||||
/// let (left, right) = v.split_at_checked(6).unwrap();
|
/// let (left, right) = v.split_at_checked(6).unwrap();
|
||||||
/// assert_eq!(left, [1, 2, 3, 4, 5, 6]);
|
/// assert_eq!(left, [1, -2, 3, -4, 5, -6]);
|
||||||
/// assert_eq!(right, []);
|
/// assert_eq!(right, []);
|
||||||
/// }
|
/// }
|
||||||
///
|
///
|
||||||
@ -2073,7 +2074,6 @@ impl<T> [T] {
|
|||||||
#[unstable(feature = "split_at_checked", reason = "new API", issue = "119128")]
|
#[unstable(feature = "split_at_checked", reason = "new API", issue = "119128")]
|
||||||
#[rustc_const_unstable(feature = "split_at_checked", issue = "119128")]
|
#[rustc_const_unstable(feature = "split_at_checked", issue = "119128")]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[track_caller]
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub const fn split_at_checked(&self, mid: usize) -> Option<(&[T], &[T])> {
|
pub const fn split_at_checked(&self, mid: usize) -> Option<(&[T], &[T])> {
|
||||||
if mid <= self.len() {
|
if mid <= self.len() {
|
||||||
@ -2085,14 +2085,15 @@ impl<T> [T] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Divides one mutable slice into two at an index, returning `None` if
|
/// Divides one mutable slice into two at an index, returning `None` if the
|
||||||
/// slice is too short.
|
/// slice is too short.
|
||||||
///
|
///
|
||||||
/// The first will contain all indices from `[0, mid)` (excluding
|
/// If `mid ≤ len` returns a pair of slices where the first will contain all
|
||||||
/// the index `mid` itself) and the second will contain all
|
/// indices from `[0, mid)` (excluding the index `mid` itself) and the
|
||||||
/// indices from `[mid, len)` (excluding the index `len` itself).
|
/// second will contain all indices from `[mid, len)` (excluding the index
|
||||||
|
/// `len` itself).
|
||||||
///
|
///
|
||||||
/// Returns `None` if `mid > len`.
|
/// Otherwise, if `mid > len`, returns `None`.
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
///
|
///
|
||||||
@ -2114,7 +2115,6 @@ impl<T> [T] {
|
|||||||
#[unstable(feature = "split_at_checked", reason = "new API", issue = "119128")]
|
#[unstable(feature = "split_at_checked", reason = "new API", issue = "119128")]
|
||||||
#[rustc_const_unstable(feature = "split_at_checked", issue = "119128")]
|
#[rustc_const_unstable(feature = "split_at_checked", issue = "119128")]
|
||||||
#[inline]
|
#[inline]
|
||||||
#[track_caller]
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub const fn split_at_mut_checked(&mut self, mid: usize) -> Option<(&mut [T], &mut [T])> {
|
pub const fn split_at_mut_checked(&mut self, mid: usize) -> Option<(&mut [T], &mut [T])> {
|
||||||
if mid <= self.len() {
|
if mid <= self.len() {
|
||||||
@ -2126,164 +2126,6 @@ impl<T> [T] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Divides one slice into an array and a remainder slice at an index.
|
|
||||||
///
|
|
||||||
/// The array will contain all indices from `[0, N)` (excluding
|
|
||||||
/// the index `N` itself) and the slice will contain all
|
|
||||||
/// indices from `[N, len)` (excluding the index `len` itself).
|
|
||||||
///
|
|
||||||
/// # Panics
|
|
||||||
///
|
|
||||||
/// Panics if `N > len`.
|
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// #![feature(split_array)]
|
|
||||||
///
|
|
||||||
/// let v = &[1, 2, 3, 4, 5, 6][..];
|
|
||||||
///
|
|
||||||
/// {
|
|
||||||
/// let (left, right) = v.split_array_ref::<0>();
|
|
||||||
/// assert_eq!(left, &[]);
|
|
||||||
/// assert_eq!(right, [1, 2, 3, 4, 5, 6]);
|
|
||||||
/// }
|
|
||||||
///
|
|
||||||
/// {
|
|
||||||
/// let (left, right) = v.split_array_ref::<2>();
|
|
||||||
/// assert_eq!(left, &[1, 2]);
|
|
||||||
/// assert_eq!(right, [3, 4, 5, 6]);
|
|
||||||
/// }
|
|
||||||
///
|
|
||||||
/// {
|
|
||||||
/// let (left, right) = v.split_array_ref::<6>();
|
|
||||||
/// assert_eq!(left, &[1, 2, 3, 4, 5, 6]);
|
|
||||||
/// assert_eq!(right, []);
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
#[unstable(feature = "split_array", reason = "new API", issue = "90091")]
|
|
||||||
#[inline]
|
|
||||||
#[track_caller]
|
|
||||||
#[must_use]
|
|
||||||
pub fn split_array_ref<const N: usize>(&self) -> (&[T; N], &[T]) {
|
|
||||||
let (a, b) = self.split_at(N);
|
|
||||||
// SAFETY: a points to [T; N]? Yes it's [T] of length N (checked by split_at)
|
|
||||||
unsafe { (&*(a.as_ptr() as *const [T; N]), b) }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Divides one mutable slice into an array and a remainder slice at an index.
|
|
||||||
///
|
|
||||||
/// The array will contain all indices from `[0, N)` (excluding
|
|
||||||
/// the index `N` itself) and the slice will contain all
|
|
||||||
/// indices from `[N, len)` (excluding the index `len` itself).
|
|
||||||
///
|
|
||||||
/// # Panics
|
|
||||||
///
|
|
||||||
/// Panics if `N > len`.
|
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// #![feature(split_array)]
|
|
||||||
///
|
|
||||||
/// let mut v = &mut [1, 0, 3, 0, 5, 6][..];
|
|
||||||
/// let (left, right) = v.split_array_mut::<2>();
|
|
||||||
/// assert_eq!(left, &mut [1, 0]);
|
|
||||||
/// assert_eq!(right, [3, 0, 5, 6]);
|
|
||||||
/// left[1] = 2;
|
|
||||||
/// right[1] = 4;
|
|
||||||
/// assert_eq!(v, [1, 2, 3, 4, 5, 6]);
|
|
||||||
/// ```
|
|
||||||
#[unstable(feature = "split_array", reason = "new API", issue = "90091")]
|
|
||||||
#[inline]
|
|
||||||
#[track_caller]
|
|
||||||
#[must_use]
|
|
||||||
pub fn split_array_mut<const N: usize>(&mut self) -> (&mut [T; N], &mut [T]) {
|
|
||||||
let (a, b) = self.split_at_mut(N);
|
|
||||||
// SAFETY: a points to [T; N]? Yes it's [T] of length N (checked by split_at_mut)
|
|
||||||
unsafe { (&mut *(a.as_mut_ptr() as *mut [T; N]), b) }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Divides one slice into an array and a remainder slice at an index from
|
|
||||||
/// the end.
|
|
||||||
///
|
|
||||||
/// The slice will contain all indices from `[0, len - N)` (excluding
|
|
||||||
/// the index `len - N` itself) and the array will contain all
|
|
||||||
/// indices from `[len - N, len)` (excluding the index `len` itself).
|
|
||||||
///
|
|
||||||
/// # Panics
|
|
||||||
///
|
|
||||||
/// Panics if `N > len`.
|
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// #![feature(split_array)]
|
|
||||||
///
|
|
||||||
/// let v = &[1, 2, 3, 4, 5, 6][..];
|
|
||||||
///
|
|
||||||
/// {
|
|
||||||
/// let (left, right) = v.rsplit_array_ref::<0>();
|
|
||||||
/// assert_eq!(left, [1, 2, 3, 4, 5, 6]);
|
|
||||||
/// assert_eq!(right, &[]);
|
|
||||||
/// }
|
|
||||||
///
|
|
||||||
/// {
|
|
||||||
/// let (left, right) = v.rsplit_array_ref::<2>();
|
|
||||||
/// assert_eq!(left, [1, 2, 3, 4]);
|
|
||||||
/// assert_eq!(right, &[5, 6]);
|
|
||||||
/// }
|
|
||||||
///
|
|
||||||
/// {
|
|
||||||
/// let (left, right) = v.rsplit_array_ref::<6>();
|
|
||||||
/// assert_eq!(left, []);
|
|
||||||
/// assert_eq!(right, &[1, 2, 3, 4, 5, 6]);
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
#[unstable(feature = "split_array", reason = "new API", issue = "90091")]
|
|
||||||
#[inline]
|
|
||||||
#[must_use]
|
|
||||||
pub fn rsplit_array_ref<const N: usize>(&self) -> (&[T], &[T; N]) {
|
|
||||||
assert!(N <= self.len());
|
|
||||||
let (a, b) = self.split_at(self.len() - N);
|
|
||||||
// SAFETY: b points to [T; N]? Yes it's [T] of length N (checked by split_at)
|
|
||||||
unsafe { (a, &*(b.as_ptr() as *const [T; N])) }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Divides one mutable slice into an array and a remainder slice at an
|
|
||||||
/// index from the end.
|
|
||||||
///
|
|
||||||
/// The slice will contain all indices from `[0, len - N)` (excluding
|
|
||||||
/// the index `N` itself) and the array will contain all
|
|
||||||
/// indices from `[len - N, len)` (excluding the index `len` itself).
|
|
||||||
///
|
|
||||||
/// # Panics
|
|
||||||
///
|
|
||||||
/// Panics if `N > len`.
|
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// #![feature(split_array)]
|
|
||||||
///
|
|
||||||
/// let mut v = &mut [1, 0, 3, 0, 5, 6][..];
|
|
||||||
/// let (left, right) = v.rsplit_array_mut::<4>();
|
|
||||||
/// assert_eq!(left, [1, 0]);
|
|
||||||
/// assert_eq!(right, &mut [3, 0, 5, 6]);
|
|
||||||
/// left[1] = 2;
|
|
||||||
/// right[1] = 4;
|
|
||||||
/// assert_eq!(v, [1, 2, 3, 4, 5, 6]);
|
|
||||||
/// ```
|
|
||||||
#[unstable(feature = "split_array", reason = "new API", issue = "90091")]
|
|
||||||
#[inline]
|
|
||||||
#[must_use]
|
|
||||||
pub fn rsplit_array_mut<const N: usize>(&mut self) -> (&mut [T], &mut [T; N]) {
|
|
||||||
assert!(N <= self.len());
|
|
||||||
let (a, b) = self.split_at_mut(self.len() - N);
|
|
||||||
// SAFETY: b points to [T; N]? Yes it's [T] of length N (checked by split_at_mut)
|
|
||||||
unsafe { (a, &mut *(b.as_mut_ptr() as *mut [T; N])) }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Returns an iterator over subslices separated by elements that match
|
/// Returns an iterator over subslices separated by elements that match
|
||||||
/// `pred`. The matched element is not contained in the subslices.
|
/// `pred`. The matched element is not contained in the subslices.
|
||||||
///
|
///
|
||||||
|
@ -642,7 +642,7 @@ impl str {
|
|||||||
/// # Panics
|
/// # Panics
|
||||||
///
|
///
|
||||||
/// Panics if `mid` is not on a UTF-8 code point boundary, or if it is past
|
/// Panics if `mid` is not on a UTF-8 code point boundary, or if it is past
|
||||||
/// the end of the last code point of the string slice. For non-panicking
|
/// the end of the last code point of the string slice. For a non-panicking
|
||||||
/// alternative see [`split_at_checked`](str::split_at_checked).
|
/// alternative see [`split_at_checked`](str::split_at_checked).
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
@ -680,7 +680,7 @@ impl str {
|
|||||||
/// # Panics
|
/// # Panics
|
||||||
///
|
///
|
||||||
/// Panics if `mid` is not on a UTF-8 code point boundary, or if it is past
|
/// Panics if `mid` is not on a UTF-8 code point boundary, or if it is past
|
||||||
/// the end of the last code point of the string slice. For non-panicking
|
/// the end of the last code point of the string slice. For a non-panicking
|
||||||
/// alternative see [`split_at_mut_checked`](str::split_at_mut_checked).
|
/// alternative see [`split_at_mut_checked`](str::split_at_mut_checked).
|
||||||
///
|
///
|
||||||
/// # Examples
|
/// # Examples
|
||||||
|
Loading…
x
Reference in New Issue
Block a user