#[derive(Copy, Clone, Debug, Default, PartialEq, Eq)]
#[repr(transparent)]
pub struct Flags(pub u8);
impl Flags {
pub const C: u8 = 1 << 0;
pub const N: u8 = 1 << 1;
pub const P: u8 = 1 << 2;
pub const V: u8 = 1 << 2;
pub const X: u8 = 1 << 3;
pub const H: u8 = 1 << 4;
pub const Y: u8 = 1 << 5;
pub const Z: u8 = 1 << 6;
pub const S: u8 = 1 << 7;
#[inline(always)]
pub fn empty() -> Self {
Self(0)
}
#[inline(always)]
pub fn contains(&self, flag: u8) -> bool {
(self.0 & flag) == flag
}
#[inline(always)]
pub fn insert(&mut self, flag: u8) {
self.0 |= flag;
}
#[inline(always)]
pub fn remove(&mut self, flag: u8) {
self.0 &= !flag;
}
#[inline(always)]
pub fn set(&mut self, flag: u8, value: bool) {
if value {
self.insert(flag);
} else {
self.remove(flag);
}
}
#[inline(always)]
pub fn bits(&self) -> u8 {
self.0
}
#[inline(always)]
pub fn from_bits_retain(bits: u8) -> Self {
Self(bits)
}
}
impl core::ops::BitOr<u8> for Flags {
type Output = Self;
#[inline(always)]
fn bitor(self, rhs: u8) -> Self::Output {
Self(self.0 | rhs)
}
}