#[inline]
pub fn write_unsigned_leb128_to<W>(mut value: u128, mut write: W) -> usize
where
W: FnMut(usize, u8),
{
let mut position = 0;
loop {
let mut byte = (value & u128::from(0x7Fu64)) as u8;
value >>= 7;
if value != u128::from(0u64) {
byte |= 0x80;
}
write(position, byte);
position += 1;
if value == u128::from(0u64) {
break;
}
}
position
}
#[inline]
pub fn write_signed_leb128_to<W>(mut value: i128, mut write: W) -> usize
where
W: FnMut(usize, u8),
{
let mut position = 0;
loop {
let mut byte = (value as u8) & 0x7f;
value >>= 7;
let more = !(((value == i128::from(0)) && ((byte & 0x40) == 0))
|| ((value == i128::from(-1)) && ((byte & 0x40) != 0)));
if more {
byte |= 0x80; }
write(position, byte);
position += 1;
if !more {
break;
}
}
position
}