eva_sdk/
bitman.rs

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);