int tellstdfunc::stdREPORTLAY::execute() { bool recursive = getBoolValue(); std::string cellname = getStringValue(); WordList ull; DATC->lockDB(); bool success = DATC->TEDLIB()->collect_usedlays(cellname, recursive, ull); DATC->unlockDB(); telldata::ttlist* tllull = DEBUG_NEW telldata::ttlist(telldata::tn_int); if (success) { ull.sort();ull.unique(); std::ostringstream ost; ost << "used layers: {"; for(WordList::const_iterator CL = ull.begin() ; CL != ull.end();CL++ ) ost << " " << *CL << " "; ost << "}"; tell_log(console::MT_INFO, ost.str()); for(WordList::const_iterator CL = ull.begin() ; CL != ull.end();CL++ ) tllull->add(DEBUG_NEW telldata::ttint(*CL)); ull.clear(); } else { std::string news = "cell \""; news += cellname; news += "\" doesn't exists"; tell_log(console::MT_ERROR,news); } OPstack.push(tllull); return EXEC_NEXT; }
void laydata::tdtlibrary::collect_usedlays(WordList& laylist) const { for (cellList::const_iterator CC = _cells.begin(); CC != _cells.end(); CC++) { CC->second->collect_usedlays(NULL, false,laylist); } laylist.sort(); laylist.unique(); if ( (0 < laylist.size()) && (0 == laylist.front()) ) laylist.pop_front(); }