use std::io::Read;/// Decode variable int numbers from a `Read` implementation.////// Note: currently overflow checks are only done in debug mode.#[inline]pub fn leb64_from_read(mut r: impl Read) -> Result<(u64, usize), std::io::Error> { let mut b = [0u8; 1]; let mut i = 0; r.read_exact(&mut b)?; i += 1; let mut value = b[0] as u64 & 0x7f; while b[0] & 0x80 != 0 { r.read_exact(&mut b)?; i += 1; debug_assert!(i <= 10, "Would overflow value at 11th iteration"); value += 1; value = (value << 7) + (b[0] as u64 & 0x7f) } Ok((value, i))}/// Decode variable int numbers.#[inline]pub fn leb64(d: &[u8]) -> (u64, usize) { let mut i = 0; let mut c = d[i]; i += 1; let mut value = c as u64 & 0x7f; while c & 0x80 != 0 { c = d[i]; i += 1; debug_assert!(i <= 10, "Would overflow value at 11th iteration"); value += 1; value = (value << 7) + (c as u64 & 0x7f) } (value, i)}
use std::io::Read;
/// Decode variable int numbers from a `Read` implementation.
///
/// Note: currently overflow checks are only done in debug mode.
#[inline]
pub fn leb64_from_read(mut r: impl Read) -> Result<(u64, usize), std::io::Error> {
let mut b = [0u8; 1];
let mut i = 0;
r.read_exact(&mut b)?;
i += 1;
let mut value = b[0] as u64 & 0x7f;
while b[0] & 0x80 != 0 {
r.read_exact(&mut b)?;
i += 1;
debug_assert!(i <= 10, "Would overflow value at 11th iteration");
value += 1;
value = (value << 7) + (b[0] as u64 & 0x7f)
}
Ok((value, i))
}
/// Decode variable int numbers.
#[inline]
pub fn leb64(d: &[u8]) -> (u64, usize) {
let mut i = 0;
let mut c = d[i];
i += 1;
let mut value = c as u64 & 0x7f;
while c & 0x80 != 0 {
c = d[i];
i += 1;
debug_assert!(i <= 10, "Would overflow value at 11th iteration");
value += 1;
value = (value << 7) + (c as u64 & 0x7f)
}
(value, i)
}