mirror of https://github.com/KLayout/klayout.git
Some performance improvement of net extractor.
This commit is contained in:
parent
d0e6efa484
commit
fb2611632d
|
|
@ -1023,15 +1023,21 @@ connected_clusters<T>::join_cluster_with (typename local_cluster<T>::id_type id,
|
||||||
|
|
||||||
// handle the connections by translating
|
// handle the connections by translating
|
||||||
|
|
||||||
const connections_type &to_join = connections_for_cluster (with_id);
|
typename std::map<typename local_cluster<T>::id_type, connections_type>::iterator tc = m_connections.find (with_id);
|
||||||
connections_type &target = m_connections [id];
|
if (tc != m_connections.end ()) {
|
||||||
target.insert (target.end (), to_join.begin (), to_join.end ());
|
|
||||||
|
connections_type &to_join = tc->second;
|
||||||
|
|
||||||
for (connections_type::const_iterator c = to_join.begin (); c != to_join.end (); ++c) {
|
for (connections_type::const_iterator c = to_join.begin (); c != to_join.end (); ++c) {
|
||||||
m_rev_connections [*c] = id;
|
m_rev_connections [*c] = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_connections.erase (with_id);
|
connections_type &target = m_connections [id];
|
||||||
|
target.splice (target.end (), to_join, to_join.begin (), to_join.end ());
|
||||||
|
|
||||||
|
m_connections.erase (tc);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
|
|
@ -1773,11 +1779,8 @@ private:
|
||||||
const ClusterInstance &k2 = ic->second;
|
const ClusterInstance &k2 = ic->second;
|
||||||
|
|
||||||
// Note: "with_self" is false as we're going to create a connected cluster anyway
|
// Note: "with_self" is false as we're going to create a connected cluster anyway
|
||||||
mp_tree->propagate_cluster_inst (*mp_layout, *mp_cell, k1, mp_cell->cell_index (), false);
|
id_type x1 = mp_tree->propagate_cluster_inst (*mp_layout, *mp_cell, k1, mp_cell->cell_index (), false);
|
||||||
mp_tree->propagate_cluster_inst (*mp_layout, *mp_cell, k2, mp_cell->cell_index (), false);
|
id_type x2 = mp_tree->propagate_cluster_inst (*mp_layout, *mp_cell, k2, mp_cell->cell_index (), false);
|
||||||
|
|
||||||
id_type x1 = mp_cell_clusters->find_cluster_with_connection (k1);
|
|
||||||
id_type x2 = mp_cell_clusters->find_cluster_with_connection (k2);
|
|
||||||
|
|
||||||
if (x1 == 0) {
|
if (x1 == 0) {
|
||||||
|
|
||||||
|
|
@ -2228,9 +2231,8 @@ hier_clusters<T>::build_hier_connections (cell_clusters_box_converter<T> &cbc, c
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// ensures the cluster is propagated so we can connect it with another
|
// ensures the cluster is propagated so we can connect it with another
|
||||||
propagate_cluster_inst (layout, cell, *i, cell.cell_index (), false);
|
size_t other_id = propagate_cluster_inst (layout, cell, *i, cell.cell_index (), false);
|
||||||
|
|
||||||
size_t other_id = local.find_cluster_with_connection (*i);
|
|
||||||
if (other_id == gcid) {
|
if (other_id == gcid) {
|
||||||
// shouldn't happen, but duplicate instances may trigger this
|
// shouldn't happen, but duplicate instances may trigger this
|
||||||
} else if (other_id) {
|
} else if (other_id) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue