pub trait UnsignedAbs {
type Unsigned;
fn unsigned_abs(self) -> Self::Unsigned;
}
macro_rules! impl_unsigned_abs {
($($signed:ty => $unsigned:ty),* $(,)?) => {
$(
impl UnsignedAbs for $signed {
type Unsigned = $unsigned;
#[inline]
fn unsigned_abs(self) -> Self::Unsigned {
self.unsigned_abs()
}
}
)*
};
}
impl_unsigned_abs!(
i8 => u8,
i16 => u16,
i32 => u32,
i64 => u64,
i128 => u128,
isize => usize,
);