sqlite_fsr/utils/
varint.rs1pub fn parse_varint(bytes: &[u8]) -> (i64, usize) {
2 let mut value: u64 = 0; let mut len = 0;
4
5 for &byte in bytes.iter().take(9) {
6 len += 1;
7
8 if len == 9 {
9 value = (value << 8) | (byte as u64);
11 return (value as i64, len);
12 } else {
13 value = (value << 7) | ((byte & 0x7F) as u64);
15
16 if byte & 0x80 == 0 {
17 return (value as i64, len);
19 }
20 }
21 }
22
23 (value as i64, len)
25}
26
27pub fn encode_varint(mut value: i64) -> Vec<u8> {
28 let mut varint_bytes = Vec::new();
29
30 loop {
31 let byte = (value & 0x7F) as u8; value >>= 7;
33 if value != 0 {
34 varint_bytes.push(byte | 0x80); } else {
36 varint_bytes.push(byte); break;
38 }
39 }
40
41 return varint_bytes
42}