aig 0.4.6

Aig library in Rust
Documentation
use crate::{Aig, AigEdge};
use giputils::hash::GHashMap;
use std::mem::swap;

impl Aig {
    pub fn strash(&self) -> Self {
        let mut map = GHashMap::new();
        let mut strash_map = GHashMap::new();
        for node in self.nodes.iter() {
            if node.is_and() {
                let mut fanin0 = node.fanin0();
                if let Some(eq) = strash_map.get(&fanin0.node_id()) {
                    fanin0 = AigEdge::new(*eq, fanin0.complement);
                }
                let mut fanin1 = node.fanin1();
                if let Some(eq) = strash_map.get(&fanin1.node_id()) {
                    fanin1 = AigEdge::new(*eq, fanin1.complement);
                }
                if fanin0.node_id() > fanin1.node_id() {
                    swap(&mut fanin0, &mut fanin1);
                }
                match map.get(&(fanin0, fanin1)) {
                    Some(eq) => {
                        strash_map.insert(node.node_id(), *eq);
                    }
                    None => {
                        map.insert((fanin0, fanin1), node.id);
                    }
                }
            }
        }
        println!("{:?}", strash_map.len());
        println!("{:?}", map.len());
        todo!()
    }
}