|
| 1 | +#![feature(array_chunks, slice_as_chunks)] |
| 2 | + |
1 | 3 | fn main() {
|
2 |
| - let mut a = [0; 5]; |
3 |
| - let ptr1: *mut i32 = &mut a[1]; |
4 |
| - let ptr2: *mut i32 = &mut a[3]; |
5 |
| - unsafe { |
6 |
| - assert_eq!(ptr2.offset_from(ptr1), 2); |
7 |
| - assert_eq!(ptr1.offset_from(ptr2), -2); |
8 |
| - assert_eq!(ptr1.offset(2), ptr2); |
9 |
| - assert_eq!(ptr2.offset(-2), ptr1); |
| 4 | + let v: &mut [i32] = &mut [0, 1, 2, 3, 4, 5, 6]; |
| 5 | + |
| 6 | + const WINDOW_SIZE: usize = 3; |
| 7 | + |
| 8 | + let mut i = 0; |
| 9 | + let len = v.len(); |
| 10 | + while i < len { |
| 11 | + if i + WINDOW_SIZE >= len { |
| 12 | + break; |
| 13 | + } |
| 14 | + |
| 15 | + //let slice: &mut [i32; WINDOW_SIZE] = TryFrom::try_from(&mut v[i..i+WINDOW_SIZE]).unwrap(); |
| 16 | + let slice = &mut v[i..i+WINDOW_SIZE]; |
| 17 | + let ptr = slice.as_mut_ptr() as *mut [i32; WINDOW_SIZE]; |
| 18 | + let array: &mut [i32; WINDOW_SIZE] = unsafe { &mut *ptr }; |
| 19 | + //println!("{:?}", array); |
| 20 | + |
| 21 | + let sum = array.iter().sum::<i32>(); |
| 22 | + *array = [sum; WINDOW_SIZE]; |
| 23 | + |
| 24 | + i += WINDOW_SIZE; |
10 | 25 | }
|
| 26 | + |
| 27 | + //println!("{:?}", v); |
| 28 | + assert_eq!(v, &[3, 3, 3, 12, 12, 12, 6]); |
| 29 | + |
| 30 | + /*for a in v.array_chunks_mut() { |
| 31 | + let sum = a.iter().sum::<i32>(); |
| 32 | + *a = [sum; 3]; |
| 33 | + } |
| 34 | + assert_eq!(v, &[3, 3, 3, 12, 12, 12, 6]);*/ |
| 35 | + |
| 36 | + /*let v2: &mut [i32] = &mut [0, 1, 2, 3, 4, 5, 6]; |
| 37 | + v2.array_chunks_mut().for_each(|[a, b]| core::mem::swap(a, b)); |
| 38 | + assert_eq!(v2, &[1, 0, 3, 2, 5, 4, 6]);*/ |
11 | 39 | }
|
0 commit comments