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