use super::core;
pub trait BitwiseReverse {
fn swap_bits(self) -> Self;
}
macro_rules! doit_bitwise { ($($ty:ty),*) => ($(
impl BitwiseReverse for $ty {
#[inline]
fn swap_bits(self) -> $ty {
let mut v = self;
let mut r = self;
let mut s = 8 * core::mem::size_of::<$ty>() - 1;
v >>= 1;
while v != 0 { r <<= 1; r |= v & 1; v >>= 1; s -= 1; }
r << s
}
})*)
}
doit_bitwise!(u8, u16, u32, u64, usize);
doit_signed!(BitwiseReverse);
test_suite!();