feat(specctra/mesadata): deduplicate net names

This commit is contained in:
Alain Emilia Anna Zscheile 2024-12-02 23:17:23 +01:00 committed by mikolaj
parent 0b9d3c0a00
commit 5b7f4588a0
1 changed files with 12 additions and 5 deletions

View File

@ -81,15 +81,20 @@ impl SpecctraMesadata {
); );
// assign IDs to all nets named in pcb.network // assign IDs to all nets named in pcb.network
let net_netname = BiHashMap::from_iter( let net_netname = {
pcb.network let mut tmp: Vec<_> = pcb
.network
.classes .classes
.iter() .iter()
.flat_map(|class| &class.nets) .flat_map(|class| &class.nets)
.chain(pcb.network.nets.iter().map(|net| &net.name)) .chain(pcb.network.nets.iter().map(|net| &net.name))
.enumerate() .collect();
.map(|(net, netname)| (net, netname.clone())), // deduplicate net names
); tmp.sort_unstable();
tmp.dedup();
BiHashMap::from_iter(tmp.into_iter().cloned().enumerate())
};
let mut net_netclass = HashMap::new(); let mut net_netclass = HashMap::new();
let class_rules = HashMap::from_iter( let class_rules = HashMap::from_iter(
@ -98,6 +103,8 @@ impl SpecctraMesadata {
.iter() .iter()
.inspect(|class| { .inspect(|class| {
for netname in &class.nets { for netname in &class.nets {
// this can't panic because we did iterate over
// `pcb.network.classes[].nets` above
let net = net_netname.get_by_right(netname).unwrap(); let net = net_netname.get_by_right(netname).unwrap();
net_netclass.insert(*net, class.name.clone()); net_netclass.insert(*net, class.name.clone());
} }