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