Better varint reader
This commit is contained in:
parent
6cfb474a6f
commit
046a2ad999
|
@ -380,11 +380,13 @@ impl<'de, S: BinarySource<'de>> BinaryReader<'de, S> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn varint(&mut self) -> IOResult<usize> {
|
fn varint(&mut self) -> IOResult<usize> {
|
||||||
let v = self.read()?;
|
let mut shift = 0;
|
||||||
if v < 128 {
|
let mut acc: usize = 0;
|
||||||
Ok(usize::from(v))
|
loop {
|
||||||
} else {
|
let v = self.read()?;
|
||||||
Ok(self.varint()? * 128 + usize::from(v - 128))
|
acc = acc | (((v & 0x7f) as usize) << shift);
|
||||||
|
shift = shift + 7;
|
||||||
|
if v & 0x80 == 0 { return Ok(acc) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue