ryu/pretty/
exponent.rs

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