use crate::integer::Integer;
use crate::natural::Natural;
use core::ops::Not;
use malachite_base::num::basic::traits::One;
use malachite_base::num::logic::traits::NotAssign;
impl Not for Integer {
type Output = Self;
#[inline]
fn not(mut self) -> Self {
self.not_assign();
self
}
}
impl Not for &Integer {
type Output = Integer;
fn not(self) -> Integer {
match self {
Integer { sign: true, abs } => Integer {
sign: false,
abs: abs.add_limb_ref(1),
},
Integer { sign: false, abs } => Integer {
sign: true,
abs: abs.sub_limb_ref(1),
},
}
}
}
impl NotAssign for Integer {
fn not_assign(&mut self) {
if self.sign {
self.sign = false;
self.abs += Natural::ONE;
} else {
self.sign = true;
self.abs -= Natural::ONE;
}
}
}