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> {
|
||||
let v = self.read()?;
|
||||
if v < 128 {
|
||||
Ok(usize::from(v))
|
||||
} else {
|
||||
Ok(self.varint()? * 128 + usize::from(v - 128))
|
||||
let mut shift = 0;
|
||||
let mut acc: usize = 0;
|
||||
loop {
|
||||
let v = self.read()?;
|
||||
acc = acc | (((v & 0x7f) as usize) << shift);
|
||||
shift = shift + 7;
|
||||
if v & 0x80 == 0 { return Ok(acc) }
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue