use std::mem::MaybeUninit; use crate::misc::maybe_uninit_write; /// Encode u64 as varint. /// Panics if buffer length is less than 10. #[inline] pub fn encode_varint64(mut value: u64, buf: &mut [MaybeUninit]) -> usize { assert!(buf.len() >= 10); unsafe { let mut i = 0; while (value & !0x7F) > 0 { maybe_uninit_write(buf.get_unchecked_mut(i), ((value & 0x7F) | 0x80) as u8); value >>= 7; i += 1; } maybe_uninit_write(buf.get_unchecked_mut(i), value as u8); i + 1 } } /// Encode u32 value as varint. /// Panics if buffer length is less than 5. #[inline] pub fn encode_varint32(mut value: u32, buf: &mut [MaybeUninit]) -> usize { assert!(buf.len() >= 5); unsafe { let mut i = 0; while (value & !0x7F) > 0 { maybe_uninit_write(buf.get_unchecked_mut(i), ((value & 0x7F) | 0x80) as u8); value >>= 7; i += 1; } maybe_uninit_write(buf.get_unchecked_mut(i), value as u8); i + 1 } }