ryu/pretty/
exponent.rs
1use core::ptr;
2
3use digit_table::*;
4
5#[cfg_attr(feature = "no-panic", inline)]
6pub unsafe fn write_exponent3(mut k: isize, mut result: *mut u8) -> usize {
7 let sign = k < 0;
8 if sign {
9 *result = b'-';
10 result = result.offset(1);
11 k = -k;
12 }
13
14 debug_assert!(k < 1000);
15 if k >= 100 {
16 *result = b'0' + (k / 100) as u8;
17 k %= 100;
18 let d = DIGIT_TABLE.get_unchecked(k as usize * 2);
19 ptr::copy_nonoverlapping(d, result.offset(1), 2);
20 sign as usize + 3
21 } else if k >= 10 {
22 let d = DIGIT_TABLE.get_unchecked(k as usize * 2);
23 ptr::copy_nonoverlapping(d, result, 2);
24 sign as usize + 2
25 } else {
26 *result = b'0' + k as u8;
27 sign as usize + 1
28 }
29}
30
31#[cfg_attr(feature = "no-panic", inline)]
32pub unsafe fn write_exponent2(mut k: isize, mut result: *mut u8) -> usize {
33 let sign = k < 0;
34 if sign {
35 *result = b'-';
36 result = result.offset(1);
37 k = -k;
38 }
39
40 debug_assert!(k < 100);
41 if k >= 10 {
42 let d = DIGIT_TABLE.get_unchecked(k as usize * 2);
43 ptr::copy_nonoverlapping(d, result, 2);
44 sign as usize + 2
45 } else {
46 *result = b'0' + k as u8;
47 sign as usize + 1
48 }
49}