@@ -194,7 +194,7 @@ 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,
@@ -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// //////////////////////////////////////////////////////////////
@@ -267,8 +261,8 @@ class DbNetPinIterator : public NetPinIterator
267261private:
268262 const dbNetwork *network_;
269263 dbSet<dbITerm>::iterator iitr_;
270- dbSet<dbITerm>::iterator iitr__end ;
271- dbITerm *term_ ;
264+ dbSet<dbITerm>::iterator iitr_end_ ;
265+ Pin *next_ ;
272266};
273267
274268DbNetPinIterator::DbNetPinIterator (const Net *net,
@@ -277,35 +271,30 @@ DbNetPinIterator::DbNetPinIterator(const Net *net,
277271{
278272 dbNet *dnet = reinterpret_cast <dbNet*>(const_cast <Net*>(net));
279273 iitr_ = dnet->getITerms ().begin ();
280- iitr__end = dnet->getITerms ().end ();
281- term_ = nullptr ;
274+ iitr_end_ = dnet->getITerms ().end ();
275+ next_ = nullptr ;
282276}
283277
284278bool
285279DbNetPinIterator::hasNext ()
286280{
287- if (iitr_ != iitr__end ) {
281+ while (iitr_ != iitr_end_ ) {
288282 dbITerm *iterm = *iitr_;
289- while (iterm->getSigType () == dbSigType::POWER
290- || iterm->getSigType () == dbSigType::GROUND) {
283+ if (!(iterm->getSigType () == dbSigType::POWER
284+ || iterm->getSigType () == dbSigType::GROUND)) {
285+ next_ = reinterpret_cast <Pin*>(*iitr_);
291286 ++iitr_;
292- if (iitr_ == iitr__end) break ;
293- iterm = *iitr_;
287+ return true ;
294288 }
289+ iitr_++;
295290 }
296- if (iitr_ != iitr__end) {
297- term_ = *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// //////////////////////////////////////////////////////////////
@@ -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
@@ -1089,18 +1078,24 @@ dbNetwork::staToDb(const Pin *pin,
10891078 dbITerm *&iterm,
10901079 dbBTerm *&bterm) const
10911080{
1092- dbObject *obj = reinterpret_cast <dbObject*>(const_cast <Pin*>(pin));
1093- dbObjectType type = obj->getObjectType ();
1094- if (type == dbITermObj) {
1095- iterm = static_cast <dbITerm*>(obj);
1096- 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" );
10971094 }
1098- else if (type == dbBTermObj) {
1095+ else {
10991096 iterm = nullptr ;
1100- bterm = static_cast <dbBTerm*>(obj) ;
1097+ bterm = nullptr ;
11011098 }
1102- else
1103- internalError (" pin is not ITerm or BTerm" );
11041099}
11051100
11061101dbBTerm *
0 commit comments