Parasitics::deleteParasiticNetworks

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2021-08-05 14:05:52 -07:00
parent 866a434021
commit be0d78b145
5 changed files with 32 additions and 1 deletions

View File

@ -97,6 +97,7 @@ public:
virtual bool includesPinCaps(Parasitic *parasitic) const;
virtual void deleteParasiticNetwork(const Net *net,
const ParasiticAnalysisPt *ap);
virtual void deleteParasiticNetworks(const Net *net);
virtual ParasiticNode *ensureParasiticNode(Parasitic *parasitic,
const Net *net,
int id);

View File

@ -155,6 +155,7 @@ public:
// Delete parasitic network if it exists.
virtual void deleteParasiticNetwork(const Net *net,
const ParasiticAnalysisPt *ap) = 0;
virtual void deleteParasiticNetworks(const Net *net) = 0;
// True if the parasitic network caps include pin capacitances.
virtual bool includesPinCaps(Parasitic *parasitic) const = 0;
// Parasitic network component builders.

View File

@ -1340,7 +1340,30 @@ ConcreteParasitics::deleteParasiticNetwork(const Net *net,
if (parasitics) {
int ap_index = ap->index();
delete parasitics[ap_index];
parasitics[ap_index] = nullptr;
int ap_count = corners_->parasiticAnalysisPtCount();
if (ap_count == 1) {
// If there is only one parasitic we can remove the array and map entry.
delete [] parasitics;
parasitic_network_map_.erase(net);
}
else
parasitics[ap_index] = nullptr;
}
}
}
void
ConcreteParasitics::deleteParasiticNetworks(const Net *net)
{
if (!parasitic_network_map_.empty()) {
UniqueLock lock(lock_);
ConcreteParasiticNetwork **parasitics = parasitic_network_map_.findKey(net);
if (parasitics) {
int ap_count = corners_->parasiticAnalysisPtCount();
for (int i = 0; i < ap_count; i++)
delete parasitics[i];
delete [] parasitics;
parasitic_network_map_.erase(net);
}
}
}

View File

@ -106,6 +106,7 @@ public:
const ParasiticAnalysisPt *ap);
virtual void deleteParasiticNetwork(const Net *net,
const ParasiticAnalysisPt *ap);
virtual void deleteParasiticNetworks(const Net *net);
virtual bool includesPinCaps(Parasitic *parasitic) const;
virtual ParasiticNode *ensureParasiticNode(Parasitic *parasitic,
const Net *net,

View File

@ -245,6 +245,11 @@ NullParasitics::deleteParasiticNetwork(const Net *,
{
}
void
NullParasitics::deleteParasiticNetworks(const Net *)
{
}
ParasiticNode *
NullParasitics::ensureParasiticNode(Parasitic *,
const Net *,