diff options
| author | Jethro Beekman <jethro@jbeekman.nl> | 2021-12-04 10:32:09 +0100 |
|---|---|---|
| committer | Jethro Beekman <jethro@jbeekman.nl> | 2021-12-10 21:34:19 +0100 |
| commit | 203cf2d3668e38dfa3088763789d2541c5943ae7 (patch) | |
| tree | 23fc10c2b1f4e5768aa38d9e26a92d186f28282b /library/core/src/array | |
| parent | 0b42deaccc2cbe17a68067aa5fdb76104369e1fd (diff) | |
| download | rust-203cf2d3668e38dfa3088763789d2541c5943ae7.tar.gz rust-203cf2d3668e38dfa3088763789d2541c5943ae7.zip | |
Add rsplit_array variants to slices and arrays
Diffstat (limited to 'library/core/src/array')
| -rw-r--r-- | library/core/src/array/mod.rs | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/library/core/src/array/mod.rs b/library/core/src/array/mod.rs index 23fd1453e54..5e295ffbff7 100644 --- a/library/core/src/array/mod.rs +++ b/library/core/src/array/mod.rs @@ -645,6 +645,84 @@ impl<T, const N: usize> [T; N] { pub fn split_array_mut<const M: usize>(&mut self) -> (&mut [T; M], &mut [T]) { (&mut self[..]).split_array_mut::<M>() } + + /// Divides one array reference into two at an index from the end. + /// + /// The first will contain all indices from `[0, N - M)` (excluding + /// the index `N - M` itself) and the second will contain all + /// indices from `[N - M, N)` (excluding the index `N` itself). + /// + /// # Panics + /// + /// Panics if `M > N`. + /// + /// # 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 = "return type should have array as 2nd element", + issue = "90091" + )] + #[inline] + pub fn rsplit_array_ref<const M: usize>(&self) -> (&[T], &[T; M]) { + (&self[..]).rsplit_array_ref::<M>() + } + + /// Divides one mutable array reference into two at an index from the end. + /// + /// The first will contain all indices from `[0, N - M)` (excluding + /// the index `N - M` itself) and the second will contain all + /// indices from `[N - M, N)` (excluding the index `N` itself). + /// + /// # Panics + /// + /// Panics if `M > N`. + /// + /// # Examples + /// + /// ``` + /// #![feature(split_array)] + /// + /// let mut v = [1, 0, 3, 0, 5, 6]; + /// let (left, right) = v.rsplit_array_mut::<4>(); + /// assert_eq!(left, &mut [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 = "return type should have array as 2nd element", + issue = "90091" + )] + #[inline] + pub fn rsplit_array_mut<const M: usize>(&mut self) -> (&mut [T], &mut [T; M]) { + (&mut self[..]).rsplit_array_mut::<M>() + } } /// Pulls `N` items from `iter` and returns them as an array. If the iterator |
