1pub trait BitMan {
2 fn get_bit(self, bit: u32) -> bool;
3 fn with_bit(self, bit: u32, value: bool) -> Self;
4}
5macro_rules! impl_bitman {
6 (for $($tp:ident),+) => {
7 $(impl BitMan for $tp {
8 fn get_bit(self, bit: u32) -> bool {
9 if bit >= $tp::BITS { false } else { self >> bit & 1 != 0 }
10 }
11 fn with_bit(self, bit: u32, value: bool) -> Self {
12 if bit < $tp::BITS {
13 if value { self | 1 << bit } else { self & !(1 << bit) }
14 } else { self }
15 }
16 })+
17 };
18}
19impl_bitman!(for u8, u16, u32, u64, u128);