From 5b7f4588a0f5b19cbed3b7fcd015c9e22fed1d48 Mon Sep 17 00:00:00 2001 From: Alain Emilia Anna Zscheile Date: Mon, 2 Dec 2024 23:17:23 +0100 Subject: [PATCH] feat(specctra/mesadata): deduplicate net names --- src/specctra/mesadata.rs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/specctra/mesadata.rs b/src/specctra/mesadata.rs index da0e6b7..7670958 100644 --- a/src/specctra/mesadata.rs +++ b/src/specctra/mesadata.rs @@ -81,15 +81,20 @@ impl SpecctraMesadata { ); // assign IDs to all nets named in pcb.network - let net_netname = BiHashMap::from_iter( - pcb.network + let net_netname = { + let mut tmp: Vec<_> = pcb + .network .classes .iter() .flat_map(|class| &class.nets) .chain(pcb.network.nets.iter().map(|net| &net.name)) - .enumerate() - .map(|(net, netname)| (net, netname.clone())), - ); + .collect(); + // deduplicate net names + tmp.sort_unstable(); + tmp.dedup(); + + BiHashMap::from_iter(tmp.into_iter().cloned().enumerate()) + }; let mut net_netclass = HashMap::new(); let class_rules = HashMap::from_iter( @@ -98,6 +103,8 @@ impl SpecctraMesadata { .iter() .inspect(|class| { 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(); net_netclass.insert(*net, class.name.clone()); }