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>]) -> usize8 pub 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>]) -> usize26 pub 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