MCPcopy Create free account
hub / github.com/RustCrypto/utils / read_vlq

Function read_vlq

blobby/src/decode.rs:3–42  ·  view source on GitHub ↗
(data: &mut &[u8])

Source from the content-addressed store, hash-verified

1use super::{Error, NEXT_MASK, VAL_MASK};
2
3pub(crate) const fn read_vlq(data: &mut &[u8]) -> Result<usize, Error> {
4 let b = match data.split_first() {
5 Some((&b, rest)) => {
6 *data = rest;
7 b
8 }
9 None => return Err(Error::UnexpectedEnd),
10 };
11 let mut next = b & NEXT_MASK;
12 let mut val = (b & VAL_MASK) as usize;
13
14 macro_rules! step {
15 () => {
16 if next == 0 {
17 return Ok(val);
18 }
19 let b = match data.split_first() {
20 Some((&b, rest)) => {
21 *data = rest;
22 b
23 }
24 None => return Err(Error::UnexpectedEnd),
25 };
26
27 next = b & NEXT_MASK;
28 let t = (b & VAL_MASK) as usize;
29 val = ((val + 1) << 7) + t;
30 };
31 }
32
33 step!();
34 step!();
35 step!();
36
37 if next != 0 {
38 return Err(Error::InvalidVlq);
39 }
40
41 Ok(val)
42}
43
44macro_rules! try_read_vlq {
45 ($data:expr) => {

Callers 3

encode_decodeFunction · 0.85
test_vlqFunction · 0.85
parseMethod · 0.85

Calls

no outgoing calls

Tested by 2

encode_decodeFunction · 0.68
test_vlqFunction · 0.68