#[inline]
pub(super) fn decode_digits(digits: [u64; 2], count: u32) -> u64 {
const POW10: [u64; 9] = [1, 10, 100, 1000, 10_000, 100_000, 1_000_000, 10_000_000, 100_000_000];
debug_assert!((1..=16).contains(&count));
if count <= 8 {
decode_eight_digits(digits[0] << ((8 - count) * 8))
} else {
decode_eight_digits(digits[0]) * POW10[(count - 8) as usize]
+ decode_eight_digits(digits[1] << ((16 - count) * 8))
}
}
#[inline]
fn decode_eight_digits(value: u64) -> u64 {
const MASK: u64 = 0x0000_00FF_0000_00FF;
let value = value.wrapping_mul(2561) >> 8;
(value & MASK)
.wrapping_mul(0x000F_4240_0000_0064)
.wrapping_add(((value >> 16) & MASK).wrapping_mul(0x0000_2710_0000_0001))
>> 32
}