@@ -194,11 +194,11 @@ class DbInstancePinIterator : public InstancePinIterator
194194 dbSet<dbITerm>::iterator iitr_end_;
195195 dbSet<dbBTerm>::iterator bitr_;
196196 dbSet<dbBTerm>::iterator bitr_end_;
197- Pin *pin_ ;
197+ Pin *next_ ;
198198};
199199
200200DbInstancePinIterator::DbInstancePinIterator (const Instance *inst,
201- const dbNetwork *network) :
201+ const dbNetwork *network) :
202202 network_ (network)
203203{
204204 top_ = (inst == network->topInstance ());
@@ -222,36 +222,30 @@ DbInstancePinIterator::hasNext()
222222 return false ;
223223 else {
224224 dbBTerm *bterm = *bitr_;
225+ next_ = network_->dbToSta (bterm);
225226 bitr_++;
226- pin_ = network_->dbToSta (bterm);
227227 return true ;
228228 }
229229 }
230- if (iitr_ == iitr_end_)
231- return false ;
232230 else {
233- dbITerm *iterm = *iitr_;
234- while (iterm->getSigType () == dbSigType::POWER
235- || iterm->getSigType () == dbSigType::GROUND) {
236- iitr_++;
237- if (iitr_ == iitr_end_)
238- return false ;
239- iterm = *iitr_;
240- }
241- if (iitr_ == iitr_end_)
242- return false ;
243- else {
244- pin_ = network_->dbToSta (iterm);
231+ while (iitr_ != iitr_end_) {
232+ dbITerm *iterm = *iitr_;
233+ if (!(iterm->getSigType () == dbSigType::POWER
234+ || iterm->getSigType () == dbSigType::GROUND)) {
235+ next_ = network_->dbToSta (*iitr_);
236+ ++iitr_;
237+ return true ;
238+ }
245239 iitr_++;
246- return true ;
247240 }
241+ return false ;
248242 }
249243}
250244
251245Pin *
252246DbInstancePinIterator::next ()
253247{
254- return pin_ ;
248+ return next_ ;
255249}
256250
257251// //////////////////////////////////////////////////////////////
@@ -266,46 +260,41 @@ class DbNetPinIterator : public NetPinIterator
266260
267261private:
268262 const dbNetwork *network_;
269- dbSet<dbITerm>::iterator _iitr ;
270- dbSet<dbITerm>::iterator _iitr_end ;
271- void *_term ;
263+ dbSet<dbITerm>::iterator iitr_ ;
264+ dbSet<dbITerm>::iterator iitr_end_ ;
265+ Pin *next_ ;
272266};
273267
274268DbNetPinIterator::DbNetPinIterator (const Net *net,
275269 const dbNetwork *network) :
276270 network_ (network)
277271{
278272 dbNet *dnet = reinterpret_cast <dbNet*>(const_cast <Net*>(net));
279- _iitr = dnet->getITerms ().begin ();
280- _iitr_end = dnet->getITerms ().end ();
281- _term = NULL ;
273+ iitr_ = dnet->getITerms ().begin ();
274+ iitr_end_ = dnet->getITerms ().end ();
275+ next_ = nullptr ;
282276}
283277
284278bool
285279DbNetPinIterator::hasNext ()
286280{
287- if (_iitr != _iitr_end ) {
288- dbITerm *iterm = *_iitr ;
289- while (iterm->getSigType () == dbSigType::POWER
290- || iterm->getSigType () == dbSigType::GROUND) {
291- ++_iitr ;
292- if (_iitr == _iitr_end) break ;
293- iterm = *_iitr ;
281+ while (iitr_ != iitr_end_ ) {
282+ dbITerm *iterm = *iitr_ ;
283+ if (! (iterm->getSigType () == dbSigType::POWER
284+ || iterm->getSigType () == dbSigType::GROUND) ) {
285+ next_ = reinterpret_cast <Pin*>(*iitr_) ;
286+ ++iitr_ ;
287+ return true ;
294288 }
289+ iitr_++;
295290 }
296- if (_iitr != _iitr_end) {
297- _term = (void *)(*_iitr);
298- ++_iitr;
299- return true ;
300- }
301- else
302- return false ;
291+ return false ;
303292}
304293
305294Pin *
306295DbNetPinIterator::next ()
307296{
308- return (Pin*)_term ;
297+ return next_ ;
309298}
310299
311300// //////////////////////////////////////////////////////////////
@@ -314,7 +303,7 @@ class DbNetTermIterator : public NetTermIterator
314303{
315304public:
316305 DbNetTermIterator (const Net *net,
317- const dbNetwork *network);
306+ const dbNetwork *network);
318307 bool hasNext ();
319308 Term *next ();
320309
@@ -325,7 +314,7 @@ class DbNetTermIterator : public NetTermIterator
325314};
326315
327316DbNetTermIterator::DbNetTermIterator (const Net *net,
328- const dbNetwork *network) :
317+ const dbNetwork *network) :
329318 network_ (network)
330319{
331320 dbNet *dnet = network_->staToDb (net);
@@ -467,7 +456,7 @@ dbNetwork::findPin(const Instance *instance,
467456 else {
468457 dbInst *dinst = staToDb (instance);
469458 dbITerm *iterm = dinst->findITerm (port_name);
470- return reinterpret_cast <Pin*> (iterm);
459+ return dbToSta (iterm);
471460 }
472461}
473462
@@ -481,7 +470,7 @@ dbNetwork::findPin(const Instance *instance,
481470
482471Net *
483472dbNetwork::findNet (const Instance *instance,
484- const char *net_name) const
473+ const char *net_name) const
485474{
486475 if (instance == top_instance_) {
487476 dbNet *dnet = block_->findNet (net_name);
@@ -684,8 +673,8 @@ dbNetwork::termIterator(const Net *net) const
684673// override ConcreteNetwork::visitConnectedPins
685674void
686675dbNetwork::visitConnectedPins (const Net *net,
687- PinVisitor &visitor,
688- ConstNetSet &visited_nets) const
676+ PinVisitor &visitor,
677+ ConstNetSet &visited_nets) const
689678{
690679 Network::visitConnectedPins (net, visitor, visited_nets);
691680}
@@ -737,7 +726,8 @@ DbConstantPinIterator::hasNext()
737726}
738727
739728void
740- DbConstantPinIterator::next (Pin *&pin, LogicValue &value)
729+ DbConstantPinIterator::next (Pin *&pin,
730+ LogicValue &value)
741731{
742732 value = LogicValue::zero;
743733 pin = nullptr ;
@@ -759,8 +749,8 @@ dbNetwork::isLinked() const
759749
760750bool
761751dbNetwork::linkNetwork (const char *,
762- bool ,
763- Report *)
752+ bool ,
753+ Report *)
764754{
765755 // Not called.
766756 return true ;
@@ -1088,18 +1078,24 @@ dbNetwork::staToDb(const Pin *pin,
10881078 dbITerm *&iterm,
10891079 dbBTerm *&bterm) const
10901080{
1091- dbObject *obj = reinterpret_cast <dbObject*>(const_cast <Pin*>(pin));
1092- dbObjectType type = obj->getObjectType ();
1093- if (type == dbITermObj) {
1094- iterm = static_cast <dbITerm*>(obj);
1095- bterm = nullptr ;
1081+ if (pin) {
1082+ dbObject *obj = reinterpret_cast <dbObject*>(const_cast <Pin*>(pin));
1083+ dbObjectType type = obj->getObjectType ();
1084+ if (type == dbITermObj) {
1085+ iterm = static_cast <dbITerm*>(obj);
1086+ bterm = nullptr ;
1087+ }
1088+ else if (type == dbBTermObj) {
1089+ iterm = nullptr ;
1090+ bterm = static_cast <dbBTerm*>(obj);
1091+ }
1092+ else
1093+ internalError (" pin is not ITerm or BTerm" );
10961094 }
1097- else if (type == dbBTermObj) {
1095+ else {
10981096 iterm = nullptr ;
1099- bterm = static_cast <dbBTerm*>(obj) ;
1097+ bterm = nullptr ;
11001098 }
1101- else
1102- internalError (" pin is not ITerm or BTerm" );
11031099}
11041100
11051101dbBTerm *
0 commit comments