@@ -345,7 +345,7 @@ macro_rules! impl_Exp {
345
345
346
346
// decode 2 chars at a time
347
347
while n >= 100 {
348
- let d1 = ( ( n % 100 ) << 1 ) as usize ;
348
+ let d1 = ( ( n % 100 ) as usize ) << 1 ;
349
349
curr -= 2 ;
350
350
// SAFETY: `d1 <= 198`, so we can copy from `lut_ptr[d1..d1 + 2]` since
351
351
// `DEC_DIGITS_LUT` has a length of 200.
@@ -494,73 +494,73 @@ fn parse_u64_into<const N: usize>(mut n: u64, buf: &mut [MaybeUninit<u8>; N], cu
494
494
n /= 1e16 as u64 ;
495
495
496
496
// Some of these are nops but it looks more elegant this way.
497
- let d1 = ( ( ( to_parse / 1e14 as u64 ) % 100 ) << 1 ) as usize ;
498
- let d2 = ( ( ( to_parse / 1e12 as u64 ) % 100 ) << 1 ) as usize ;
499
- let d3 = ( ( ( to_parse / 1e10 as u64 ) % 100 ) << 1 ) as usize ;
500
- let d4 = ( ( ( to_parse / 1e8 as u64 ) % 100 ) << 1 ) as usize ;
501
- let d5 = ( ( ( to_parse / 1e6 as u64 ) % 100 ) << 1 ) as usize ;
502
- let d6 = ( ( ( to_parse / 1e4 as u64 ) % 100 ) << 1 ) as usize ;
503
- let d7 = ( ( ( to_parse / 1e2 as u64 ) % 100 ) << 1 ) as usize ;
504
- let d8 = ( ( ( to_parse / 1e0 as u64 ) % 100 ) << 1 ) as usize ;
497
+ let d1 = ( ( to_parse / 1e14 as u64 ) % 100 ) << 1 ;
498
+ let d2 = ( ( to_parse / 1e12 as u64 ) % 100 ) << 1 ;
499
+ let d3 = ( ( to_parse / 1e10 as u64 ) % 100 ) << 1 ;
500
+ let d4 = ( ( to_parse / 1e8 as u64 ) % 100 ) << 1 ;
501
+ let d5 = ( ( to_parse / 1e6 as u64 ) % 100 ) << 1 ;
502
+ let d6 = ( ( to_parse / 1e4 as u64 ) % 100 ) << 1 ;
503
+ let d7 = ( ( to_parse / 1e2 as u64 ) % 100 ) << 1 ;
504
+ let d8 = ( ( to_parse / 1e0 as u64 ) % 100 ) << 1 ;
505
505
506
506
* curr -= 16 ;
507
507
508
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d1) , buf_ptr. add ( * curr + 0 ) , 2 ) ;
509
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d2) , buf_ptr. add ( * curr + 2 ) , 2 ) ;
510
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d3) , buf_ptr. add ( * curr + 4 ) , 2 ) ;
511
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d4) , buf_ptr. add ( * curr + 6 ) , 2 ) ;
512
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d5) , buf_ptr. add ( * curr + 8 ) , 2 ) ;
513
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d6) , buf_ptr. add ( * curr + 10 ) , 2 ) ;
514
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d7) , buf_ptr. add ( * curr + 12 ) , 2 ) ;
515
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d8) , buf_ptr. add ( * curr + 14 ) , 2 ) ;
508
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d1 as usize ) , buf_ptr. add ( * curr + 0 ) , 2 ) ;
509
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d2 as usize ) , buf_ptr. add ( * curr + 2 ) , 2 ) ;
510
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d3 as usize ) , buf_ptr. add ( * curr + 4 ) , 2 ) ;
511
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d4 as usize ) , buf_ptr. add ( * curr + 6 ) , 2 ) ;
512
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d5 as usize ) , buf_ptr. add ( * curr + 8 ) , 2 ) ;
513
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d6 as usize ) , buf_ptr. add ( * curr + 10 ) , 2 ) ;
514
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d7 as usize ) , buf_ptr. add ( * curr + 12 ) , 2 ) ;
515
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d8 as usize ) , buf_ptr. add ( * curr + 14 ) , 2 ) ;
516
516
}
517
517
if n >= 1e8 as u64 {
518
518
let to_parse = n % 1e8 as u64 ;
519
519
n /= 1e8 as u64 ;
520
520
521
521
// Some of these are nops but it looks more elegant this way.
522
- let d1 = ( ( ( to_parse / 1e6 as u64 ) % 100 ) << 1 ) as usize ;
523
- let d2 = ( ( ( to_parse / 1e4 as u64 ) % 100 ) << 1 ) as usize ;
524
- let d3 = ( ( ( to_parse / 1e2 as u64 ) % 100 ) << 1 ) as usize ;
525
- let d4 = ( ( ( to_parse / 1e0 as u64 ) % 100 ) << 1 ) as usize ;
522
+ let d1 = ( ( to_parse / 1e6 as u64 ) % 100 ) << 1 ;
523
+ let d2 = ( ( to_parse / 1e4 as u64 ) % 100 ) << 1 ;
524
+ let d3 = ( ( to_parse / 1e2 as u64 ) % 100 ) << 1 ;
525
+ let d4 = ( ( to_parse / 1e0 as u64 ) % 100 ) << 1 ;
526
526
* curr -= 8 ;
527
527
528
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d1) , buf_ptr. add ( * curr + 0 ) , 2 ) ;
529
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d2) , buf_ptr. add ( * curr + 2 ) , 2 ) ;
530
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d3) , buf_ptr. add ( * curr + 4 ) , 2 ) ;
531
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d4) , buf_ptr. add ( * curr + 6 ) , 2 ) ;
528
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d1 as usize ) , buf_ptr. add ( * curr + 0 ) , 2 ) ;
529
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d2 as usize ) , buf_ptr. add ( * curr + 2 ) , 2 ) ;
530
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d3 as usize ) , buf_ptr. add ( * curr + 4 ) , 2 ) ;
531
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d4 as usize ) , buf_ptr. add ( * curr + 6 ) , 2 ) ;
532
532
}
533
533
// `n` < 1e8 < (1 << 32)
534
534
let mut n = n as u32 ;
535
535
if n >= 1e4 as u32 {
536
536
let to_parse = n % 1e4 as u32 ;
537
537
n /= 1e4 as u32 ;
538
538
539
- let d1 = ( ( to_parse / 100 ) << 1 ) as usize ;
540
- let d2 = ( ( to_parse % 100 ) << 1 ) as usize ;
539
+ let d1 = ( to_parse / 100 ) << 1 ;
540
+ let d2 = ( to_parse % 100 ) << 1 ;
541
541
* curr -= 4 ;
542
542
543
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d1) , buf_ptr. add ( * curr + 0 ) , 2 ) ;
544
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d2) , buf_ptr. add ( * curr + 2 ) , 2 ) ;
543
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d1 as usize ) , buf_ptr. add ( * curr + 0 ) , 2 ) ;
544
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d2 as usize ) , buf_ptr. add ( * curr + 2 ) , 2 ) ;
545
545
}
546
546
547
547
// `n` < 1e4 < (1 << 16)
548
548
let mut n = n as u16 ;
549
549
if n >= 100 {
550
- let d1 = ( ( n % 100 ) << 1 ) as usize ;
550
+ let d1 = ( n % 100 ) << 1 ;
551
551
n /= 100 ;
552
552
* curr -= 2 ;
553
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d1) , buf_ptr. add ( * curr) , 2 ) ;
553
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d1 as usize ) , buf_ptr. add ( * curr) , 2 ) ;
554
554
}
555
555
556
556
// decode last 1 or 2 chars
557
557
if n < 10 {
558
558
* curr -= 1 ;
559
559
* buf_ptr. add ( * curr) = ( n as u8 ) + b'0' ;
560
560
} else {
561
- let d1 = ( n << 1 ) as usize ;
561
+ let d1 = n << 1 ;
562
562
* curr -= 2 ;
563
- ptr:: copy_nonoverlapping ( lut_ptr. add ( d1) , buf_ptr. add ( * curr) , 2 ) ;
563
+ ptr:: copy_nonoverlapping ( lut_ptr. add ( d1 as usize ) , buf_ptr. add ( * curr) , 2 ) ;
564
564
}
565
565
}
566
566
}
0 commit comments