use extprim::i128::i128;
use extprim::u128::u128;
#[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)).low64() 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.low64() 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
}