From 1f5ec9d3e940c791f045e9a17eed9289c57b8adb Mon Sep 17 00:00:00 2001 From: Matthias Koefferlein Date: Thu, 12 Dec 2019 00:20:15 +0100 Subject: [PATCH] Bugfix: don't mess with the hier cluster structure while determining the interactions ... --- src/db/db/dbHierNetworkProcessor.cc | 8 ++++---- src/db/db/dbHierNetworkProcessor.h | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/db/db/dbHierNetworkProcessor.cc b/src/db/db/dbHierNetworkProcessor.cc index 89315b124..fd299da08 100644 --- a/src/db/db/dbHierNetworkProcessor.cc +++ b/src/db/db/dbHierNetworkProcessor.cc @@ -1210,10 +1210,6 @@ public: db::ICplxTrans t; consider_cluster_instance_pair (*c1, *i2, t, ic); - for (typename std::list::const_iterator i = ic.begin (); i != ic.end (); ++i) { - ensure_cluster_inst_propagated (i->other_ci, mp_cell->cell_index ()); - } - m_ci_interactions.splice (m_ci_interactions.end (), ic, ic.begin (), ic.end ()); } @@ -1225,6 +1221,10 @@ public: */ void finish_cluster_to_instance_interactions () { + for (typename std::list::const_iterator ii = m_ci_interactions.begin (); ii != m_ci_interactions.end (); ++ii) { + ensure_cluster_inst_propagated (ii->other_ci, mp_cell->cell_index ()); + } + for (typename std::list::const_iterator ii = m_ci_interactions.begin (); ii != m_ci_interactions.end (); ++ii) { id_type other = mp_cell_clusters->find_cluster_with_connection (ii->other_ci); diff --git a/src/db/db/dbHierNetworkProcessor.h b/src/db/db/dbHierNetworkProcessor.h index f4237c512..322563013 100644 --- a/src/db/db/dbHierNetworkProcessor.h +++ b/src/db/db/dbHierNetworkProcessor.h @@ -201,7 +201,7 @@ private: * of a given connectivity. The shapes will still be organised in layers. */ template -class DB_PUBLIC local_cluster +class DB_PUBLIC_TEMPLATE local_cluster { public: typedef size_t id_type; @@ -395,7 +395,7 @@ private: * @brief A box converter for the local_cluster class */ template -struct DB_PUBLIC local_cluster_box_convert +struct DB_PUBLIC_TEMPLATE local_cluster_box_convert { typedef typename local_cluster::box_type box_type; typedef typename db::simple_bbox_tag complexity; @@ -414,7 +414,7 @@ struct DB_PUBLIC local_cluster_box_convert * the clusters from a cell's shapes. */ template -class DB_PUBLIC local_clusters +class DB_PUBLIC_TEMPLATE local_clusters { public: typedef typename local_cluster::id_type id_type; @@ -786,7 +786,7 @@ template class connected_clusters; * @brief An iterator delivering all clusters of a connected_clusters set */ template -class DB_PUBLIC connected_clusters_iterator +class DB_PUBLIC_TEMPLATE connected_clusters_iterator { public: typedef typename local_cluster::id_type value_type; @@ -834,7 +834,7 @@ private: * "half connected" clusters. */ template -class DB_PUBLIC connected_clusters +class DB_PUBLIC_TEMPLATE connected_clusters : public local_clusters { public: @@ -947,7 +947,7 @@ template class cell_clusters_box_converter; * Hierarchical clusters */ template -class DB_PUBLIC hier_clusters +class DB_PUBLIC_TEMPLATE hier_clusters : public tl::Object { public: @@ -1029,7 +1029,7 @@ private: * This iterator applies to one layer. */ template -class DB_PUBLIC recursive_cluster_shape_iterator +class DB_PUBLIC_TEMPLATE recursive_cluster_shape_iterator { public: typedef T value_type; @@ -1132,7 +1132,7 @@ private: * This iterator will deliver the child clusters of a specific cluster. */ template -class DB_PUBLIC recursive_cluster_iterator +class DB_PUBLIC_TEMPLATE recursive_cluster_iterator { public: /**