use std::collections::HashSet;
use crate::{Gate, Network, Signal};
pub fn sig_to_string(s: &Signal) -> String {
if *s == Signal::one() {
return "vdd".to_string();
}
if *s == Signal::zero() {
return "gnd".to_string();
}
s.without_inversion().to_string() + (if s.is_inverted() { "_n" } else { "" })
}
pub fn get_inverted_signals(aig: &Network) -> Vec<Signal> {
let mut signals_with_inv = HashSet::new();
for o in 0..aig.nb_outputs() {
let s = aig.output(o);
if s.is_inverted() && !s.is_constant() {
signals_with_inv.insert(!s);
}
}
for i in 0..aig.nb_nodes() {
if matches!(aig.gate(i), Gate::Buf(_)) {
continue;
}
for s in aig.gate(i).dependencies() {
if s.is_inverted() && !s.is_constant() {
signals_with_inv.insert(!s);
}
}
}
let mut signals_with_inv = signals_with_inv.into_iter().collect::<Vec<_>>();
signals_with_inv.sort();
signals_with_inv
}