xsnappy/binary/
mod.rs

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}