@@ -1384,8 +1384,8 @@ impl<T> [T] {
1384
1384
let mut indices: Vec <_> =
1385
1385
$slice. iter( ) . map( $f) . enumerate( ) . map( |( i, k) | ( k, i as $t) ) . collect( ) ;
1386
1386
// The elements of `indices` are unique, as they are indexed, so any sort will be
1387
- // stable with respect to the original slice. We use `sort_unstable` here because it
1388
- // requires less memory allocation.
1387
+ // stable with respect to the original slice. We use `sort_unstable` here because
1388
+ // it requires less memory allocation.
1389
1389
indices. sort_unstable( ) ;
1390
1390
for i in 0 ..$slice. len( ) {
1391
1391
let mut index = indices[ i] . 1 ;
@@ -1398,10 +1398,15 @@ impl<T> [T] {
1398
1398
} )
1399
1399
}
1400
1400
1401
+ let sz_u8 = mem:: size_of :: < ( K , u8 ) > ( ) ;
1402
+ let sz_u16 = mem:: size_of :: < ( K , u16 ) > ( ) ;
1403
+ let sz_u32 = mem:: size_of :: < ( K , u32 ) > ( ) ;
1404
+ let sz_usize = mem:: size_of :: < ( K , usize ) > ( ) ;
1405
+
1401
1406
let len = self . len ( ) ;
1402
- if len <= ( u8:: MAX as usize ) { return sort_by_key ! ( u8 , self , f) }
1403
- if len <= ( u16:: MAX as usize ) { return sort_by_key ! ( u16 , self , f) }
1404
- if len <= ( u32:: MAX as usize ) { return sort_by_key ! ( u32 , self , f) }
1407
+ if sz_u8 < sz_u16 && len <= ( u8:: MAX as usize ) { return sort_by_key ! ( u8 , self , f) }
1408
+ if sz_u16 < sz_u32 && len <= ( u16:: MAX as usize ) { return sort_by_key ! ( u16 , self , f) }
1409
+ if sz_u32 < sz_usize && len <= ( u32:: MAX as usize ) { return sort_by_key ! ( u32 , self , f) }
1405
1410
sort_by_key ! ( usize , self , f)
1406
1411
}
1407
1412
0 commit comments