Skip to content

Commit 64d1433

Browse files
committed
Refactor pick2_mut & pick3_mut to use get_disjoint_mut
1 parent f2d69d5 commit 64d1433

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

Diff for: compiler/rustc_index/src/slice.rs

+10-8
Original file line numberDiff line numberDiff line change
@@ -120,13 +120,12 @@ impl<I: Idx, T> IndexSlice<I, T> {
120120
pub fn pick2_mut(&mut self, a: I, b: I) -> (&mut T, &mut T) {
121121
let (ai, bi) = (a.index(), b.index());
122122
assert!(ai != bi);
123+
let len = self.raw.len();
124+
assert!(ai < len && bi < len);
123125

124-
if ai < bi {
125-
let (c1, c2) = self.raw.split_at_mut(bi);
126-
(&mut c1[ai], &mut c2[0])
127-
} else {
128-
let (c2, c1) = self.pick2_mut(b, a);
129-
(c1, c2)
126+
match self.raw.get_disjoint_mut([ai, bi]) {
127+
Ok([a, b]) => (a, b),
128+
Err(_) => panic!("Can't get mutable references"),
130129
}
131130
}
132131

@@ -139,8 +138,11 @@ impl<I: Idx, T> IndexSlice<I, T> {
139138
assert!(ai != bi && bi != ci && ci != ai);
140139
let len = self.raw.len();
141140
assert!(ai < len && bi < len && ci < len);
142-
let ptr = self.raw.as_mut_ptr();
143-
unsafe { (&mut *ptr.add(ai), &mut *ptr.add(bi), &mut *ptr.add(ci)) }
141+
142+
match self.raw.get_disjoint_mut([ai, bi, ci]) {
143+
Ok([a, b, c]) => (a, b, c),
144+
Err(_) => panic!("Can't get mutable references"),
145+
}
144146
}
145147

146148
#[inline]

0 commit comments

Comments
 (0)