Rollup merge of #100663 - clarfonthey:const-reverse, r=scottmcm
Make slice::reverse const I remember this not being doable for some reason before, but decided to try it again and everything worked out in the tests.
This commit is contained in:
commit
1cdcf508bb
1 changed files with 8 additions and 5 deletions
|
@ -674,8 +674,9 @@ impl<T> [T] {
|
|||
/// assert!(v == [3, 2, 1]);
|
||||
/// ```
|
||||
#[stable(feature = "rust1", since = "1.0.0")]
|
||||
#[rustc_const_unstable(feature = "const_reverse", issue = "100784")]
|
||||
#[inline]
|
||||
pub fn reverse(&mut self) {
|
||||
pub const fn reverse(&mut self) {
|
||||
let half_len = self.len() / 2;
|
||||
let Range { start, end } = self.as_mut_ptr_range();
|
||||
|
||||
|
@ -698,9 +699,9 @@ impl<T> [T] {
|
|||
revswap(front_half, back_half, half_len);
|
||||
|
||||
#[inline]
|
||||
fn revswap<T>(a: &mut [T], b: &mut [T], n: usize) {
|
||||
debug_assert_eq!(a.len(), n);
|
||||
debug_assert_eq!(b.len(), n);
|
||||
const fn revswap<T>(a: &mut [T], b: &mut [T], n: usize) {
|
||||
debug_assert!(a.len() == n);
|
||||
debug_assert!(b.len() == n);
|
||||
|
||||
// Because this function is first compiled in isolation,
|
||||
// this check tells LLVM that the indexing below is
|
||||
|
@ -708,8 +709,10 @@ impl<T> [T] {
|
|||
// lengths of the slices are known -- it's removed.
|
||||
let (a, b) = (&mut a[..n], &mut b[..n]);
|
||||
|
||||
for i in 0..n {
|
||||
let mut i = 0;
|
||||
while i < n {
|
||||
mem::swap(&mut a[i], &mut b[n - 1 - i]);
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue