1 use std::mem::MaybeUninit; 2 3 use crate::misc::maybe_uninit_write; 4 5 /// Encode u64 as varint. 6 /// Panics if buffer length is less than 10. 7 #[inline] encode_varint64(mut value: u64, buf: &mut [MaybeUninit<u8>]) -> usize8pub fn encode_varint64(mut value: u64, buf: &mut [MaybeUninit<u8>]) -> usize { 9 assert!(buf.len() >= 10); 10 11 unsafe { 12 let mut i = 0; 13 while (value & !0x7F) > 0 { 14 maybe_uninit_write(buf.get_unchecked_mut(i), ((value & 0x7F) | 0x80) as u8); 15 value >>= 7; 16 i += 1; 17 } 18 maybe_uninit_write(buf.get_unchecked_mut(i), value as u8); 19 i + 1 20 } 21 } 22 23 /// Encode u32 value as varint. 24 /// Panics if buffer length is less than 5. 25 #[inline] encode_varint32(mut value: u32, buf: &mut [MaybeUninit<u8>]) -> usize26pub fn encode_varint32(mut value: u32, buf: &mut [MaybeUninit<u8>]) -> usize { 27 assert!(buf.len() >= 5); 28 29 unsafe { 30 let mut i = 0; 31 while (value & !0x7F) > 0 { 32 maybe_uninit_write(buf.get_unchecked_mut(i), ((value & 0x7F) | 0x80) as u8); 33 value >>= 7; 34 i += 1; 35 } 36 maybe_uninit_write(buf.get_unchecked_mut(i), value as u8); 37 i + 1 38 } 39 } 40