Skip to content

Commit a934a58

Browse files
committed
Minor refactoring.
Signed-off-by: Jaehyun Kim <[email protected]>
1 parent 71e4244 commit a934a58

File tree

1 file changed

+9
-14
lines changed

1 file changed

+9
-14
lines changed

src/odb/src/db/dbNet.cpp

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2234,28 +2234,23 @@ void dbNet::mergeNet(dbNet* in_net)
22342234
_dbNet* net = (_dbNet*) this;
22352235
_dbBlock* block = (_dbBlock*) net->getOwner();
22362236

2237-
// in_net->getITerms() returns a terminal iterator, and iterm->connect() can
2238-
// invalidate the iterator by disconnecting a dbITerm.
2239-
// So storing all dbITerms is needed for safe iterms iteration.
2240-
std::vector<dbITerm*> iterms;
2241-
for (dbITerm* iterm : in_net->getITerms()) {
2242-
iterms.push_back(iterm);
2243-
}
2244-
22452237
for (auto callback : block->_callbacks) {
22462238
callback->inDbNetPreMerge(this, in_net);
22472239
}
22482240

2241+
// in_net->getITerms() returns a terminal iterator, and iterm->connect() can
2242+
// invalidate the iterator by disconnecting a dbITerm.
2243+
// Calling iterm->connect() during iteration with the iterator is not safe.
2244+
// Thus create another vector for safe iterms iteration.
2245+
auto iterms_set = in_net->getITerms();
2246+
std::vector<dbITerm*> iterms(iterms_set.begin(), iterms_set.end());
22492247
for (dbITerm* iterm : iterms) {
22502248
iterm->connect(this);
22512249
}
22522250

2253-
// Store dbBTerms for safe iteration.
2254-
std::vector<dbBTerm*> bterms;
2255-
for (dbBTerm* bterm : in_net->getBTerms()) {
2256-
bterms.push_back(bterm);
2257-
}
2258-
2251+
// Create vector for safe iteration.
2252+
auto bterms_set = in_net->getBTerms();
2253+
std::vector<dbBTerm*> bterms(bterms_set.begin(), bterms_set.end());
22592254
for (dbBTerm* bterm : bterms) {
22602255
bterm->connect(this);
22612256
}

0 commit comments

Comments
 (0)