Skip to content

Commit a8902c0

Browse files
committed
Make stuf unsafe
1 parent 3859921 commit a8902c0

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

src/day23.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -156,13 +156,13 @@ fn expand(
156156

157157
let mut new_r = heapless::Vec::<(u16, u16), MAX_C>::new();
158158
for (i, _) in rest.iter() {
159-
if g[*i as usize * MAX + p] {
159+
if unsafe { *g.get_unchecked(*i as usize * MAX + p) } {
160160
new_r.push((*i, 0)).unwrap();
161161
}
162162
}
163163

164164
if !new_r.is_empty() {
165-
number_sort(new_r.as_mut_slice(), g, cs);
165+
unsafe { number_sort(new_r.as_mut_slice(), g, cs) };
166166
expand(&mut new_r, g, q, q_max, cs);
167167
} else if q.len() > q_max.len() {
168168
q_max.clone_from(q);
@@ -175,7 +175,8 @@ fn expand(
175175
}
176176
}
177177

178-
fn number_sort(
178+
#[inline(always)]
179+
unsafe fn number_sort(
179180
r: &mut [(u16, u16)],
180181
g: &BitArray<[u64; BAL]>,
181182
cs: &mut [heapless::Vec<u16, MAX_C>; MAX_C],
@@ -191,8 +192,8 @@ fn number_sort(
191192
let mut k = 0;
192193

193194
'outer: loop {
194-
for i in &cs[k] {
195-
if g[*i as usize * MAX + p] {
195+
for i in cs.get_unchecked(k) {
196+
if *g.get_unchecked(*i as usize * MAX + p) {
196197
k += 1;
197198
continue 'outer;
198199
}
@@ -201,18 +202,18 @@ fn number_sort(
201202
}
202203
if k > maxno {
203204
maxno = k;
204-
cs[maxno + 1].clear();
205+
cs.get_unchecked_mut(maxno + 1).clear();
205206
}
206-
cs[k].push(p as u16).unwrap();
207+
cs.get_unchecked_mut(k).push(p as u16).unwrap();
207208

208209
r = rest;
209210
}
210211
}
211212

212213
let mut i = 0;
213214
for k in 0..=maxno {
214-
for j in &cs[k] {
215-
r[i] = (*j, k as u16);
215+
for j in cs.get_unchecked(k) {
216+
*r.get_unchecked_mut(i) = (*j, k as u16);
216217
i += 1;
217218
}
218219
}

0 commit comments

Comments
 (0)