Optimize write_u128 for small integers

This commit is contained in:
Kogia-sima 2020-07-08 05:55:03 +09:00
parent 636633331b
commit b46ffbe623
1 changed files with 13 additions and 4 deletions

View File

@ -189,10 +189,10 @@ unsafe fn write_u64(mut n: u64, buf: *mut u8) -> usize {
}
}
unsafe fn write_u128(n: u128, buf: *mut u8) -> usize {
if n <= std::u64::MAX as u128 {
write_u64(n as u64, buf)
} else if n < 100_000_000_000_000_000_000_000_000_000_000 {
unsafe fn write_u128_big(n: u128, buf: *mut u8) -> usize {
debug_assert!(n > std::u64::MAX as u128);
if n < 100_000_000_000_000_000_000_000_000_000_000 {
let a0 = (n / 10_000_000_000_000_000) as u64;
let a1 = (n % 10_000_000_000_000_000) as u64;
@ -254,6 +254,15 @@ unsafe fn write_u128(n: u128, buf: *mut u8) -> usize {
}
}
#[inline]
unsafe fn write_u128(n: u128, buf: *mut u8) -> usize {
if n <= std::u64::MAX as u128 {
write_u64(n as u64, buf)
} else {
write_u128_big(n, buf)
}
}
pub trait Integer {
const MAX_LEN: usize;
unsafe fn write_to(self, buf: *mut u8) -> usize;