use super::{varint_encode_u128, varint_encode_u16, varint_encode_u32, varint_encode_u64};
use crate::{config::Endianness, encode::Writer, error::Result};
#[inline(always)]
pub fn varint_encode_i16<W: Writer>(writer: &mut W, endian: Endianness, val: i16) -> Result<()> {
let zigzag = ((val as u16).wrapping_shl(1)) ^ ((val >> 15) as u16);
varint_encode_u16(writer, endian, zigzag)
}
#[inline(always)]
pub fn varint_encode_i32<W: Writer>(writer: &mut W, endian: Endianness, val: i32) -> Result<()> {
let zigzag = ((val as u32).wrapping_shl(1)) ^ ((val >> 31) as u32);
varint_encode_u32(writer, endian, zigzag)
}
#[inline(always)]
pub fn varint_encode_i64<W: Writer>(writer: &mut W, endian: Endianness, val: i64) -> Result<()> {
let zigzag = ((val as u64).wrapping_shl(1)) ^ ((val >> 63) as u64);
varint_encode_u64(writer, endian, zigzag)
}
#[inline(always)]
pub fn varint_encode_i128<W: Writer>(writer: &mut W, endian: Endianness, val: i128) -> Result<()> {
let zigzag = ((val as u128).wrapping_shl(1)) ^ ((val >> 127) as u128);
varint_encode_u128(writer, endian, zigzag)
}
#[inline(always)]
pub fn varint_encode_isize<W: Writer>(
writer: &mut W,
endian: Endianness,
val: isize,
) -> Result<()> {
varint_encode_i64(writer, endian, val as i64)
}