diff options
| author | bors <bors@rust-lang.org> | 2021-12-11 10:37:52 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2021-12-11 10:37:52 +0000 |
| commit | b9a37ad0d995c71518629b032f8e816e1efa8bca (patch) | |
| tree | 57b8f04dfb65960fab67fea155d939ab6a8f8886 /library/core/src/array | |
| parent | 4a66a704b2c3d30ff07d89380ebb9ba3de3b3182 (diff) | |
| parent | 5da73311be4c6cefc557c8615d39b0e44ef8de95 (diff) | |
| download | rust-b9a37ad0d995c71518629b032f8e816e1efa8bca.tar.gz rust-b9a37ad0d995c71518629b032f8e816e1efa8bca.zip | |
Auto merge of #91776 - matthiaskrgr:rollup-tlb4bw1, r=matthiaskrgr
Rollup of 6 pull requests
Successful merges:
- #91127 (Add `<*{const|mut} T>::{to|from}_bits`)
- #91310 (Add --out-dir flag for rustdoc)
- #91373 (Add needs-unwind to tests that depend on panicking)
- #91426 (Make IdFunctor::try_map_id panic-safe)
- #91515 (Add rsplit_array variants to slices and arrays)
- #91553 (socket ancillary data implementation for dragonflybsd.)
Failed merges:
r? `@ghost`
`@rustbot` modify labels: rollup
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 |
