serde_json/lexical/
cached.rs
1use super::cached_float80;
6use super::float::ExtendedFloat;
7
8#[doc(hidden)]
12pub(crate) struct ExtendedFloatArray {
13 pub mant: &'static [u64],
15 pub exp: &'static [i32],
17}
18
19impl ExtendedFloatArray {
21 #[inline]
22 pub fn get_extended_float(&self, index: usize) -> ExtendedFloat {
23 let mant = self.mant[index];
24 let exp = self.exp[index];
25 ExtendedFloat { mant, exp }
26 }
27
28 #[inline]
29 pub fn len(&self) -> usize {
30 self.mant.len()
31 }
32}
33
34#[doc(hidden)]
38pub(crate) struct ModeratePathPowers {
39 pub small: ExtendedFloatArray,
41 pub large: ExtendedFloatArray,
43 pub small_int: &'static [u64],
45 pub step: i32,
47 pub bias: i32,
49}
50
51impl ModeratePathPowers {
53 #[inline]
54 pub fn get_small(&self, index: usize) -> ExtendedFloat {
55 self.small.get_extended_float(index)
56 }
57
58 #[inline]
59 pub fn get_large(&self, index: usize) -> ExtendedFloat {
60 self.large.get_extended_float(index)
61 }
62
63 #[inline]
64 pub fn get_small_int(&self, index: usize) -> u64 {
65 self.small_int[index]
66 }
67}
68
69pub(crate) trait ModeratePathCache {
73 fn get_powers() -> &'static ModeratePathPowers;
75}
76
77impl ModeratePathCache for ExtendedFloat {
78 #[inline]
79 fn get_powers() -> &'static ModeratePathPowers {
80 cached_float80::get_powers()
81 }
82}