Allow RoutingPad::getPlugOccurrence() to build upon a Pin.

* Change: In Hurricane::RoutingPad::getPlugOccurrence(), it was
    forbidden to rebuild the Occurrence over anything other than
    Plug. But as we now also uses Pins, it becomes useful to
    rebuild the Occurrence on a Pin. The name of the function
    stays, even if its less meaningful now.
This commit is contained in:
Jean-Paul Chaput 2020-09-11 12:56:35 +02:00
parent 3e6d5622e8
commit f00b8cd667
2 changed files with 12 additions and 8 deletions

View File

@ -76,9 +76,8 @@ void Pin::_postCreate()
void Pin::_preDestroy()
// *********************
{
Inherit::_preDestroy();
getCell()->_getPinMap()._remove(this);
Inherit::_preDestroy();
getCell()->_getPinMap()._remove(this);
}
string Pin::_getString() const

View File

@ -319,11 +319,16 @@ namespace Hurricane {
Net* net = component->getNet();
Path path = _occurrence.getPath();
if (path.isEmpty())
throw Error( "RoutingPad::getPlugOccurrence(): Empty Path, *not* in an instance for\n"
" %s"
, getString(this).c_str()
);
if (path.isEmpty()) {
Pin* pin = dynamic_cast<Pin*>( component );
if (not pin)
throw Error( "RoutingPad::getPlugOccurrence(): Empty Path, *not* in an instance for\n"
" %s"
, getString(this).c_str()
);
return Occurrence(pin,Path());
}
Instance* instance = path.getTailInstance();
Plug* plug = instance->getPlug(net);