1
2pub fn put_uvarint(buf: &mut [u8], mut x: u64) -> usize {
3 let mut i = 0;
4 while x >= 0x80 {
5 buf[i] = x as u8 | 0x80;
6 x >>= 7;
7 i += 1;
8 }
9 buf[i] = x as u8;
10 (i + 1) as usize
11}
12
13pub fn uvarint(buf: &[u8]) -> (u64, isize) {
14 let mut x: u64 = 0;
15 let mut s: u32 = 0;
16 for i in 0..buf.len() {
17 let b = buf[i];
18 if b < 0x80 {
19 if i > 9 || i == 9 && b > 1 {
20 return (0, -1 * (i + 1) as isize)
21 }
22 return (x | ((b as u64) << s) as u64, (i + 1) as isize)
23 }
24 x = x | (((b & 0x7f) as u64) << s as u64);
25 s += 7;
26 }
27 return (0, 0)
28}
29
30pub fn load32(b: &[u8], i: usize) -> u32 {
31 let b2 = &b[i..i+4];
32 return b2[0] as u32 | (b2[1] as u32) << 8 | (b2[2] as u32) << 16 | (b2[3] as u32) << 24
33}
34
35pub fn load64(b: &[u8], i: usize) -> u64 {
36 let b2 = &b[i..i+8];
37 return b2[0] as u64 | (b2[1] as u64) << 8 | (b2[2] as u64) << 16 | (b2[3] as u64) << 24 |
38 (b2[4] as u64) << 32 | (b2[5] as u64) << 40 | (b2[6] as u64) << 48 | (b2[7] as u64) << 56
39}