use core::ops::Not;
#[cfg(feature = "bitint")]
use crate::bitint::u1;
#[repr(transparent)]
#[derive(Clone, Copy, Debug)]
pub struct NBool(bool);
impl NBool {
#[cfg(feature = "bitint")]
pub const fn new_with_raw_value(v: u1) -> Self {
Self(v.value() != 0)
}
#[cfg(feature = "bitint")]
pub const fn raw_value(self) -> u1 {
unsafe { u1::new_unchecked(self.0 as u8) }
}
pub const fn value(self) -> bool {
!self.0
}
pub const fn new(v: bool) -> Self {
Self(!v)
}
}
impl Not for NBool {
type Output = bool;
fn not(self) -> Self::Output {
!self.value()
}
}
impl From<bool> for NBool {
fn from(value: bool) -> Self {
Self(!value)
}
}
impl From<NBool> for bool {
fn from(value: NBool) -> Self {
!value.0
}
}