diff --git a/anabatic/src/NetBuilder.cpp b/anabatic/src/NetBuilder.cpp index b2001da3..f130fbcd 100644 --- a/anabatic/src/NetBuilder.cpp +++ b/anabatic/src/NetBuilder.cpp @@ -192,6 +192,7 @@ namespace Anabatic { , _routingPadAutoSegments() , _toFixSegments () , _degree (0) + , _isTwoMetals (false) { } @@ -226,12 +227,13 @@ namespace Anabatic { } - NetBuilder& NetBuilder::startFrom ( AnabaticEngine* anbt, Hook* fromHook, AutoContact* sourceContact ) + NetBuilder& NetBuilder::setStartHook ( AnabaticEngine* anbt, Hook* fromHook, AutoContact* sourceContact ) { clear(); - _sourceContact = sourceContact; - _fromHook = fromHook; + _isTwoMetals = anbt->getConfiguration()->isTwoMetals(); + _sourceContact = sourceContact; + _fromHook = fromHook; cdebug_log(145,1) << "NetBuilder::NetBuilder()" << endl; cdebug_log(145,0) << "* _fromHook: " << fromHook << endl; @@ -381,13 +383,13 @@ namespace Anabatic { { cdebug_log(145,1) << "NetBuilder::construct() [" << _connexity.connexity << "] in " << _gcell << endl; - if (_gcell->isMatrix()) { + if (not isTwoMetals()) { _southWestContact = NULL; _northEastContact = NULL; } if (not _gcell->isAnalog()) { - if (not _gcell->isMatrix() and not _sourceContact) _fromHook = NULL; + if (isTwoMetals() and not _sourceContact) _fromHook = NULL; switch ( _connexity.connexity ) { case Conn_1G_1Pad: @@ -2044,7 +2046,7 @@ namespace Anabatic { ++connecteds; segmentFound = true; - startFrom( anabatic, hook, NULL ); + setStartHook( anabatic, hook, NULL ); if (getStateG() == 1) { if ( (lowestGCell == NULL) or (*getGCell() < *lowestGCell) ) { cdebug_log(145,0) << "Potential starting GCell " << getGCell() << endl; @@ -2072,9 +2074,9 @@ namespace Anabatic { } cdebug_tabw(145,-1); - if (startHook == NULL) { startFrom(anabatic,NULL,NULL).singleGCell(anabatic,net); cdebug_tabw(145,-1); return; } + if (startHook == NULL) { setStartHook(anabatic,NULL,NULL).singleGCell(anabatic,net); cdebug_tabw(145,-1); return; } - startFrom( anabatic, startHook, NULL ); + setStartHook( anabatic, startHook, NULL ); cdebug_log(145,0) << endl; cdebug_log(145,0) << "--------~~~~=={o}==~~~~--------" << endl; cdebug_log(145,0) << endl; @@ -2086,7 +2088,7 @@ namespace Anabatic { _forks.pop(); while ( sourceHook ) { - startFrom( anabatic, sourceHook, sourceContact ); + setStartHook( anabatic, sourceHook, sourceContact ); construct(); sourceHook = _forks.getFrom(); diff --git a/anabatic/src/anabatic/NetBuilder.h b/anabatic/src/anabatic/NetBuilder.h index b9d4c054..c39761c0 100644 --- a/anabatic/src/anabatic/NetBuilder.h +++ b/anabatic/src/anabatic/NetBuilder.h @@ -141,10 +141,11 @@ namespace Anabatic { NetBuilder (); virtual ~NetBuilder (); void clear (); + inline bool isTwoMetals () const; inline unsigned int getDegree () const; inline void setDegree ( unsigned int degree ); void fixSegments (); - NetBuilder& startFrom ( AnabaticEngine* + NetBuilder& setStartHook ( AnabaticEngine* , Hook* fromHook , AutoContact* sourceContact=NULL ); void construct (); @@ -308,6 +309,7 @@ namespace Anabatic { map _routingPadAutoSegments; vector _toFixSegments; unsigned int _degree; + bool _isTwoMetals; // Sort classes. public: @@ -345,6 +347,7 @@ namespace Anabatic { }; + inline bool NetBuilder::isTwoMetals () const { return _isTwoMetals; } inline unsigned int NetBuilder::getDegree () const { return _degree; } inline NetBuilder::UConnexity NetBuilder::getConnexity () const { return _connexity; } inline NetBuilder::UConnexity& NetBuilder::getConnexity () { return _connexity; }