@@ -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