Katabatic - Routing Toolbox


List of all members | Public Member Functions | Static Public Member Functions | Static Protected Member Functions
AutoContact Class Referenceabstract

Abstract base class for AutoContact. More...

Inheritance diagram for AutoContact:
Inheritance graph
[legend]

Public Member Functions

HookgetBodyHook ()
 
HookgetAnchorHook ()
 
ComponentgetAnchor () const
 
NetgetNet () const
 
const LayergetLayer () const
 
DbU::Unit getX () const
 
DbU::Unit getY () const
 
DbU::Unit getDx () const
 
DbU::Unit getDy () const
 
Point getCenter () const
 
Point getPosition () const
 
DbU::Unit getWidth () const
 
DbU::Unit getHalfWidth () const
 
DbU::Unit getHeight () const
 
DbU::Unit getHalfHeight () const
 
Components getSlaveComponents () const
 
void setLayer (const Layer *)
 
void setWidth (DbU::Unit)
 
void setHeight (DbU::Unit)
 
void setSizes (DbU::Unit width, DbU::Unit height)
 
void setX (DbU::Unit)
 
void setY (DbU::Unit)
 
void setPosition (DbU::Unit width, DbU::Unit height)
 
void setPosition (const Point &)
 
void setDx (DbU::Unit)
 
void setDy (DbU::Unit)
 
void setOffset (DbU::Unit dx, DbU::Unit dy)
 
virtual void translate (const DbU::Unit &tx, const DbU::Unit &ty)
 
bool isInCreationStage () const
 
bool isInvalidated () const
 
bool isInvalidatedCache () const
 
bool isTurn () const
 
bool isTee (unsigned int direction) const
 
bool isHTee () const
 
bool isVTee () const
 
bool isFixed () const
 
bool hasBadTopology () const
 
bool canDestroy (unsigned int flags=0) const
 
bool canMoveUp (const AutoSegment *moved) const
 
Contactbase () const
 
virtual const NamegetName () const
 
size_t getId () const
 
virtual Box getBoundingBox () const
 
GCellgetGCell () const
 
virtual AutoSegmentgetOpposite (const AutoSegment *) const =0
 
virtual AutoSegmentgetPerpandicular (const AutoSegment *) const =0
 
virtual AutoSegmentgetSegment (unsigned int) const =0
 
unsigned int getMinDepth () const
 
unsigned int getMaxDepth () const
 
void getLengths (DbU::Unit *lengths, AutoSegment::DepthLengthSet &)
 
virtual Box getNativeConstraintBox () const
 
Interval getUConstraints (unsigned int direction) const
 
DbU::Unit getCBXMin () const
 
DbU::Unit getCBXMax () const
 
DbU::Unit getCBYMin () const
 
DbU::Unit getCBYMax () const
 
Box getConstraintBox () const
 
BoxintersectConstraintBox (Box &box) const
 
void invalidate (unsigned int flags=0)
 
virtual void updateGeometry ()=0
 
virtual void updateTopology ()=0
 
void showTopologyError (const std::string &, unsigned int flags=0)
 
virtual void checkTopology ()
 
void setGCell (GCell *)
 
void setCBXMin (DbU::Unit xMin)
 
void setCBXMax (DbU::Unit xMax)
 
void setCBYMin (DbU::Unit yMin)
 
void setCBYMax (DbU::Unit yMax)
 
void setConstraintBox (const Box &box)
 
bool restrictConstraintBox (DbU::Unit constraintMin, DbU::Unit constraintMax, unsigned int flags=KbWarnOnError)
 
void migrateConstraintBox (AutoContact *other)
 

Static Public Member Functions

static size_t getAllocateds ()
 
static const NamegetStaticName ()
 

Static Protected Member Functions

static void _getTopology (Contact *, Component *&anchor, Horizontal **&, Vertical **&, size_t)
 

Detailed Description

Abstract base class for AutoContact.

Caching Mechanism

To bypass the Ring/Hook mechanism and the subsequent Session::Lookup() call, the AutoSegments anchored on an AutoContact are cached in the AutoContact itself. They can be accessed through getHorizontalN() and getVerticalN() accessors N depending on the subtype of AutoContact.

Cached AutoSegments are updated in the AutoContact::updateTopology() function only.

Invalidate on AutoContacts

The invalidation of an AutoContact invalidate all the segments that are anchored on it.

Special Case of HTee & VTee

When invalidating an HTee or VTee, two out of the three anchored segments are parallels. The aligned constraint is passed on those two. By default, when we invalidate an AutoSegment, the invalidation is applied to the whole aligned set through the AutoSegment::getAligneds() collection. So if one of the parallel is invalidated and the other not, it should only be because we are already in getAligneds(), then we do not want to invalidate again the whole aligned set. In that case, we perform an atomic only invalidation (reset Katabatic::KbPropagate).

For the complete invalidation/revalidation mechanism see Session Algorithm.

Notes - Differences from Katabatic 2

From the previous version of Katabatic, AutoContact have been greatly stripped down (again). They are now always punctual objetcs with stricly fixed topologies:

Member Function Documentation

◆ getBodyHook()

Hook * getBodyHook ( )
inline

Base class method proxy.

References Component::getBodyHook().

Referenced by GCellTopology::_do_xG_1Pad(), and AutoSegment::create().

◆ getAnchorHook()

Hook * getAnchorHook ( )
inline

Base class method proxy.

References Contact::getAnchorHook().

◆ getAnchor()

Component * getAnchor ( ) const
inline

◆ getNet()

Net * getNet ( ) const
inline

◆ getLayer()

const Layer * getLayer ( ) const
inline

◆ getX()

DbU::Unit getX ( ) const
inline

◆ getY()

DbU::Unit getY ( ) const
inline

◆ getDx()

DbU::Unit getDx ( ) const
inline

Base class method proxy.

References Contact::getDx().

◆ getDy()

DbU::Unit getDy ( ) const
inline

Base class method proxy.

References Contact::getDy().

◆ getCenter()

Point getCenter ( ) const
inline

Base class method proxy.

◆ getPosition()

Point getPosition ( ) const
inline

Base class method proxy.

References Component::getPosition().

◆ getWidth()

DbU::Unit getWidth ( ) const
inline

Base class method proxy.

References Contact::getWidth().

◆ getHalfWidth()

DbU::Unit getHalfWidth ( ) const
inline

Base class method proxy.

References Contact::getHalfWidth().

◆ getHeight()

DbU::Unit getHeight ( ) const
inline

Base class method proxy.

References Contact::getHeight().

◆ getHalfHeight()

DbU::Unit getHalfHeight ( ) const
inline

Base class method proxy.

References Contact::getHalfHeight().

◆ getSlaveComponents()

Components getSlaveComponents ( ) const
inline

Base class method proxy.

References Component::getSlaveComponents().

◆ setLayer()

void setLayer ( const Layer layer)
inline

◆ setWidth()

void setWidth ( DbU::Unit  w)
inline

Base class method proxy.

References Contact::setWidth().

◆ setHeight()

void setHeight ( DbU::Unit  h)
inline

Base class method proxy.

References Contact::setHeight().

◆ setSizes()

void setSizes ( DbU::Unit  w,
DbU::Unit  h 
)
inline

Base class method proxy.

References Contact::setSizes().

◆ setX()

void setX ( DbU::Unit  x)
inline

◆ setY()

void setY ( DbU::Unit  y)
inline

◆ setPosition() [1/2]

void setPosition ( DbU::Unit  w,
DbU::Unit  h 
)
inline

Base class method proxy.

References Contact::setPosition().

◆ setPosition() [2/2]

void setPosition ( const Point p)
inline

Base class method proxy.

References Contact::setPosition().

◆ setDx()

void setDx ( DbU::Unit  dx)
inline

Base class method proxy.

References Contact::setDx().

◆ setDy()

void setDy ( DbU::Unit  dy)
inline

Base class method proxy.

References Contact::setDy().

◆ setOffset()

void setOffset ( DbU::Unit  w,
DbU::Unit  h 
)
inline

Base class method proxy.

References Contact::setOffset().

◆ translate()

void translate ( const DbU::Unit dx,
const DbU::Unit dy 
)
virtual

Base class method proxy.

◆ isInCreationStage()

bool isInCreationStage ( ) const
inline

Returns: true if the AutoContact is still in it's initial creation stage.

References Katabatic::CntInCreationStage.

◆ isInvalidated()

bool isInvalidated ( ) const
inline

Returns: true if the some AutoSegment has changed and the AutoContact needs to be repositionned (through a call to AutoContact::updateGeometry()).

References Katabatic::CntInvalidated.

◆ isInvalidatedCache()

bool isInvalidatedCache ( ) const
inline

◆ isTurn()

bool isTurn ( ) const
inline

Returns: true if the dynamic type of the AutoContact is of type Turn.

References Katabatic::CntTurn.

Referenced by AutoSegment::canReduce(), and AutoSegment::revalidate().

◆ isTee()

bool isTee ( unsigned int  direction) const

Returns: true if the dynamic type of the AutoContact is either of type AutoContactHTee or AutoContactVTee, according to direction.

References Katabatic::KbHorizontal, and Katabatic::KbVertical.

◆ isHTee()

bool isHTee ( ) const
inline

Returns: true if the dynamic type of the AutoContact is of type AutoContactHTee.

References Katabatic::CntHTee.

◆ isVTee()

bool isVTee ( ) const
inline

Returns: true if the dynamic type of the AutoContact is of type AutoContactHTee.

References Katabatic::CntVTee.

◆ isFixed()

bool isFixed ( ) const
inline

◆ hasBadTopology()

bool hasBadTopology ( ) const
inline

◆ canDestroy()

bool canDestroy ( unsigned int  flags = 0) const

Returns: true if the AutoContact could be destroyed, that is, no segments remains anchored on it. If flags contains Katabatic::KbWarnOnError, issue an error message.

References Katabatic::KbWarnOnError.

◆ canMoveUp()

bool canMoveUp ( const AutoSegment moved) const

Returns: true if segment can be moved up without triggering a topological modification. It meaans that:

References Component::getLayer(), AutoSegment::getLayer(), and RoutingGauge::getLayerDepth().

◆ base()

Contact * base ( ) const
inline

◆ getAllocateds()

size_t getAllocateds ( )
static

Returns: The total number of AutoContact currently allocateds.

◆ getStaticName()

const Name & getStaticName ( )
static

Returns: The name of the Hurricane::ExtensionGo slice.

◆ getName()

const Name & getName ( ) const
virtual

Returns: The name of the Hurricane::ExtensionGo slice.

◆ getId()

const Name & getId ( ) const
inline

Returns: The unique identifer of the AutoSegment.

◆ getBoundingBox()

Box getBoundingBox ( ) const
virtual

◆ getGCell()

GCell * getGCell ( ) const
inline

◆ getOpposite()

AutoSegment * getOpposite ( const AutoSegment reference) const
pure virtual

Returns: The other AutoSegment the same direction as reference, this is only meaningful on AutoContactHTee or AutoContactVTee. If there is no opposite, NULL is returned.

Implemented in AutoContactTerminal, AutoContactHTee, AutoContactTurn, and AutoContactVTee.

◆ getPerpandicular()

AutoSegment * getPerpandicular ( const AutoSegment reference) const
pure virtual

Returns: The AutoSegment in the perpandicular direction to reference, this is only meaningful on AutoContacTurn. It there is no unique perpandicular, NULL is returned.

Implemented in AutoContactTerminal, AutoContactHTee, AutoContactTurn, and AutoContactVTee.

Referenced by AutoSegment::raise(), AutoSegment::reduce(), and AutoSegment::revalidate().

◆ getSegment()

AutoSegment * getSegment ( unsigned int  index) const
pure virtual

Returns: The nth anchored AutoSegment. The index is significant:

  • 0 : first horizontal (h1).
  • 1 : second horizontal (h2).
  • 2 : first vertical (b1).
  • 3 : second vertical (b2).

Not all the indexes are filled for every AutoContact. For example Turn have h1 and b1, and HTee have h1, h2 and v1.

Implemented in AutoContactTerminal, AutoContactHTee, AutoContactTurn, and AutoContactVTee.

Referenced by AutoHorizontal::canMoveULeft(), AutoVertical::canMoveULeft(), AutoHorizontal::canMoveURight(), AutoVertical::canMoveURight(), LocatorHelper::getSegment(), LocatorHelper::LocatorHelper(), AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), AutoVertical::moveURight(), and LocatorHelper::progress().

◆ getMinDepth()

unsigned int getMinDepth ( ) const

Returns: The layer depth of the bottom layer of the AutoContact.

References Component::getLayer().

Referenced by AutoSegment::canPivotUp().

◆ getMaxDepth()

unsigned int getMaxDepth ( ) const

Returns: The layer depth of the top layer of the AutoContact.

References Component::getLayer().

Referenced by AutoSegment::canPivotDown().

◆ getLengths()

void getLengths ( DbU::Unit lengths,
AutoSegment::DepthLengthSet &  processeds 
)
Parameters
lengthsA table of DbU::Unit, the size of all routing layers used.
processedsAn AutoSegment sorted set holding all the already processeds AutoSegments.

Compute the lengths over the owning GCell of all the AutoSegments anchored on this AutoContact. The lengths are added to the total length table lengths. To avoid double accounting of the local AutoSegments that have both source & target in the same GCell, we keep a set of already processeds AutoSegments in processeds.

References Katabatic::KbHorizontal, Katabatic::KbVertical, and toLambda().

◆ getNativeConstraintBox()

Box getNativeConstraintBox ( ) const
virtual

Returns: The native constraint box (that is, whithout any user constraints applied). For AutoContactTerminal, this is the Box of the supporting external component, and for all others the bounding box of the owning GCell.

Reimplemented in AutoContactTerminal.

◆ getUConstraints()

Interval getUConstraints ( unsigned int  direction) const

Returns: The constraint interval in direction (that is, the relevant side of the constraint box).

References Interval::inflate(), and Katabatic::KbHorizontal.

Referenced by AutoContactTerminal::updateGeometry().

◆ getCBXMin()

DbU::Unit getCBXMin ( ) const
inline

Returns: The X coordinate of the bottom left corner of the constraint box.

References DbU::fromLambda(), Component::getX(), GCell::getX(), and AutoContact::isFixed().

Referenced by AutoContact::getConstraintBox(), and AutoVertical::getConstraints().

◆ getCBXMax()

DbU::Unit getCBXMax ( ) const
inline

Returns: The X coordinate of the top right corner of the constraint box.

References DbU::fromLambda(), Component::getX(), GCell::getX(), and AutoContact::isFixed().

Referenced by AutoContact::getConstraintBox(), and AutoVertical::getConstraints().

◆ getCBYMin()

DbU::Unit getCBYMin ( ) const
inline

Returns: The Y coordinate of the bottom left corner of the constraint box.

References DbU::fromLambda(), Component::getY(), GCell::getY(), and AutoContact::isFixed().

Referenced by AutoContact::getConstraintBox(), and AutoHorizontal::getConstraints().

◆ getCBYMax()

DbU::Unit getCBYMax ( ) const
inline

Returns: The Y coordinate of the top right corner of the constraint box.

References DbU::fromLambda(), Component::getY(), GCell::getY(), and AutoContact::isFixed().

Referenced by AutoContact::getConstraintBox(), and AutoHorizontal::getConstraints().

◆ getConstraintBox()

Box getConstraintBox ( ) const
inline

Returns: The current constraint box: the native constraint box with all the user's contraints applieds.

References AutoContact::getCBXMax(), AutoContact::getCBXMin(), AutoContact::getCBYMax(), and AutoContact::getCBYMin().

Referenced by AutoSegment::computeOptimal(), and AutoContact::migrateConstraintBox().

◆ intersectConstraintBox()

Box & intersectConstraintBox ( Box box) const

Returns: The intersection between box and the constraint box. The result is stored into box and a reference to it is returned.

References Box::getIntersection().

◆ invalidate()

void invalidate ( unsigned int  flags = 0)

Invalidate the AutoContact, schedule it for revalidation in the Session. If flag containt Katabatic::CntInvalidTopology, the topology of the AutoContact will also be checked and possible gap closeds.

The revalidations methods associated are:

  • AutoSegment::updateGeometry(), recompute the punctual contact position.
  • AutoSegment::updateTopology(), restore the connexity.

References Katabatic::CntInvalidated, and Katabatic::CntInvalidatedCache.

Referenced by AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), and AutoSegment::AutoSegment().

◆ updateGeometry()

void updateGeometry ( )
pure virtual

Compute the new position of the AutoContact based on the AutoSegment positions. The Session mechanism ensure that all AutoSegment are set into their final positions before calling this updator.

Implemented in AutoContactTerminal, AutoContactHTee, AutoContactTurn, and AutoContactVTee.

◆ updateTopology()

void updateTopology ( )
pure virtual

Modificate the AutoContact topology to close any gap. This could be by changing layer or creating a new dogleg on an incident AutoSegment.

Implemented in AutoContactTerminal, AutoContactHTee, AutoContactTurn, and AutoContactVTee.

◆ showTopologyError()

void showTopologyError ( const std::string &  message,
unsigned int  flags = 0 
)

Comprensive display of the topology of the AutoContact to ease the debug work. Prepend with the error message message. Do no throw an error.

References AutoSegment::isGlobal().

Referenced by AutoContactTerminal::updateGeometry(), AutoContactVTee::updateTopology(), AutoContactTurn::updateTopology(), AutoContactHTee::updateTopology(), and AutoContactTerminal::updateTopology().

◆ checkTopology()

void checkTopology ( )
virtual

Check for topology correctness (no gaps), display an error message if needed.

◆ setGCell()

void setGCell ( GCell gcell)

◆ setCBXMin()

void setCBXMin ( DbU::Unit  xMin)
inline

Set the lower left X coordinate of the constraint box.

Remark: It cannot go outside the GCell bounding box.

References GCell::getX().

◆ setCBXMax()

void setCBXMax ( DbU::Unit  xMax)
inline

Set the upper right X coordinate of the constraint box.

Remark: It cannot go outside the GCell bounding box.

References GCell::getX(), and GCell::getXMax().

◆ setCBYMin()

void setCBYMin ( DbU::Unit  yMin)
inline

Set the lower left Y coordinate of the constraint box.

Remark: It cannot go outside the GCell bounding box.

References GCell::getY().

◆ setCBYMax()

void setCBYMax ( DbU::Unit  yMax)
inline

Set the upper right Y coordinate of the constraint box.

Remark: It cannot go outside the GCell bounding box.

References GCell::getY(), and GCell::getYMax().

◆ setConstraintBox()

void setConstraintBox ( const Box box)

Set the constraint box.

Remark: It cannot go outside the GCell bounding box.

References Box::getXMax(), Box::getXMin(), Box::getYMax(), and Box::getYMin().

◆ restrictConstraintBox()

bool restrictConstraintBox ( DbU::Unit  min,
DbU::Unit  max,
unsigned int  flags = KbWarnOnError 
)
Parameters
minThe minimum of the restriction interval.
maxThe maximum of the restriction interval.
flagsGives the direction of the restriction.
Returns
true if the restriction was actually applied.

Restrict the current constraint box but check if the restriction will not lead to an empty interval, in that case, do nothing and return false.

References Katabatic::KbHorizontal, Katabatic::KbVertical, Katabatic::KbWarnOnError, and toLambda().

◆ migrateConstraintBox()

void migrateConstraintBox ( AutoContact other)

Transfer the user constraint box from other to the current object this. The constraints of other are restored to their native values. The two contacts must belong to the same GCell for this method to take effect.

References AutoContact::getConstraintBox().

Referenced by AutoHorizontal::_makeDogleg(), and AutoVertical::_makeDogleg().

◆ _getTopology()

void _getTopology ( Contact support,
Component *&  anchor,
Horizontal **&  horizontals,
Vertical **&  verticals,
size_t  size 
)
staticprotected
Parameters
anchorThe anchor, if any.
hsThe Hurricane::Horizontal anchored.
vsThe Hurricane::Vertical anchored.
szThe size of boths hs & vs table passed as arguments.

Fill anchor , hs and vs with the components anchored on this AutoContact.

References Contact::getAnchor(), and Component::getSlaveComponents().


The documentation for this class was generated from the following files:


Generated by doxygen 1.8.14 on Thu Nov 12 2020 Return to top of page
Katabatic - Routing Toolbox Copyright © 2008-2020 Sorbonne Universite. All rights reserved