1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
use std::collections::hash_map::DefaultHasher; use std::collections::HashMap; use std::fs::File; use std::hash::{Hash, Hasher}; use std::io::BufReader; use crate::WireValue; pub mod blif; mod smtlib; pub trait Parse<T: WireValue> { type Item; fn new(reader: BufReader<File>) -> Self; fn next(&mut self) -> Option<Self::Item>; } pub struct WireHasher { hashes: HashMap<usize, usize>, } impl WireHasher { fn new() -> Self { WireHasher { hashes: HashMap::new(), } } pub fn get_wire_id(&mut self, name: &str) -> usize { let mut s = DefaultHasher::new(); name.hash(&mut s); let len = self.hashes.len(); *self.hashes.entry(s.finish() as usize).or_insert(len) } } impl Default for WireHasher { fn default() -> Self { WireHasher::new() } }