Abstract Class for all Elements inserted inside a Track. More...
Public Member Functions | |
virtual bool | isFixed () const |
virtual bool | isHorizontal () const =0 |
virtual bool | isVertical () const =0 |
virtual bool | isLocal () const |
virtual bool | isGlobal () const |
virtual bool | isBipoint () const |
virtual bool | isTerminal () const |
virtual bool | isStrap () const |
virtual bool | isSlackened () const |
virtual bool | isDogleg () const |
bool | isCreated () const |
bool | isInvalidated () const |
bool | isBlockage () const |
bool | isLocked () const |
bool | isRouted () const |
bool | hasSourceDogleg () const |
bool | hasTargetDogleg () const |
bool | canRipple () const |
virtual bool | canDogleg () |
virtual bool | canDogleg (Interval) |
virtual bool | canDogleg (Katabatic::GCell *, unsigned int flags=0) |
virtual unsigned long | getId () const |
virtual unsigned int | getDirection () const =0 |
virtual Net * | getNet () const =0 |
virtual const Layer * | getLayer () const =0 |
Track * | getTrack () const |
size_t | getIndex () const |
virtual unsigned long | getFreedomDegree () const |
virtual float | getMaxUnderDensity (unsigned int flags=0) const |
Box | getBoundingBox () const |
virtual TrackElement * | getNext () const |
virtual TrackElement * | getPrevious () const |
virtual DbU::Unit | getAxis () const =0 |
DbU::Unit | getSourceU () const |
DbU::Unit | getTargetU () const |
DbU::Unit | getLength () const |
Interval | getCanonicalInterval () const |
virtual Interval | getFreeInterval () const |
virtual Interval | getSourceConstraints () const |
virtual Interval | getTargetConstraints () const |
virtual DataNegociate * | getDataNegociate (unsigned int flags=KtDataSelf) const |
virtual TrackElement * | getCanonical (Interval &) |
virtual size_t | getGCells (Katabatic::GCellVector &) const |
virtual TrackElement * | getParent () const |
virtual unsigned int | getDoglegLevel () const |
virtual TrackElement * | getSourceDogleg () |
virtual TrackElement * | getTargetDogleg () |
virtual TrackElements | getPerpandiculars () |
void | setFlags (unsigned int) |
void | unsetFlags (unsigned int) |
virtual void | setTrack (Track *) |
void | setIndex (size_t) |
virtual void | updateFreedomDegree () |
virtual void | setDoglegLevel (unsigned int) |
virtual void | swapTrack (TrackElement *) |
virtual void | reschedule (unsigned int level) |
virtual void | detach () |
virtual void | invalidate () |
virtual void | revalidate () |
virtual void | incOverlapCost (Net *, TrackCost &) const |
virtual void | setAxis (DbU::Unit, unsigned int flags=Katabatic::SegAxisSet) |
virtual TrackElement * | makeDogleg () |
bool | makeDogleg (Katabatic::GCell *) |
virtual TrackElement * | makeDogleg (Interval, unsigned int &flags) |
virtual bool | _check () const |
Static Public Member Functions | |
static SegmentOverlapCostCB * | setOverlapCostCB (SegmentOverlapCostCB *) |
Abstract Class for all Elements inserted inside a Track.
The TrackElement class is abstract and is used as base class for any element that can be inserted in a Track. It represent the footprint of that element inside the Track (an interval). Additionnaly it keep a pointer to the Track and it's index inside it (Track is implemented with a vector<>
).
To avoid some explicit dynamic cast later, it provides a default implementation for almost all the methods that will be present in all the derived classes. All default methods return false
, NULL
or 0
(zero) or whatever is appropriated to tell it is not meaningful.
Design Note
TrackElement has been designed to serve as a base class for TrackSegment and TrackMarker. But, in the end, those two classes have been put in separated vectors inside the Track, thus rendering this design choice less pertinent. We keep it for now because we may introduce other object than TrackSegment inside a Track. If the need do not arise, we may merge back TrackElement and TrackSegment.
|
static |
cb | the new overlap cost callback. |
sets the overlap callback.
Referenced by NegociateWindow::run().
|
virtual |
See also: Katabatic::AutoSegment::isFixed().
Reimplemented in TrackSegment, and TrackFixedSegment.
Referenced by SegmentFsm::addAction(), SegmentFsm::conflictSolveByPlaceds(), NegociateWindow::createTrackSegment(), SegmentFsm::desaturate(), SegmentAction::doAction(), Manipulator::forceOverLocals(), Manipulator::forceToTrack(), Manipulator::insertInTrack(), Manipulator::isCaged(), Manipulator::makeDogleg(), Manipulator::minimize(), Manipulator::moveUp(), Manipulator::pivotDown(), Manipulator::pivotUp(), Manipulator::relax(), Manipulator::repackPerpandiculars(), Manipulator::ripup(), Manipulator::shrinkToTrack(), and Manipulator::slacken().
|
pure virtual |
See also: Katabatic::AutoSegment::isHorizontal().
Implemented in TrackSegment, and TrackFixedSegment.
Referenced by SegmentFsm::conflictSolveByHistory(), and Manipulator::makeDogleg().
|
pure virtual |
See also: Katabatic::AutoSegment::isVertical().
Implemented in TrackSegment, and TrackFixedSegment.
|
virtual |
See also: Katabatic::isLocal().
Reimplemented in TrackSegment.
Referenced by SegmentFsm::conflictSolveByPlaceds(), SegmentFsm::doActions(), Manipulator::insertInTrack(), Manipulator::makeDogleg(), Manipulator::moveUp(), Manipulator::pivotUp(), Manipulator::relax(), Manipulator::ripple(), Manipulator::ripupPerpandiculars(), SegmentFsm::SegmentFsm(), Manipulator::shrinkToTrack(), SegmentFsm::slackenTopology(), and SegmentFsm::solveFullBlockages().
|
virtual |
See also: Katabatic::AutoSegment::isGlobal().
Reimplemented in TrackSegment.
Referenced by SegmentFsm::conflictSolveByPlaceds(), Manipulator::insertInTrack(), Manipulator::relax(), Manipulator::repackPerpandiculars(), and SegmentFsm::SegmentFsm().
|
virtual |
See also: Katabatic::AutoSegment::isBipoint().
Reimplemented in TrackSegment.
Referenced by SegmentFsm::desaturate().
|
virtual |
See also: Katabatic::AutoSegment::isTerminal().
Reimplemented in TrackSegment.
Referenced by Manipulator::makeDogleg(), and Manipulator::relax().
|
virtual |
See also: Katabatic::AutoSegment::isStrap().
Reimplemented in TrackSegment.
Referenced by Manipulator::insertInTrack(), Manipulator::pivotDown(), Manipulator::pivotUp(), SegmentFsm::SegmentFsm(), and SegmentFsm::slackenTopology().
|
virtual |
See also: Katabatic::AutoSegment::isSlackened().
Reimplemented in TrackSegment.
|
virtual |
See also: Katabatic::isDogleg().
Reimplemented in TrackSegment.
|
inline |
See also: Katabatic::AutoSegment::isCreated().
|
inline |
Returns: true if the segment is invalidated (may be different from the supporting AutoSegment status).
Referenced by SegmentObserver::notify().
|
inline |
true if the element is a blockage (obstacle).
Referenced by SegmentFsm::conflictSolveByPlaceds(), NegociateWindow::createTrackSegment(), Manipulator::insertInTrack(), and Manipulator::isCaged().
|
inline |
true if the element is part of a net, but must not be moved by the router, whatever the reason.
|
inline |
true if the router has placed it.
Referenced by TrackSegment::canDogleg().
|
inline |
This method purpose has not been reviewed yet.
Referenced by TrackSegment::canDogleg(), TrackSegment::getSourceDogleg(), and TrackSegment::getTargetDogleg().
|
inline |
This method purpose has not been reviewed yet.
Referenced by TrackSegment::canDogleg().
|
inline |
This method purpose has not been reviewed yet.
Referenced by Manipulator::ripple().
|
virtual |
See also: AutoSegment::canDogleg(). At Kite level, this variant of the method will apply only on local segments and the segment must not already have a source or target dogleg.
Reimplemented in TrackSegment.
Referenced by SegmentFsm::conflictSolveByHistory(), Manipulator::makeDogleg(), and Manipulator::relax().
|
virtual |
See also: AutoSegment::canDogleg(). At Kite level, this variant of the method will apply only on local segments and the segment must not already have a source or target dogleg.
Reimplemented in TrackSegment.
|
virtual |
See also: AutoSegment::canDogleg(). At kite level, this variant of the method is mainly targeted to global segment. For local segment it behave like TrackElement::canDogleg(Interval). For global segment, make the break in the requested GCell doglegGCell
. If it's in the first or last GCell and there is already a dogleg, allow to reuse it if flags
contains Kite::KtAllowDoglegReuse.
Reimplemented in TrackSegment.
|
virtual |
Id
of the supporting AutoSegment, if there is any. Zero otherwise. Reimplemented in TrackSegment, and TrackFixedSegment.
Referenced by RoutingEvent::process().
|
pure virtual |
Implemented in TrackSegment, and TrackFixedSegment.
Referenced by TrackElement::getBoundingBox(), TrackSegment::getSourceDogleg(), TrackSegment::getTargetDogleg(), Manipulator::makeDogleg(), Manipulator::minimize(), Manipulator::relax(), and Manipulator::ripple().
|
pure virtual |
Returns: The Net associated to the element (may be NULL
).
Implemented in TrackSegment, and TrackFixedSegment.
Referenced by SegmentFsm::conflictSolveByHistory(), SegmentFsm::conflictSolveByPlaceds(), SegmentFsm::desaturate(), SegmentAction::doAction(), Manipulator::forceOverLocals(), Manipulator::forceToTrack(), TrackElement::getFreeInterval(), TrackElement::getNext(), Track::getOverlapCost(), TrackElement::getPrevious(), TrackElement::incOverlapCost(), Manipulator::insertInTrack(), Manipulator::makeDogleg(), Manipulator::minimize(), RoutingEvent::process(), RoutingEvent::revalidate(), Manipulator::ripple(), Manipulator::ripupPerpandiculars(), SegmentFsm::SegmentFsm(), Manipulator::shrinkToTrack(), SegmentFsm::slackenTopology(), and SegmentFsm::solveFullBlockages().
|
pure virtual |
Returns: The Layer of the element (should match the one of the Track).
Implemented in TrackSegment, and TrackFixedSegment.
Referenced by SegmentFsm::conflictSolveByHistory(), SegmentFsm::conflictSolveByPlaceds(), Track::insert(), Manipulator::relax(), RoutingEvent::revalidate(), Manipulator::ripple(), Manipulator::ripupPerpandiculars(), and SegmentFsm::SegmentFsm().
|
inline |
Returns: The Track into which the element is inserted (may be NULL
).
Referenced by RoutingEventQueue::add(), SegmentAction::doAction(), TrackFixedSegment::getAxis(), TrackFixedSegment::getDirection(), DataNegociate::getTrack(), Manipulator::isCaged(), TrackFixedSegment::isHorizontal(), TrackFixedSegment::isVertical(), Manipulator::relax(), and TrackSegment::swapTrack().
|
inline |
Returns: The index of the element inside the Track's vector.
Referenced by TrackSegment::swapTrack().
|
virtual |
Returns: The degree of freedom of the element. It is used as a priority value when sorting TrackElement (in RoutingEvent).
Returns: The degree of freedom of the element. It is used as a priority value when sorting TrackElement (in RoutingEvent).
Currently, it is the slack of the Katabatic::AutoSegment.
Reimplemented in TrackSegment.
Referenced by RoutingEvent::process().
|
virtual |
Returns: The maximum density of all the GCells under this element.
Reimplemented in TrackSegment.
|
virtual |
Returns: The next TrackElement, on the same track and of a different net. See also: Track::getNext().
Reimplemented in TrackSegment, and TrackFixedSegment.
Referenced by Manipulator::isCaged().
|
virtual |
Returns: The previous TrackElement, on the same track and of a different net. See also: Track::getPrevious().
Reimplemented in TrackSegment, and TrackFixedSegment.
Referenced by Manipulator::isCaged().
|
pure virtual |
Returns: The axis position of the element (must be the same as the Track).
Implemented in TrackSegment, and TrackFixedSegment.
Referenced by SegmentFsm::conflictSolveByHistory(), TrackElement::getBoundingBox(), Manipulator::ripple(), and Manipulator::ripupPerpandiculars().
|
inline |
Returns: The minimun of the interval used by the element (cached in an attribute).
Referenced by TrackSegment::_check(), SegmentFsm::conflictSolveByHistory(), Track::find(), TrackElement::getBoundingBox(), TrackElement::getCanonicalInterval(), TrackElement::getLength(), Manipulator::insertInTrack(), Manipulator::isCaged(), Manipulator::minimize(), and Manipulator::shrinkToTrack().
|
inline |
Returns: The maximum of the interval used by the element (cached in an attribute).
Referenced by TrackSegment::_check(), TrackElement::getBoundingBox(), TrackElement::getCanonicalInterval(), TrackElement::getLength(), Manipulator::insertInTrack(), and Manipulator::isCaged().
|
inline |
Returns: The length of the interval used by the element.
Referenced by NegociateWindow::computeWirelength(), Manipulator::makeDogleg(), Manipulator::moveUp(), and RoutingEvent::revalidate().
|
inline |
Returns: The interval span used by the element inside the Track.
Referenced by SegmentFsm::conflictSolveByHistory(), SegmentFsm::conflictSolveByPlaceds(), SegmentFsm::desaturate(), Manipulator::forceOverLocals(), Manipulator::forceToTrack(), Track::getOverlapCost(), Manipulator::insertInTrack(), Manipulator::makeDogleg(), Manipulator::minimize(), Manipulator::relax(), Manipulator::ripple(), Manipulator::ripupPerpandiculars(), Manipulator::shrinkToTrack(), and SegmentFsm::solveFullBlockages().
|
virtual |
Returns: The greatest free interval enclosing this element.
Reimplemented in TrackSegment, and TrackFixedSegment.
|
virtual |
See also: Katabatic::AutoSegment::getSourceConstraints().
Reimplemented in TrackSegment.
|
virtual |
See also: Katabatic::AutoSegment::getTargetConstraints().
Reimplemented in TrackSegment.
|
virtual |
Returns: The additional data-structure supplied by the routing algorithm.
Reimplemented in TrackSegment.
Referenced by NegociateWindow::addRoutingEvent(), SegmentFsm::desaturate(), SegmentAction::doAction(), Manipulator::forceOverLocals(), Manipulator::forceToTrack(), TrackSegment::getDataNegociate(), RoutingEvent::getState(), Manipulator::insertInTrack(), Manipulator::makeDogleg(), RoutingEvent::process(), Manipulator::relax(), Manipulator::repackPerpandiculars(), RoutingEvent::reschedule(), Manipulator::ripple(), SegmentFsm::SegmentFsm(), NegociateWindow::setGCells(), RoutingEvent::setSegment(), RoutingEvent::setState(), and SegmentFsm::slackenTopology().
|
virtual |
Inner working still unclear to myself.
Reimplemented in TrackSegment.
Referenced by NegociateWindow::createTrackSegment(), and DataNegociate::update().
|
virtual |
Returns: The table of Katabatic::GCell underneath the element whole span.
Reimplemented in TrackSegment.
Referenced by Manipulator::makeDogleg(), and Manipulator::relax().
|
virtual |
Returns: The TrackElement from which the dogleg has been created, if any.
Reimplemented in TrackSegment.
Referenced by RoutingEvent::setAxisHintFromParent().
|
virtual |
Returns: The deepness of the dogleg.
Reimplemented in TrackSegment.
|
virtual |
Returns: The source part of the segment from which the dogleg has been created.
Reimplemented in TrackSegment.
Referenced by Manipulator::relax().
|
virtual |
Returns: The target part of the segment from which the dogleg has been created.
Reimplemented in TrackSegment.
Referenced by Manipulator::relax().
|
virtual |
Returns: The collection of all element perpandiculars to this one.
Reimplemented in TrackSegment.
Referenced by Manipulator::forceToTrack(), and Manipulator::insertInTrack().
|
inline |
Set to true flags
in the element state array.
Referenced by TrackSegment::detach(), TrackSegment::invalidate(), and Manipulator::relax().
|
inline |
Reset to false flags
in the element state array.
Referenced by TrackSegment::revalidate().
|
virtual |
Insert the element into track
, also used as an insertion marker.
Reimplemented in TrackSegment.
Referenced by Track::insert(), and TrackSegment::setTrack().
|
inline |
Cache the element's index in the Track internal vector.
Referenced by TrackSegment::detach(), and TrackSegment::swapTrack().
|
virtual |
Update, from the element characteristics, it's degree of freedom.
Reimplemented in TrackSegment.
|
virtual |
Sets the level of dogleg of the element.
Reimplemented in TrackSegment.
|
virtual |
Swap the tracks of this
and other
.
Reimplemented in TrackSegment.
|
virtual |
If the TrackElement has already an event scheduled, change the level of this event, otherwise create a new event.
See also: NegotiateWindow::rescheduleEvent().
Reimplemented in TrackSegment.
Referenced by TrackSegment::_postDoglegs().
|
virtual |
Remove the link from the TrackElement to it's owning Track, marking it for removal. The removal from the Track's vector is managed by the Track itself during the Session revalidation stage.
Reimplemented in TrackSegment.
|
virtual |
See also: AutoSegment::invalidate().
Reimplemented in TrackSegment.
Referenced by NegociateWindow::createTrackSegment(), and SegmentObserver::notify().
|
virtual |
Actualize the TrackElement characteristics from the supporting elements (set of AutoSegment).
Must be completed with the event management
Reimplemented in TrackSegment.
|
virtual |
See also: Compute the cost of overlap between this segment and the interval specified in cost
. Mainly calls the relevant callback.
|
virtual |
Sets the axis of the TrackElement.
Reimplemented in TrackSegment.
Referenced by NegociateWindow::createTrackSegment(), SegmentAction::doAction(), Track::insert(), TrackSegment::makeDogleg(), and Manipulator::relax().
|
virtual |
Create a dogleg on the source end of the TrackSegment. Put the dogleg axis on the source To be further reviewed.
See also: Dogleg management.
Post-processing done by TrackSegment::_postDoglegs().
Reimplemented in TrackSegment.
Referenced by SegmentFsm::conflictSolveByHistory(), Manipulator::makeDogleg(), TrackElement::makeDogleg(), and Manipulator::relax().
|
inline |
See also: AutoSegment::makeDogleg(), Dogleg management.
Post-processing done by TrackSegment::_postDoglegs().
|
virtual |
See also: AutoSegment::makeDogleg(), Dogleg management, the return flags from this method are returned through the flags
variable.
Post-processing done by TrackSegment::_postDoglegs().
Reimplemented in TrackSegment.
|
virtual |
Check the coherency of the element. For a TrackSegment:
min
& max
values are identical to the computed ones.Returns: true on success.
Reimplemented in TrackSegment.
Generated by doxygen 1.8.14 on Thu Oct 18 2018 | Return to top of page |
Kite - Detailed Router | Copyright © 2008-2016 UPMC. All rights reserved |