diff --git a/src/gui/src/dbDescriptors.cpp b/src/gui/src/dbDescriptors.cpp index c6f1644c02..3ad4abf28d 100644 --- a/src/gui/src/dbDescriptors.cpp +++ b/src/gui/src/dbDescriptors.cpp @@ -45,6 +45,7 @@ #include "db_sta/dbNetwork.hh" #include "db_sta/dbSta.hh" #include "odb/db.h" +#include "odb/dbCompare.h" #include "odb/dbShape.h" #include "sta/Liberty.hh" #include "utl/Logger.h" @@ -244,9 +245,52 @@ static odb::dbTechLayer* getLayerSelection(odb::dbTech* tech, return current; } +////////////////////////////////////////////////// + +template +BaseDbDescriptor::BaseDbDescriptor(odb::dbDatabase* db) : db_(db) +{ +} + +template +Descriptor::Properties BaseDbDescriptor::getProperties(std::any object) const +{ + T* obj = getObject(object); + + Properties props = getDBProperties(obj); + + populateODBProperties(props, obj); + + return props; +} + +template +Selected BaseDbDescriptor::makeSelected(std::any object) const +{ + if (auto obj = std::any_cast(&object)) { + return Selected(*obj, this); + } + return Selected(); +} + +template +bool BaseDbDescriptor::lessThan(std::any l, std::any r) const +{ + T* l_obj = std::any_cast(l); + T* r_obj = std::any_cast(r); + return odb::compare_by_id(l_obj, r_obj); +} + +template +T* BaseDbDescriptor::getObject(const std::any& object) const +{ + return std::any_cast(object); +} + //////// -DbTechDescriptor::DbTechDescriptor(odb::dbDatabase* db) : db_(db) +DbTechDescriptor::DbTechDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -269,10 +313,10 @@ void DbTechDescriptor::highlight(std::any object, Painter& painter) const { } -Descriptor::Properties DbTechDescriptor::getProperties(std::any object) const +Descriptor::Properties DbTechDescriptor::getDBProperties( + odb::dbTech* tech) const { auto gui = Gui::get(); - auto tech = std::any_cast(object); Properties props({{"DbUnits per Micron", tech->getDbUnitsPerMicron()}, {"LEF Units", tech->getLefUnits()}, @@ -331,21 +375,6 @@ Descriptor::Properties DbTechDescriptor::getProperties(std::any object) const return props; } -Selected DbTechDescriptor::makeSelected(std::any object) const -{ - if (auto tech = std::any_cast(&object)) { - return Selected(*tech, this); - } - return Selected(); -} - -bool DbTechDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_tech = std::any_cast(l); - auto r_tech = std::any_cast(r); - return l_tech->getId() < r_tech->getId(); -} - bool DbTechDescriptor::getAllObjects(SelectionSet& objects) const { auto tech = db_->getTech(); @@ -358,7 +387,8 @@ bool DbTechDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbBlockDescriptor::DbBlockDescriptor(odb::dbDatabase* db) : db_(db) +DbBlockDescriptor::DbBlockDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -391,10 +421,9 @@ void DbBlockDescriptor::highlight(std::any object, Painter& painter) const } } -Descriptor::Properties DbBlockDescriptor::getProperties(std::any object) const +Descriptor::Properties DbBlockDescriptor::getDBProperties( + odb::dbBlock* block) const { - auto block = std::any_cast(object); - auto gui = Gui::get(); Properties props; @@ -468,29 +497,12 @@ Descriptor::Properties DbBlockDescriptor::getProperties(std::any object) const props.push_back({"Markers", markers}); } - populateODBProperties(props, block); - props.push_back({"Core Area", block->getCoreArea()}); props.push_back({"Die Area", block->getDieArea()}); return props; } -Selected DbBlockDescriptor::makeSelected(std::any object) const -{ - if (auto block = std::any_cast(&object)) { - return Selected(*block, this); - } - return Selected(); -} - -bool DbBlockDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_layer = std::any_cast(l); - auto r_layer = std::any_cast(r); - return l_layer->getId() < r_layer->getId(); -} - bool DbBlockDescriptor::getAllObjects(SelectionSet& objects) const { auto chip = db_->getChip(); @@ -505,7 +517,7 @@ bool DbBlockDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// DbInstDescriptor::DbInstDescriptor(odb::dbDatabase* db, sta::dbSta* sta) - : db_(db), sta_(sta) + : BaseDbDescriptor(db), sta_(sta) { } @@ -543,10 +555,10 @@ bool DbInstDescriptor::isInst(std::any object) const return true; } -Descriptor::Properties DbInstDescriptor::getProperties(std::any object) const +Descriptor::Properties DbInstDescriptor::getDBProperties( + odb::dbInst* inst) const { auto gui = Gui::get(); - auto inst = std::any_cast(object); auto placed = inst->getPlacementStatus(); auto* module = inst->getModule(); Properties props; @@ -597,7 +609,6 @@ Descriptor::Properties DbInstDescriptor::getProperties(std::any object) const props.push_back({"Timing/Power", gui->makeSelected(sta_inst)}); } - populateODBProperties(props, inst); return props; } @@ -731,21 +742,6 @@ bool DbInstDescriptor::setNewLocation(odb::dbInst* inst, return true; } -Selected DbInstDescriptor::makeSelected(std::any object) const -{ - if (auto inst = std::any_cast(&object)) { - return Selected(*inst, this); - } - return Selected(); -} - -bool DbInstDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_inst = std::any_cast(l); - auto r_inst = std::any_cast(r); - return l_inst->getId() < r_inst->getId(); -} - bool DbInstDescriptor::getAllObjects(SelectionSet& objects) const { auto* chip = db_->getChip(); @@ -766,7 +762,7 @@ bool DbInstDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// DbMasterDescriptor::DbMasterDescriptor(odb::dbDatabase* db, sta::dbSta* sta) - : db_(db), sta_(sta) + : BaseDbDescriptor(db), sta_(sta) { } @@ -803,9 +799,9 @@ void DbMasterDescriptor::highlight(std::any object, Painter& painter) const } } -Descriptor::Properties DbMasterDescriptor::getProperties(std::any object) const +Descriptor::Properties DbMasterDescriptor::getDBProperties( + odb::dbMaster* master) const { - auto master = std::any_cast(object); Properties props({{"Master type", master->getType().getString()}}); auto gui = Gui::get(); auto site = master->getSite(); @@ -848,8 +844,6 @@ Descriptor::Properties DbMasterDescriptor::getProperties(std::any object) const props.push_back({"Instances", instances}); props.push_back({"Origin", master->getOrigin()}); - populateODBProperties(props, master); - auto liberty = sta_->getDbNetwork()->findLibertyCell(master->getName().c_str()); if (liberty) { @@ -859,21 +853,6 @@ Descriptor::Properties DbMasterDescriptor::getProperties(std::any object) const return props; } -Selected DbMasterDescriptor::makeSelected(std::any object) const -{ - if (auto master = std::any_cast(&object)) { - return Selected(*master, this); - } - return Selected(); -} - -bool DbMasterDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_master = std::any_cast(l); - auto r_master = std::any_cast(r); - return l_master->getId() < r_master->getId(); -} - // get list of equivalent masters as EditorOptions void DbMasterDescriptor::getMasterEquivalent(sta::dbSta* sta, odb::dbMaster* master, @@ -945,7 +924,7 @@ DbNetDescriptor::DbNetDescriptor(odb::dbDatabase* db, const std::set& focus_nets, const std::set& guide_nets, const std::set& tracks_nets) - : db_(db), + : BaseDbDescriptor(db), sta_(sta), focus_nets_(focus_nets), guide_nets_(guide_nets), @@ -955,7 +934,7 @@ DbNetDescriptor::DbNetDescriptor(odb::dbDatabase* db, std::string DbNetDescriptor::getName(std::any object) const { - return getNet(object)->getName(); + return getObject(object)->getName(); } std::string DbNetDescriptor::getTypeName() const @@ -965,7 +944,7 @@ std::string DbNetDescriptor::getTypeName() const bool DbNetDescriptor::getBBox(std::any object, odb::Rect& bbox) const { - auto net = getNet(object); + auto net = getObject(object); auto wire = net->getWire(); bool has_box = false; bbox.mergeInit(); @@ -1289,7 +1268,7 @@ void DbNetDescriptor::findPath(NodeMap& graph, void DbNetDescriptor::highlight(std::any object, Painter& painter) const { odb::dbObject* sink_object = getSink(object); - auto net = getNet(object); + auto net = getObject(object); auto* iterm_descriptor = Gui::get()->getDescriptor(); auto* bterm_descriptor = Gui::get()->getDescriptor(); @@ -1436,7 +1415,7 @@ void DbNetDescriptor::highlight(std::any object, Painter& painter) const bool DbNetDescriptor::isSlowHighlight(std::any object) const { - auto net = getNet(object); + auto net = getObject(object); return net->getSigType().isSupply(); } @@ -1445,10 +1424,9 @@ bool DbNetDescriptor::isNet(std::any object) const return true; } -Descriptor::Properties DbNetDescriptor::getProperties(std::any object) const +Descriptor::Properties DbNetDescriptor::getDBProperties(odb::dbNet* net) const { auto gui = Gui::get(); - auto net = getNet(object); Properties props({{"Block", gui->makeSelected(net->getBlock())}, {"Signal type", net->getSigType().getString()}, {"Source type", net->getSourceType().getString()}, @@ -1482,14 +1460,12 @@ Descriptor::Properties DbNetDescriptor::getProperties(std::any object) const props.push_back({"Buffer tree", gui->makeSelected(BufferTree(net))}); } - populateODBProperties(props, net); - return props; } Descriptor::Editors DbNetDescriptor::getEditors(std::any object) const { - auto net = getNet(object); + auto net = getObject(object); Editors editors; addRenameEditor(net, editors); editors.insert({"Special", makeEditor([net](std::any value) { @@ -1517,7 +1493,7 @@ Descriptor::Editors DbNetDescriptor::getEditors(std::any object) const Descriptor::Actions DbNetDescriptor::getActions(std::any object) const { - auto net = getNet(object); + auto net = getObject(object); auto* gui = Gui::get(); Descriptor::Actions actions; @@ -1586,22 +1562,17 @@ Descriptor::Actions DbNetDescriptor::getActions(std::any object) const Selected DbNetDescriptor::makeSelected(std::any object) const { - if (auto net = std::any_cast(&object)) { - return Selected(*net, this); + Selected net_selected = BaseDbDescriptor::makeSelected(object); + if (net_selected) { + return net_selected; } + if (auto net = std::any_cast(&object)) { return Selected(*net, this); } return Selected(); } -bool DbNetDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_net = getNet(l); - auto r_net = getNet(r); - return l_net->getId() < r_net->getId(); -} - bool DbNetDescriptor::getAllObjects(SelectionSet& objects) const { auto* chip = db_->getChip(); @@ -1619,7 +1590,7 @@ bool DbNetDescriptor::getAllObjects(SelectionSet& objects) const return true; } -odb::dbNet* DbNetDescriptor::getNet(const std::any& object) const +odb::dbNet* DbNetDescriptor::getObject(const std::any& object) const { odb::dbNet* const* net = std::any_cast(&object); if (net != nullptr) { @@ -1642,7 +1613,8 @@ odb::dbObject* DbNetDescriptor::getSink(const std::any& object) const DbITermDescriptor::DbITermDescriptor( odb::dbDatabase* db, std::function usingPolyDecompView) - : db_(db), usingPolyDecompView_(std::move(usingPolyDecompView)) + : BaseDbDescriptor(db), + usingPolyDecompView_(std::move(usingPolyDecompView)) { } @@ -1706,10 +1678,10 @@ void DbITermDescriptor::highlight(std::any object, Painter& painter) const } } -Descriptor::Properties DbITermDescriptor::getProperties(std::any object) const +Descriptor::Properties DbITermDescriptor::getDBProperties( + odb::dbITerm* iterm) const { auto gui = Gui::get(); - auto iterm = std::any_cast(object); auto net = iterm->getNet(); std::any net_value; if (net != nullptr) { @@ -1730,8 +1702,6 @@ Descriptor::Properties DbITermDescriptor::getProperties(std::any object) const {"MTerm", gui->makeSelected(iterm->getMTerm())}, {"Access Points", aps}}; - populateODBProperties(props, iterm); - return props; } @@ -1745,21 +1715,6 @@ Descriptor::Actions DbITermDescriptor::getActions(std::any object) const return actions; } -Selected DbITermDescriptor::makeSelected(std::any object) const -{ - if (auto iterm = std::any_cast(&object)) { - return Selected(*iterm, this); - } - return Selected(); -} - -bool DbITermDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_iterm = std::any_cast(l); - auto r_iterm = std::any_cast(r); - return l_iterm->getId() < r_iterm->getId(); -} - bool DbITermDescriptor::getAllObjects(SelectionSet& objects) const { auto* chip = db_->getChip(); @@ -1779,7 +1734,8 @@ bool DbITermDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbBTermDescriptor::DbBTermDescriptor(odb::dbDatabase* db) : db_(db) +DbBTermDescriptor::DbBTermDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -1811,10 +1767,10 @@ void DbBTermDescriptor::highlight(std::any object, Painter& painter) const } } -Descriptor::Properties DbBTermDescriptor::getProperties(std::any object) const +Descriptor::Properties DbBTermDescriptor::getDBProperties( + odb::dbBTerm* bterm) const { auto gui = Gui::get(); - auto bterm = std::any_cast(object); SelectionSet aps; for (auto* pin : bterm->getBPins()) { for (auto ap : pin->getAccessPoints()) { @@ -1841,8 +1797,6 @@ Descriptor::Properties DbBTermDescriptor::getProperties(std::any object) const props.push_back({"Pins", pins}); } - populateODBProperties(props, bterm); - return props; } @@ -1864,21 +1818,6 @@ Descriptor::Actions DbBTermDescriptor::getActions(std::any object) const return actions; } -Selected DbBTermDescriptor::makeSelected(std::any object) const -{ - if (auto bterm = std::any_cast(&object)) { - return Selected(*bterm, this); - } - return Selected(); -} - -bool DbBTermDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_bterm = std::any_cast(l); - auto r_bterm = std::any_cast(r); - return l_bterm->getId() < r_bterm->getId(); -} - bool DbBTermDescriptor::getAllObjects(SelectionSet& objects) const { auto* chip = db_->getChip(); @@ -1898,7 +1837,8 @@ bool DbBTermDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbBPinDescriptor::DbBPinDescriptor(odb::dbDatabase* db) : db_(db) +DbBPinDescriptor::DbBPinDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -1929,10 +1869,10 @@ void DbBPinDescriptor::highlight(std::any object, Painter& painter) const } } -Descriptor::Properties DbBPinDescriptor::getProperties(std::any object) const +Descriptor::Properties DbBPinDescriptor::getDBProperties( + odb::dbBPin* bpin) const { auto gui = Gui::get(); - auto bpin = std::any_cast(object); SelectionSet aps; for (auto ap : bpin->getAccessPoints()) { DbTermAccessPoint bap{ap, bpin->getBTerm()}; @@ -1960,26 +1900,9 @@ Descriptor::Properties DbBPinDescriptor::getProperties(std::any object) const props.push_back({"Min spacing", convertUnits(bpin->getMinSpacing())}); } - populateODBProperties(props, bpin); - return props; } -Selected DbBPinDescriptor::makeSelected(std::any object) const -{ - if (auto bpin = std::any_cast(&object)) { - return Selected(*bpin, this); - } - return Selected(); -} - -bool DbBPinDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_bpin = std::any_cast(l); - auto r_bpin = std::any_cast(r); - return l_bpin->getId() < r_bpin->getId(); -} - bool DbBPinDescriptor::getAllObjects(SelectionSet& objects) const { auto* chip = db_->getChip(); @@ -2004,7 +1927,8 @@ bool DbBPinDescriptor::getAllObjects(SelectionSet& objects) const DbMTermDescriptor::DbMTermDescriptor( odb::dbDatabase* db, std::function usingPolyDecompView) - : db_(db), usingPolyDecompView_(std::move(usingPolyDecompView)) + : BaseDbDescriptor(db), + usingPolyDecompView_(std::move(usingPolyDecompView)) { } @@ -2076,10 +2000,10 @@ void DbMTermDescriptor::highlight(std::any object, Painter& painter) const } } -Descriptor::Properties DbMTermDescriptor::getProperties(std::any object) const +Descriptor::Properties DbMTermDescriptor::getDBProperties( + odb::dbMTerm* mterm) const { auto gui = Gui::get(); - auto mterm = std::any_cast(object); SelectionSet layers; for (auto* mpin : mterm->getMPins()) { for (auto* geom : mpin->getGeometry()) { @@ -2095,26 +2019,9 @@ Descriptor::Properties DbMTermDescriptor::getProperties(std::any object) const {"# Pins", mterm->getMPins().size()}, {"Layers", layers}}; - populateODBProperties(props, mterm); - return props; } -Selected DbMTermDescriptor::makeSelected(std::any object) const -{ - if (auto mterm = std::any_cast(&object)) { - return Selected(*mterm, this); - } - return Selected(); -} - -bool DbMTermDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_mterm = std::any_cast(l); - auto r_mterm = std::any_cast(r); - return l_mterm->getId() < r_mterm->getId(); -} - bool DbMTermDescriptor::getAllObjects(SelectionSet& objects) const { for (auto* lib : db_->getLibs()) { @@ -2130,7 +2037,8 @@ bool DbMTermDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbViaDescriptor::DbViaDescriptor(odb::dbDatabase* db) : db_(db) +DbViaDescriptor::DbViaDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -2154,9 +2062,8 @@ void DbViaDescriptor::highlight(std::any object, Painter& painter) const { } -Descriptor::Properties DbViaDescriptor::getProperties(std::any object) const +Descriptor::Properties DbViaDescriptor::getDBProperties(odb::dbVia* via) const { - auto via = std::any_cast(object); auto gui = Gui::get(); Properties props({{"Block", gui->makeSelected(via->getBlock())}}); @@ -2250,21 +2157,6 @@ Descriptor::Properties DbViaDescriptor::getProperties(std::any object) const return props; } -Selected DbViaDescriptor::makeSelected(std::any object) const -{ - if (auto via = std::any_cast(&object)) { - return Selected(*via, this); - } - return Selected(); -} - -bool DbViaDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_via = std::any_cast(l); - auto r_via = std::any_cast(r); - return l_via->getId() < r_via->getId(); -} - bool DbViaDescriptor::getAllObjects(SelectionSet& objects) const { auto chip = db_->getChip(); @@ -2286,7 +2178,8 @@ bool DbViaDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbBlockageDescriptor::DbBlockageDescriptor(odb::dbDatabase* db) : db_(db) +DbBlockageDescriptor::DbBlockageDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -2315,11 +2208,10 @@ void DbBlockageDescriptor::highlight(std::any object, Painter& painter) const painter.drawRect(rect); } -Descriptor::Properties DbBlockageDescriptor::getProperties( - std::any object) const +Descriptor::Properties DbBlockageDescriptor::getDBProperties( + odb::dbBlockage* blockage) const { auto gui = Gui::get(); - auto blockage = std::any_cast(object); odb::dbInst* inst = blockage->getInstance(); std::any inst_value; if (inst != nullptr) { @@ -2338,8 +2230,6 @@ Descriptor::Properties DbBlockageDescriptor::getProperties( {"Soft", blockage->isSoft()}, {"Max density", std::to_string(blockage->getMaxDensity()) + "%"}}; - populateODBProperties(props, blockage); - return props; } @@ -2371,21 +2261,6 @@ Descriptor::Editors DbBlockageDescriptor::getEditors(std::any object) const return editors; } -Selected DbBlockageDescriptor::makeSelected(std::any object) const -{ - if (auto blockage = std::any_cast(&object)) { - return Selected(*blockage, this); - } - return Selected(); -} - -bool DbBlockageDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_blockage = std::any_cast(l); - auto r_blockage = std::any_cast(r); - return l_blockage->getId() < r_blockage->getId(); -} - bool DbBlockageDescriptor::getAllObjects(SelectionSet& objects) const { auto* chip = db_->getChip(); @@ -2405,7 +2280,8 @@ bool DbBlockageDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbObstructionDescriptor::DbObstructionDescriptor(odb::dbDatabase* db) : db_(db) +DbObstructionDescriptor::DbObstructionDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -2435,11 +2311,10 @@ void DbObstructionDescriptor::highlight(std::any object, Painter& painter) const painter.drawRect(rect); } -Descriptor::Properties DbObstructionDescriptor::getProperties( - std::any object) const +Descriptor::Properties DbObstructionDescriptor::getDBProperties( + odb::dbObstruction* obs) const { auto gui = Gui::get(); - auto obs = std::any_cast(object); odb::dbInst* inst = obs->getInstance(); std::any inst_value; if (inst != nullptr) { @@ -2468,8 +2343,6 @@ Descriptor::Properties DbObstructionDescriptor::getProperties( {"Min spacing", Property::convert_dbu(obs->getMinSpacing(), true)}); } - populateODBProperties(props, obs); - return props; } @@ -2502,21 +2375,6 @@ Descriptor::Actions DbObstructionDescriptor::getActions(std::any object) const }}}); } -Selected DbObstructionDescriptor::makeSelected(std::any object) const -{ - if (auto obs = std::any_cast(&object)) { - return Selected(*obs, this); - } - return Selected(); -} - -bool DbObstructionDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_obs = std::any_cast(l); - auto r_obs = std::any_cast(r); - return l_obs->getId() < r_obs->getId(); -} - bool DbObstructionDescriptor::getAllObjects(SelectionSet& objects) const { auto* chip = db_->getChip(); @@ -2536,7 +2394,8 @@ bool DbObstructionDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbTechLayerDescriptor::DbTechLayerDescriptor(odb::dbDatabase* db) : db_(db) +DbTechLayerDescriptor::DbTechLayerDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -2560,11 +2419,10 @@ void DbTechLayerDescriptor::highlight(std::any object, Painter& painter) const { } -Descriptor::Properties DbTechLayerDescriptor::getProperties( - std::any object) const +Descriptor::Properties DbTechLayerDescriptor::getDBProperties( + odb::dbTechLayer* layer) const { auto* gui = Gui::get(); - auto layer = std::any_cast(object); Properties props({{"Technology", gui->makeSelected(layer->getTech())}, {"Direction", layer->getDirection().getString()}, {"Layer type", layer->getType().getString()}}); @@ -2777,26 +2635,9 @@ Descriptor::Properties DbTechLayerDescriptor::getProperties( props.push_back({"Tech vias", tech_vias}); } - populateODBProperties(props, layer); - return props; } -Selected DbTechLayerDescriptor::makeSelected(std::any object) const -{ - if (auto layer = std::any_cast(&object)) { - return Selected(*layer, this); - } - return Selected(); -} - -bool DbTechLayerDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_layer = std::any_cast(l); - auto r_layer = std::any_cast(r); - return l_layer->getId() < r_layer->getId(); -} - bool DbTechLayerDescriptor::getAllObjects(SelectionSet& objects) const { auto* tech = db_->getTech(); @@ -2959,7 +2800,8 @@ bool DbTermAccessPointDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbGroupDescriptor::DbGroupDescriptor(odb::dbDatabase* db) : db_(db) +DbGroupDescriptor::DbGroupDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -2997,10 +2839,9 @@ void DbGroupDescriptor::highlight(std::any object, Painter& painter) const } } -Descriptor::Properties DbGroupDescriptor::getProperties(std::any object) const +Descriptor::Properties DbGroupDescriptor::getDBProperties( + odb::dbGroup* group) const { - auto* group = std::any_cast(object); - auto* gui = Gui::get(); Properties props; @@ -3042,26 +2883,9 @@ Descriptor::Properties DbGroupDescriptor::getProperties(std::any object) const } props.push_back({"Ground Nets", gnd}); - populateODBProperties(props, group); - return props; } -Selected DbGroupDescriptor::makeSelected(std::any object) const -{ - if (auto group = std::any_cast(&object)) { - return Selected(*group, this); - } - return Selected(); -} - -bool DbGroupDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_layer = std::any_cast(l); - auto r_layer = std::any_cast(r); - return l_layer->getId() < r_layer->getId(); -} - bool DbGroupDescriptor::getAllObjects(SelectionSet& objects) const { auto* chip = db_->getChip(); @@ -3081,7 +2905,8 @@ bool DbGroupDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbRegionDescriptor::DbRegionDescriptor(odb::dbDatabase* db) : db_(db) +DbRegionDescriptor::DbRegionDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -3130,10 +2955,9 @@ void DbRegionDescriptor::highlight(std::any object, Painter& painter) const } } -Descriptor::Properties DbRegionDescriptor::getProperties(std::any object) const +Descriptor::Properties DbRegionDescriptor::getDBProperties( + odb::dbRegion* region) const { - auto* region = std::any_cast(object); - auto* gui = Gui::get(); Properties props({{"Block", gui->makeSelected(region->getBlock())}, @@ -3152,26 +2976,9 @@ Descriptor::Properties DbRegionDescriptor::getProperties(std::any object) const } props.push_back({"Instances", insts}); - populateODBProperties(props, region); - return props; } -Selected DbRegionDescriptor::makeSelected(std::any object) const -{ - if (auto region = std::any_cast(&object)) { - return Selected(*region, this); - } - return Selected(); -} - -bool DbRegionDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_layer = std::any_cast(l); - auto r_layer = std::any_cast(r); - return l_layer->getId() < r_layer->getId(); -} - bool DbRegionDescriptor::getAllObjects(SelectionSet& objects) const { auto* chip = db_->getChip(); @@ -3191,7 +2998,8 @@ bool DbRegionDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbModuleDescriptor::DbModuleDescriptor(odb::dbDatabase* db) : db_(db) +DbModuleDescriptor::DbModuleDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -3252,9 +3060,9 @@ void DbModuleDescriptor::highlight(std::any object, Painter& painter) const painter.restoreState(); } -Descriptor::Properties DbModuleDescriptor::getProperties(std::any object) const +Descriptor::Properties DbModuleDescriptor::getDBProperties( + odb::dbModule* module) const { - auto* module = std::any_cast(object); auto* mod_inst = module->getModInst(); auto* gui = Gui::get(); @@ -3286,7 +3094,6 @@ Descriptor::Properties DbModuleDescriptor::getProperties(std::any object) const } props.push_back({"Instances", insts}); - populateODBProperties(props, module); if (mod_inst != nullptr) { populateODBProperties(props, mod_inst, "Instance"); } @@ -3294,21 +3101,6 @@ Descriptor::Properties DbModuleDescriptor::getProperties(std::any object) const return props; } -Selected DbModuleDescriptor::makeSelected(std::any object) const -{ - if (auto module = std::any_cast(&object)) { - return Selected(*module, this); - } - return Selected(); -} - -bool DbModuleDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_layer = std::any_cast(l); - auto r_layer = std::any_cast(r); - return l_layer->getId() < r_layer->getId(); -} - bool DbModuleDescriptor::getAllObjects(SelectionSet& objects) const { auto* chip = db_->getChip(); @@ -3337,7 +3129,8 @@ void DbModuleDescriptor::getModules(odb::dbModule* module, ////////////////////////////////////////////////// -DbTechViaDescriptor::DbTechViaDescriptor(odb::dbDatabase* db) : db_(db) +DbTechViaDescriptor::DbTechViaDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -3361,9 +3154,9 @@ void DbTechViaDescriptor::highlight(std::any object, Painter& painter) const { } -Descriptor::Properties DbTechViaDescriptor::getProperties(std::any object) const +Descriptor::Properties DbTechViaDescriptor::getDBProperties( + odb::dbTechVia* via) const { - auto* via = std::any_cast(object); auto* gui = Gui::get(); Properties props({{"Tech", gui->makeSelected(via->getTech())}}); @@ -3410,26 +3203,9 @@ Descriptor::Properties DbTechViaDescriptor::getProperties(std::any object) const props.push_back({"Non-default Rule", gui->makeSelected(ndr)}); } - populateODBProperties(props, via); - return props; } -Selected DbTechViaDescriptor::makeSelected(std::any object) const -{ - if (auto via = std::any_cast(&object)) { - return Selected(*via, this); - } - return Selected(); -} - -bool DbTechViaDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_via = std::any_cast(l); - auto r_via = std::any_cast(r); - return l_via->getId() < r_via->getId(); -} - bool DbTechViaDescriptor::getAllObjects(SelectionSet& objects) const { auto* tech = db_->getTech(); @@ -3442,7 +3218,8 @@ bool DbTechViaDescriptor::getAllObjects(SelectionSet& objects) const } ////////////////////////////////////////////////// -DbTechViaRuleDescriptor::DbTechViaRuleDescriptor(odb::dbDatabase* db) : db_(db) +DbTechViaRuleDescriptor::DbTechViaRuleDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -3466,10 +3243,9 @@ void DbTechViaRuleDescriptor::highlight(std::any object, Painter& painter) const { } -Descriptor::Properties DbTechViaRuleDescriptor::getProperties( - std::any object) const +Descriptor::Properties DbTechViaRuleDescriptor::getDBProperties( + odb::dbTechViaRule* via_rule) const { - auto via_rule = std::any_cast(object); auto gui = Gui::get(); Properties props; @@ -3491,22 +3267,6 @@ Descriptor::Properties DbTechViaRuleDescriptor::getProperties( return props; } -Selected DbTechViaRuleDescriptor::makeSelected(std::any object) const -{ - if (auto via_rule = std::any_cast(&object)) { - return Selected(*via_rule, this); - } - - return Selected(); -} - -bool DbTechViaRuleDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_via_rule = std::any_cast(l); - auto r_via_rule = std::any_cast(r); - return l_via_rule->getId() < r_via_rule->getId(); -} - bool DbTechViaRuleDescriptor::getAllObjects(SelectionSet& objects) const { auto* tech = db_->getTech(); @@ -3521,7 +3281,7 @@ bool DbTechViaRuleDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// DbTechViaLayerRuleDescriptor::DbTechViaLayerRuleDescriptor(odb::dbDatabase* db) - : db_(db) + : BaseDbDescriptor(db) { } @@ -3548,10 +3308,9 @@ void DbTechViaLayerRuleDescriptor::highlight(std::any object, { } -Descriptor::Properties DbTechViaLayerRuleDescriptor::getProperties( - std::any object) const +Descriptor::Properties DbTechViaLayerRuleDescriptor::getDBProperties( + odb::dbTechViaLayerRule* via_layer_rule) const { - auto via_layer_rule = std::any_cast(object); auto gui = Gui::get(); Properties props({{"Layer", gui->makeSelected(via_layer_rule->getLayer())}, @@ -3624,23 +3383,6 @@ Descriptor::Properties DbTechViaLayerRuleDescriptor::getProperties( return props; } -Selected DbTechViaLayerRuleDescriptor::makeSelected(std::any object) const -{ - if (auto via_layer_rule = std::any_cast(&object)) { - return Selected(*via_layer_rule, this); - } - - return Selected(); -} - -bool DbTechViaLayerRuleDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_via_layer_rule = std::any_cast(l); - auto r_via_layer_rule = std::any_cast(r); - - return l_via_layer_rule->getId() < r_via_layer_rule->getId(); -} - bool DbTechViaLayerRuleDescriptor::getAllObjects(SelectionSet& objects) const { auto tech = db_->getTech(); @@ -3659,7 +3401,7 @@ bool DbTechViaLayerRuleDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// DbMetalWidthViaMapDescriptor::DbMetalWidthViaMapDescriptor(odb::dbDatabase* db) - : db_(db) + : BaseDbDescriptor(db) { } @@ -3686,11 +3428,9 @@ void DbMetalWidthViaMapDescriptor::highlight(std::any object, { } -Descriptor::Properties DbMetalWidthViaMapDescriptor::getProperties( - std::any object) const +Descriptor::Properties DbMetalWidthViaMapDescriptor::getDBProperties( + odb::dbMetalWidthViaMap* via_map) const { - auto via_map = std::any_cast(object); - Properties props( {{"Is via cut class", via_map->isViaCutClass()}, {"Below Layer Low Width", @@ -3705,22 +3445,6 @@ Descriptor::Properties DbMetalWidthViaMapDescriptor::getProperties( return props; } -Selected DbMetalWidthViaMapDescriptor::makeSelected(std::any object) const -{ - if (auto via_map = std::any_cast(&object)) { - return Selected(*via_map, this); - } - - return Selected(); -} - -bool DbMetalWidthViaMapDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_via_map = std::any_cast(l); - auto r_via_map = std::any_cast(r); - return l_via_map->getId() < r_via_map->getId(); -} - bool DbMetalWidthViaMapDescriptor::getAllObjects(SelectionSet& objects) const { auto* tech = db_->getTech(); @@ -3734,7 +3458,8 @@ bool DbMetalWidthViaMapDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbGenerateViaDescriptor::DbGenerateViaDescriptor(odb::dbDatabase* db) : db_(db) +DbGenerateViaDescriptor::DbGenerateViaDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -3758,10 +3483,9 @@ void DbGenerateViaDescriptor::highlight(std::any object, Painter& painter) const { } -Descriptor::Properties DbGenerateViaDescriptor::getProperties( - std::any object) const +Descriptor::Properties DbGenerateViaDescriptor::getDBProperties( + odb::dbTechViaGenerateRule* via) const { - auto* via = std::any_cast(object); auto* gui = Gui::get(); Properties props; @@ -3795,26 +3519,9 @@ Descriptor::Properties DbGenerateViaDescriptor::getProperties( props.push_back({"Is default", via->isDefault()}); - populateODBProperties(props, via); - return props; } -Selected DbGenerateViaDescriptor::makeSelected(std::any object) const -{ - if (auto via = std::any_cast(&object)) { - return Selected(*via, this); - } - return Selected(); -} - -bool DbGenerateViaDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_via = std::any_cast(l); - auto r_via = std::any_cast(r); - return l_via->getId() < r_via->getId(); -} - bool DbGenerateViaDescriptor::getAllObjects(SelectionSet& objects) const { auto* tech = db_->getTech(); @@ -3829,7 +3536,7 @@ bool DbGenerateViaDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// DbNonDefaultRuleDescriptor::DbNonDefaultRuleDescriptor(odb::dbDatabase* db) - : db_(db) + : BaseDbDescriptor(db) { } @@ -3854,10 +3561,9 @@ void DbNonDefaultRuleDescriptor::highlight(std::any object, { } -Descriptor::Properties DbNonDefaultRuleDescriptor::getProperties( - std::any object) const +Descriptor::Properties DbNonDefaultRuleDescriptor::getDBProperties( + odb::dbTechNonDefaultRule* rule) const { - auto* rule = std::any_cast(object); auto* gui = Gui::get(); Properties props({{"Tech", gui->makeSelected(db_->getTech())}}); @@ -3888,26 +3594,9 @@ Descriptor::Properties DbNonDefaultRuleDescriptor::getProperties( props.push_back({"Is block rule", rule->isBlockRule()}); - populateODBProperties(props, rule); - return props; } -Selected DbNonDefaultRuleDescriptor::makeSelected(std::any object) const -{ - if (auto rule = std::any_cast(&object)) { - return Selected(*rule, this); - } - return Selected(); -} - -bool DbNonDefaultRuleDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_rule = std::any_cast(l); - auto r_rule = std::any_cast(r); - return l_rule->getId() < r_rule->getId(); -} - bool DbNonDefaultRuleDescriptor::getAllObjects(SelectionSet& objects) const { auto* chip = db_->getChip(); @@ -3932,8 +3621,8 @@ bool DbNonDefaultRuleDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbTechSameNetRuleDescriptor::DbTechSameNetRuleDescriptor(odb::dbDatabase* db) - : db_(db) +DbTechLayerRuleDescriptor::DbTechLayerRuleDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -3958,10 +3647,9 @@ void DbTechLayerRuleDescriptor::highlight(std::any object, { } -Descriptor::Properties DbTechLayerRuleDescriptor::getProperties( - std::any object) const +Descriptor::Properties DbTechLayerRuleDescriptor::getDBProperties( + odb::dbTechLayerRule* rule) const { - auto* rule = std::any_cast(object); auto* gui = Gui::get(); Properties props; @@ -3974,26 +3662,9 @@ Descriptor::Properties DbTechLayerRuleDescriptor::getProperties( props.push_back({"Width", Property::convert_dbu(rule->getWidth(), true)}); props.push_back({"Spacing", Property::convert_dbu(rule->getSpacing(), true)}); - populateODBProperties(props, rule); - return props; } -Selected DbTechLayerRuleDescriptor::makeSelected(std::any object) const -{ - if (auto rule = std::any_cast(&object)) { - return Selected(*rule, this); - } - return Selected(); -} - -bool DbTechLayerRuleDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_rule = std::any_cast(l); - auto r_rule = std::any_cast(r); - return l_rule->getId() < r_rule->getId(); -} - bool DbTechLayerRuleDescriptor::getAllObjects(SelectionSet& objects) const { return false; @@ -4001,6 +3672,11 @@ bool DbTechLayerRuleDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// +DbTechSameNetRuleDescriptor::DbTechSameNetRuleDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) +{ +} + std::string DbTechSameNetRuleDescriptor::getName(std::any object) const { auto* rule = std::any_cast(object); @@ -4023,10 +3699,9 @@ void DbTechSameNetRuleDescriptor::highlight(std::any object, { } -Descriptor::Properties DbTechSameNetRuleDescriptor::getProperties( - std::any object) const +Descriptor::Properties DbTechSameNetRuleDescriptor::getDBProperties( + odb::dbTechSameNetRule* rule) const { - auto* rule = std::any_cast(object); auto* gui = Gui::get(); Properties props({{"Tech", gui->makeSelected(db_->getTech())}}); @@ -4037,26 +3712,9 @@ Descriptor::Properties DbTechSameNetRuleDescriptor::getProperties( props.push_back({"Spacing", Property::convert_dbu(rule->getSpacing(), true)}); props.push_back({"Allow via stacking", rule->getAllowStackedVias()}); - populateODBProperties(props, rule); - return props; } -Selected DbTechSameNetRuleDescriptor::makeSelected(std::any object) const -{ - if (auto rule = std::any_cast(&object)) { - return Selected(*rule, this); - } - return Selected(); -} - -bool DbTechSameNetRuleDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_rule = std::any_cast(l); - auto r_rule = std::any_cast(r); - return l_rule->getId() < r_rule->getId(); -} - bool DbTechSameNetRuleDescriptor::getAllObjects(SelectionSet& objects) const { return false; @@ -4064,14 +3722,14 @@ bool DbTechSameNetRuleDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbSiteDescriptor::DbSiteDescriptor(odb::dbDatabase* db) : db_(db) +DbSiteDescriptor::DbSiteDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } std::string DbSiteDescriptor::getName(std::any object) const { - auto* site = getSite(object); - return site->getName(); + return getObject(object)->getName(); } std::string DbSiteDescriptor::getTypeName() const @@ -4098,8 +3756,18 @@ void DbSiteDescriptor::highlight(std::any object, Painter& painter) const Descriptor::Properties DbSiteDescriptor::getProperties(std::any object) const { - auto* site = getSite(object); + Properties props = BaseDbDescriptor::getProperties(object); + + if (auto site = std::any_cast(&object)) { + props.push_back({"Index", site->index_in_row}); + } + return props; +} + +Descriptor::Properties DbSiteDescriptor::getDBProperties( + odb::dbSite* site) const +{ Properties props; props.push_back({"Width", Property::convert_dbu(site->getWidth(), true)}); @@ -4119,20 +3787,16 @@ Descriptor::Properties DbSiteDescriptor::getProperties(std::any object) const } props.push_back({"Symmetry", symmetry}); - if (auto site = std::any_cast(&object)) { - props.push_back({"Index", site->index_in_row}); - } - - populateODBProperties(props, site); - return props; } Selected DbSiteDescriptor::makeSelected(std::any object) const { - if (auto site = std::any_cast(&object)) { - return Selected(*site, this); + Selected site_selected = BaseDbDescriptor::makeSelected(object); + if (site_selected) { + return site_selected; } + if (auto site = std::any_cast(&object)) { return Selected(*site, this); } @@ -4141,10 +3805,8 @@ Selected DbSiteDescriptor::makeSelected(std::any object) const bool DbSiteDescriptor::lessThan(std::any l, std::any r) const { - auto l_site = getSite(l); - auto r_site = getSite(r); - if (l_site->getId() < r_site->getId()) { - return true; + if (!isSpecificSite(l) && !isSpecificSite(r)) { + return BaseDbDescriptor::lessThan(l, r); } const odb::Rect l_rect = getRect(l); @@ -4163,7 +3825,7 @@ bool DbSiteDescriptor::getAllObjects(SelectionSet& objects) const return true; } -odb::dbSite* DbSiteDescriptor::getSite(const std::any& object) const +odb::dbSite* DbSiteDescriptor::getObject(const std::any& object) const { odb::dbSite* const* site = std::any_cast(&object); if (site != nullptr) { @@ -4189,7 +3851,8 @@ bool DbSiteDescriptor::isSpecificSite(const std::any& object) const ////////////////////////////////////////////////// -DbRowDescriptor::DbRowDescriptor(odb::dbDatabase* db) : db_(db) +DbRowDescriptor::DbRowDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -4217,9 +3880,8 @@ void DbRowDescriptor::highlight(std::any object, Painter& painter) const painter.drawRect(row->getBBox()); } -Descriptor::Properties DbRowDescriptor::getProperties(std::any object) const +Descriptor::Properties DbRowDescriptor::getDBProperties(odb::dbRow* row) const { - auto* row = std::any_cast(object); auto* gui = Gui::get(); Properties props({{"Block", gui->makeSelected(row->getBlock())}, @@ -4237,27 +3899,9 @@ Descriptor::Properties DbRowDescriptor::getProperties(std::any object) const props.push_back( {"Site spacing", Property::convert_dbu(row->getSpacing(), true)}); - populateODBProperties(props, row); - return props; } -Selected DbRowDescriptor::makeSelected(std::any object) const -{ - if (auto row = std::any_cast(&object)) { - return Selected(*row, this); - } - return Selected(); -} - -bool DbRowDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_row = std::any_cast(l); - auto r_row = std::any_cast(r); - - return l_row->getId() < r_row->getId(); -} - bool DbRowDescriptor::getAllObjects(SelectionSet& objects) const { auto* block = db_->getChip()->getBlock(); @@ -4272,7 +3916,7 @@ bool DbRowDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// DbMarkerCategoryDescriptor::DbMarkerCategoryDescriptor(odb::dbDatabase* db) - : db_(db) + : BaseDbDescriptor(db) { } @@ -4310,10 +3954,9 @@ void DbMarkerCategoryDescriptor::highlight(std::any object, } } -Descriptor::Properties DbMarkerCategoryDescriptor::getProperties( - std::any object) const +Descriptor::Properties DbMarkerCategoryDescriptor::getDBProperties( + odb::dbMarkerCategory* category) const { - auto* category = std::any_cast(object); auto* gui = Gui::get(); Properties props; @@ -4358,22 +4001,6 @@ Descriptor::Properties DbMarkerCategoryDescriptor::getProperties( return props; } -Selected DbMarkerCategoryDescriptor::makeSelected(std::any object) const -{ - if (auto category = std::any_cast(&object)) { - return Selected(*category, this); - } - return Selected(); -} - -bool DbMarkerCategoryDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_category = std::any_cast(l); - auto r_category = std::any_cast(r); - - return l_category->getId() < r_category->getId(); -} - bool DbMarkerCategoryDescriptor::getAllObjects(SelectionSet& objects) const { auto* block = db_->getChip()->getBlock(); @@ -4387,7 +4014,8 @@ bool DbMarkerCategoryDescriptor::getAllObjects(SelectionSet& objects) const ////////////////////////////////////////////////// -DbMarkerDescriptor::DbMarkerDescriptor(odb::dbDatabase* db) : db_(db) +DbMarkerDescriptor::DbMarkerDescriptor(odb::dbDatabase* db) + : BaseDbDescriptor(db) { } @@ -4415,9 +4043,9 @@ void DbMarkerDescriptor::highlight(std::any object, Painter& painter) const paintMarker(marker, painter); } -Descriptor::Properties DbMarkerDescriptor::getProperties(std::any object) const +Descriptor::Properties DbMarkerDescriptor::getDBProperties( + odb::dbMarker* marker) const { - auto* marker = std::any_cast(object); auto* gui = Gui::get(); Properties props; @@ -4475,22 +4103,6 @@ Descriptor::Properties DbMarkerDescriptor::getProperties(std::any object) const return props; } -Selected DbMarkerDescriptor::makeSelected(std::any object) const -{ - if (auto marker = std::any_cast(&object)) { - return Selected(*marker, this); - } - return Selected(); -} - -bool DbMarkerDescriptor::lessThan(std::any l, std::any r) const -{ - auto l_marker = std::any_cast(l); - auto r_marker = std::any_cast(r); - - return l_marker->getId() < r_marker->getId(); -} - bool DbMarkerDescriptor::getAllObjects(SelectionSet& objects) const { auto* block = db_->getChip()->getBlock(); diff --git a/src/gui/src/dbDescriptors.h b/src/gui/src/dbDescriptors.h index 34c3eb1dd1..f38ab4e00b 100644 --- a/src/gui/src/dbDescriptors.h +++ b/src/gui/src/dbDescriptors.h @@ -52,7 +52,25 @@ namespace gui { // Descriptor classes for OpenDB objects. Eventually these should // become part of the database code generation. -class DbTechDescriptor : public Descriptor +template +class BaseDbDescriptor : public Descriptor +{ + public: + BaseDbDescriptor(odb::dbDatabase* db); + + Properties getProperties(std::any object) const override; + + Selected makeSelected(std::any object) const override; + bool lessThan(std::any l, std::any r) const override; + + protected: + odb::dbDatabase* db_; + + virtual T* getObject(const std::any& object) const; + virtual Properties getDBProperties(T* object) const = 0; +}; + +class DbTechDescriptor : public BaseDbDescriptor { public: DbTechDescriptor(odb::dbDatabase* db); @@ -63,17 +81,13 @@ class DbTechDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbTech* tech) const override; }; -class DbBlockDescriptor : public Descriptor +class DbBlockDescriptor : public BaseDbDescriptor { public: DbBlockDescriptor(odb::dbDatabase* db); @@ -84,17 +98,13 @@ class DbBlockDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbBlock* block) const override; }; -class DbInstDescriptor : public Descriptor +class DbInstDescriptor : public BaseDbDescriptor { public: DbInstDescriptor(odb::dbDatabase* db, sta::dbSta* sta); @@ -107,14 +117,14 @@ class DbInstDescriptor : public Descriptor bool isInst(std::any object) const override; - Properties getProperties(std::any object) const override; Actions getActions(std::any object) const override; Editors getEditors(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; bool getAllObjects(SelectionSet& objects) const override; + protected: + Properties getDBProperties(odb::dbInst* inst) const override; + private: void makeMasterOptions(odb::dbMaster* master, std::vector& options) const; @@ -124,11 +134,10 @@ class DbInstDescriptor : public Descriptor const std::any& value, bool is_x) const; - odb::dbDatabase* db_; sta::dbSta* sta_; }; -class DbMasterDescriptor : public Descriptor +class DbMasterDescriptor : public BaseDbDescriptor { public: DbMasterDescriptor(odb::dbDatabase* db, sta::dbSta* sta); @@ -139,24 +148,22 @@ class DbMasterDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; static void getMasterEquivalent(sta::dbSta* sta, odb::dbMaster* master, std::set& masters); + protected: + Properties getDBProperties(odb::dbMaster* master) const override; + private: void getInstances(odb::dbMaster* master, std::set& insts) const; - odb::dbDatabase* db_; sta::dbSta* sta_; }; -class DbNetDescriptor : public Descriptor +class DbNetDescriptor : public BaseDbDescriptor { public: struct NetWithSink @@ -180,16 +187,17 @@ class DbNetDescriptor : public Descriptor bool isNet(std::any object) const override; - Properties getProperties(std::any object) const override; Editors getEditors(std::any object) const override; Actions getActions(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; + Selected makeSelected(std::any obj) const override; bool getAllObjects(SelectionSet& objects) const override; + protected: + odb::dbNet* getObject(const std::any& object) const override; + Properties getDBProperties(odb::dbNet* net) const override; + private: - odb::dbDatabase* db_; sta::dbSta* sta_; using Node = odb::dbWireGraph::Node; @@ -220,13 +228,12 @@ class DbNetDescriptor : public Descriptor const std::set& guide_nets_; const std::set& tracks_nets_; - odb::dbNet* getNet(const std::any& object) const; odb::dbObject* getSink(const std::any& object) const; static const int max_iterms_ = 10000; }; -class DbITermDescriptor : public Descriptor +class DbITermDescriptor : public BaseDbDescriptor { public: DbITermDescriptor(odb::dbDatabase* db, @@ -239,19 +246,18 @@ class DbITermDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; Actions getActions(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; bool getAllObjects(SelectionSet& objects) const override; + protected: + Properties getDBProperties(odb::dbITerm* iterm) const override; + private: - odb::dbDatabase* db_; std::function usingPolyDecompView_; }; -class DbBTermDescriptor : public Descriptor +class DbBTermDescriptor : public BaseDbDescriptor { public: DbBTermDescriptor(odb::dbDatabase* db); @@ -262,19 +268,16 @@ class DbBTermDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; Editors getEditors(std::any object) const override; Actions getActions(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbBTerm* bterm) const override; }; -class DbBPinDescriptor : public Descriptor +class DbBPinDescriptor : public BaseDbDescriptor { public: DbBPinDescriptor(odb::dbDatabase* db); @@ -285,17 +288,13 @@ class DbBPinDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbBPin* bpin) const override; }; -class DbMTermDescriptor : public Descriptor +class DbMTermDescriptor : public BaseDbDescriptor { public: DbMTermDescriptor(odb::dbDatabase* db, @@ -308,18 +307,16 @@ class DbMTermDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; + protected: + Properties getDBProperties(odb::dbMTerm* mterm) const override; + private: - odb::dbDatabase* db_; std::function usingPolyDecompView_; }; -class DbViaDescriptor : public Descriptor +class DbViaDescriptor : public BaseDbDescriptor { public: DbViaDescriptor(odb::dbDatabase* db); @@ -330,17 +327,13 @@ class DbViaDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbVia* via) const override; }; -class DbBlockageDescriptor : public Descriptor +class DbBlockageDescriptor : public BaseDbDescriptor { public: DbBlockageDescriptor(odb::dbDatabase* db); @@ -351,18 +344,15 @@ class DbBlockageDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; Editors getEditors(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbBlockage* blockage) const override; }; -class DbObstructionDescriptor : public Descriptor +class DbObstructionDescriptor : public BaseDbDescriptor { public: DbObstructionDescriptor(odb::dbDatabase* db); @@ -373,18 +363,15 @@ class DbObstructionDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; Actions getActions(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbObstruction* obs) const override; }; -class DbTechLayerDescriptor : public Descriptor +class DbTechLayerDescriptor : public BaseDbDescriptor { public: DbTechLayerDescriptor(odb::dbDatabase* db); @@ -395,14 +382,10 @@ class DbTechLayerDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbTechLayer* layer) const override; }; // The ap doesn't know its location as it is associated the master and @@ -443,7 +426,7 @@ class DbTermAccessPointDescriptor : public Descriptor odb::dbDatabase* db_; }; -class DbGroupDescriptor : public Descriptor +class DbGroupDescriptor : public BaseDbDescriptor { public: DbGroupDescriptor(odb::dbDatabase* db); @@ -454,17 +437,13 @@ class DbGroupDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbGroup* group) const override; }; -class DbRegionDescriptor : public Descriptor +class DbRegionDescriptor : public BaseDbDescriptor { public: DbRegionDescriptor(odb::dbDatabase* db); @@ -475,17 +454,13 @@ class DbRegionDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbRegion* region) const override; }; -class DbModuleDescriptor : public Descriptor +class DbModuleDescriptor : public BaseDbDescriptor { public: DbModuleDescriptor(odb::dbDatabase* db); @@ -497,19 +472,16 @@ class DbModuleDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbModule* module) const override; + private: void getModules(odb::dbModule* module, SelectionSet& objects) const; }; -class DbTechViaDescriptor : public Descriptor +class DbTechViaDescriptor : public BaseDbDescriptor { public: DbTechViaDescriptor(odb::dbDatabase* db); @@ -521,17 +493,13 @@ class DbTechViaDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbTechVia* via) const override; }; -class DbTechViaRuleDescriptor : public Descriptor +class DbTechViaRuleDescriptor : public BaseDbDescriptor { public: DbTechViaRuleDescriptor(odb::dbDatabase* db); @@ -543,17 +511,14 @@ class DbTechViaRuleDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbTechViaRule* via_rule) const override; }; -class DbTechViaLayerRuleDescriptor : public Descriptor +class DbTechViaLayerRuleDescriptor + : public BaseDbDescriptor { public: DbTechViaLayerRuleDescriptor(odb::dbDatabase*); @@ -565,17 +530,15 @@ class DbTechViaLayerRuleDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties( + odb::dbTechViaLayerRule* via_layer_rule) const override; }; -class DbMetalWidthViaMapDescriptor : public Descriptor +class DbMetalWidthViaMapDescriptor + : public BaseDbDescriptor { public: DbMetalWidthViaMapDescriptor(odb::dbDatabase* db); @@ -587,17 +550,14 @@ class DbMetalWidthViaMapDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbMetalWidthViaMap* via_map) const override; }; -class DbGenerateViaDescriptor : public Descriptor +class DbGenerateViaDescriptor + : public BaseDbDescriptor { public: DbGenerateViaDescriptor(odb::dbDatabase* db); @@ -609,17 +569,14 @@ class DbGenerateViaDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbTechViaGenerateRule* via) const override; }; -class DbNonDefaultRuleDescriptor : public Descriptor +class DbNonDefaultRuleDescriptor + : public BaseDbDescriptor { public: DbNonDefaultRuleDescriptor(odb::dbDatabase* db); @@ -631,19 +588,17 @@ class DbNonDefaultRuleDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbTechNonDefaultRule* rule) const override; }; -class DbTechLayerRuleDescriptor : public Descriptor +class DbTechLayerRuleDescriptor : public BaseDbDescriptor { public: + DbTechLayerRuleDescriptor(odb::dbDatabase* db); + std::string getName(std::any object) const override; std::string getTypeName() const override; @@ -651,14 +606,14 @@ class DbTechLayerRuleDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; + + protected: + Properties getDBProperties(odb::dbTechLayerRule* rule) const override; }; -class DbTechSameNetRuleDescriptor : public Descriptor +class DbTechSameNetRuleDescriptor + : public BaseDbDescriptor { public: DbTechSameNetRuleDescriptor(odb::dbDatabase* db); @@ -670,17 +625,13 @@ class DbTechSameNetRuleDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbTechSameNetRule* rule) const override; }; -class DbSiteDescriptor : public Descriptor +class DbSiteDescriptor : public BaseDbDescriptor { public: struct SpecificSite @@ -705,15 +656,17 @@ class DbSiteDescriptor : public Descriptor bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + odb::dbSite* getObject(const std::any& object) const override; + Properties getDBProperties(odb::dbSite* site) const override; + private: odb::dbSite* getSite(const std::any& object) const; odb::Rect getRect(const std::any& object) const; bool isSpecificSite(const std::any& object) const; }; -class DbRowDescriptor : public Descriptor +class DbRowDescriptor : public BaseDbDescriptor { public: DbRowDescriptor(odb::dbDatabase* db); @@ -725,17 +678,14 @@ class DbRowDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbRow* row) const override; }; -class DbMarkerCategoryDescriptor : public Descriptor +class DbMarkerCategoryDescriptor + : public BaseDbDescriptor { public: DbMarkerCategoryDescriptor(odb::dbDatabase* db); @@ -747,17 +697,13 @@ class DbMarkerCategoryDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbMarkerCategory* category) const override; }; -class DbMarkerDescriptor : public Descriptor +class DbMarkerDescriptor : public BaseDbDescriptor { public: DbMarkerDescriptor(odb::dbDatabase* db); @@ -769,16 +715,12 @@ class DbMarkerDescriptor : public Descriptor void highlight(std::any object, Painter& painter) const override; - Properties getProperties(std::any object) const override; - Selected makeSelected(std::any object) const override; - bool lessThan(std::any l, std::any r) const override; - bool getAllObjects(SelectionSet& objects) const override; void paintMarker(odb::dbMarker* marker, Painter& painter) const; - private: - odb::dbDatabase* db_; + protected: + Properties getDBProperties(odb::dbMarker* marker) const override; }; }; // namespace gui diff --git a/src/gui/src/mainWindow.cpp b/src/gui/src/mainWindow.cpp index 51e957182b..76b8a957c8 100644 --- a/src/gui/src/mainWindow.cpp +++ b/src/gui/src/mainWindow.cpp @@ -515,7 +515,7 @@ void MainWindow::init(sta::dbSta* sta) gui->registerDescriptor( new DbNonDefaultRuleDescriptor(db_)); gui->registerDescriptor( - new DbTechLayerRuleDescriptor()); + new DbTechLayerRuleDescriptor(db_)); gui->registerDescriptor( new DbTechSameNetRuleDescriptor(db_)); gui->registerDescriptor(new DbSiteDescriptor(db_));