rust_utils/slice.rs
1use crate::sealed::Sealed;
2
3impl<T> Sealed for [T] {}
4
5pub trait SliceExt<T>: Sealed {
6 fn get2_mut(&mut self, i: usize, j: usize) -> Option<(&mut T, &mut T)>;
7}
8
9impl<T> SliceExt<T> for [T] {
10 fn get2_mut(&mut self, i: usize, j: usize) -> Option<(&mut T, &mut T)> {
11 if i == j || i >= self.len() || j >= self.len() {
12 return None;
13 }
14 // SAFETY: `i` and `j` are in bounds and not equal
15 unsafe {
16 let ptr = self.as_mut_ptr();
17 Some((&mut *ptr.add(i), &mut *ptr.add(j)))
18 }
19 }
20}