static DIGIT_PAIRS: &[u8; 200] = b"\
0001020304050607080910111213141516171819\
2021222324252627282930313233343536373839\
4041424344454647484950515253545556575859\
6061626364656667686970717273747576777879\
8081828384858687888990919293949596979899";
pub(crate) const MAX_INT_DIGITS: usize = 20;
#[inline(always)]
fn digit_count(v: u64) -> usize {
if v == 0 { 1 } else { v.ilog10() as usize + 1 }
}
#[inline]
pub(crate) fn write_u64(v: u64, buf: &mut [u8; MAX_INT_DIGITS]) -> usize {
let n = digit_count(v);
let mut p = n;
let mut v = v;
while v >= 100 {
let rem = (v % 100) as usize;
v /= 100;
p -= 2;
buf[p] = DIGIT_PAIRS[rem * 2];
buf[p + 1] = DIGIT_PAIRS[rem * 2 + 1];
}
if v >= 10 {
let rem = v as usize;
p -= 2;
buf[p] = DIGIT_PAIRS[rem * 2];
buf[p + 1] = DIGIT_PAIRS[rem * 2 + 1];
} else {
p -= 1;
buf[p] = b'0' + v as u8;
}
debug_assert_eq!(p, 0);
n
}