@@ -2635,7 +2635,9 @@ void dbNetwork::staToDb(const Instance* instance,
26352635
26362636dbNet* dbNetwork::staToDb (const Net* net) const
26372637{
2638- return reinterpret_cast <dbNet*>(const_cast <Net*>(net));
2638+ dbNet* db_net = reinterpret_cast <dbNet*>(const_cast <Net*>(net));
2639+ assert (!db_net || db_net->getObjectType () == odb::dbNetObj);
2640+ return db_net;
26392641}
26402642
26412643dbNet* dbNetwork::flatNet (const Net* net) const
@@ -2732,7 +2734,9 @@ void dbNetwork::staToDb(const Pin* pin,
27322734
27332735dbBTerm* dbNetwork::staToDb (const Term* term) const
27342736{
2735- return reinterpret_cast <dbBTerm*>(const_cast <Term*>(term));
2737+ dbBTerm* bterm = reinterpret_cast <dbBTerm*>(const_cast <Term*>(term));
2738+ assert (!bterm || bterm->getObjectType () == odb::dbBTermObj);
2739+ return bterm;
27362740}
27372741
27382742void dbNetwork::staToDb (const Term* term,
@@ -2780,20 +2784,26 @@ void dbNetwork::staToDb(const Cell* cell,
27802784dbMaster* dbNetwork::staToDb (const Cell* cell) const
27812785{
27822786 const ConcreteCell* ccell = reinterpret_cast <const ConcreteCell*>(cell);
2783- return reinterpret_cast <dbMaster*>(ccell->extCell ());
2787+ auto master = reinterpret_cast <dbMaster*>(ccell->extCell ());
2788+ assert (!master || master->getObjectType () == odb::dbMasterObj);
2789+ return master;
27842790}
27852791
27862792// called only on db cells.
27872793dbMaster* dbNetwork::staToDb (const LibertyCell* cell) const
27882794{
27892795 const ConcreteCell* ccell = cell;
2790- return reinterpret_cast <dbMaster*>(ccell->extCell ());
2796+ auto master = reinterpret_cast <dbMaster*>(ccell->extCell ());
2797+ assert (!master || master->getObjectType () == odb::dbMasterObj);
2798+ return master;
27912799}
27922800
27932801dbMTerm* dbNetwork::staToDb (const Port* port) const
27942802{
27952803 const ConcretePort* cport = reinterpret_cast <const ConcretePort*>(port);
2796- return reinterpret_cast <dbMTerm*>(cport->extPort ());
2804+ auto mterm = reinterpret_cast <dbMTerm*>(cport->extPort ());
2805+ assert (!mterm || mterm->getObjectType () == odb::dbMTermObj);
2806+ return mterm;
27972807}
27982808
27992809dbBTerm* dbNetwork::isTopPort (const Port* port) const
@@ -2841,7 +2851,9 @@ void dbNetwork::staToDb(const Port* port,
28412851
28422852dbMTerm* dbNetwork::staToDb (const LibertyPort* port) const
28432853{
2844- return reinterpret_cast <dbMTerm*>(port->extPort ());
2854+ auto mterm = reinterpret_cast <dbMTerm*>(port->extPort ());
2855+ assert (!mterm || mterm->getObjectType () == odb::dbMTermObj);
2856+ return mterm;
28452857}
28462858
28472859void dbNetwork::staToDb (PortDirection* dir,
@@ -4159,4 +4171,19 @@ void dbNetwork::AxiomCheck()
41594171 }
41604172}
41614173
4174+ Net* dbNetwork::getFlatNet (Net* net) const
4175+ {
4176+ if (!net) {
4177+ return nullptr ;
4178+ }
4179+ // Convert net to a flat net, if not already
4180+ dbNet* db_net;
4181+ dbModNet* db_mod_net;
4182+ staToDb (net, db_net, db_mod_net);
4183+ if (db_mod_net) {
4184+ db_net = findRelatedDbNet (db_mod_net);
4185+ }
4186+ return dbToSta (db_net);
4187+ }
4188+
41624189} // namespace sta
0 commit comments