use crate::{bitvector::BitvectorBound, forward::Bitwise};
use super::ThreeValuedBitvector;
impl<B: BitvectorBound> Bitwise for ThreeValuedBitvector<B> {
fn bit_not(self) -> Self {
let zeros = self.ones;
let ones = self.zeros;
Self::from_zeros_ones(zeros, ones)
}
fn bit_and(self, rhs: Self) -> Self {
let zeros = self.zeros.bit_or(rhs.zeros);
let ones = self.ones.bit_and(rhs.ones);
Self::from_zeros_ones(zeros, ones)
}
fn bit_or(self, rhs: Self) -> Self {
let zeros = self.zeros.bit_and(rhs.zeros);
let ones = self.ones.bit_or(rhs.ones);
Self::from_zeros_ones(zeros, ones)
}
fn bit_xor(self, rhs: Self) -> Self {
let zeros = (self.zeros.bit_and(rhs.zeros)).bit_or(self.ones.bit_and(rhs.ones));
let ones = (self.zeros.bit_and(rhs.ones)).bit_or(self.ones.bit_and(rhs.zeros));
Self::from_zeros_ones(zeros, ones)
}
}