TrackElement(3)

NAME
TrackElement - Abstract Class for all Elements inserted inside a Track.

SYNOPSIS

Inherited by TrackFixedSegment, and TrackSegment.

  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 *)

Detailed Description

Abstract Class for all Elements inserted inside a Track.

TrackElement Abstract

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.

Member Function Documentation

  SegmentOverlapCostCB * setOverlapCostCB (SegmentOverlapCostCB * cb) [static]

Parameters:
    cb the new overlap cost callback.

Returns:
    the previous overlap cost callback.

sets the overlap callback.

Referenced by NegociateWindow::run().

  bool isFixed () const [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().

  bool isHorizontal () const [pure virtual]
See also: Katabatic::AutoSegment::isHorizontal().

Implemented in TrackSegment, and TrackFixedSegment.

Referenced by SegmentFsm::conflictSolveByHistory(), and Manipulator::makeDogleg().

  bool isVertical () const [pure virtual]
See also: Katabatic::AutoSegment::isVertical().

Implemented in TrackSegment, and TrackFixedSegment.

  bool isLocal () const [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().

  bool isGlobal () const [virtual]
See also: Katabatic::AutoSegment::isGlobal().

Reimplemented in TrackSegment.

Referenced by SegmentFsm::conflictSolveByPlaceds(), Manipulator::insertInTrack(), Manipulator::relax(), Manipulator::repackPerpandiculars(), and SegmentFsm::SegmentFsm().

  bool isBipoint () const [virtual]
See also: Katabatic::AutoSegment::isBipoint().

Reimplemented in TrackSegment.

Referenced by SegmentFsm::desaturate().

  bool isTerminal () const [virtual]
See also: Katabatic::AutoSegment::isTerminal().

Reimplemented in TrackSegment.

Referenced by Manipulator::makeDogleg(), and Manipulator::relax().

  bool isStrap () const [virtual]
See also: Katabatic::AutoSegment::isStrap().

Reimplemented in TrackSegment.

Referenced by Manipulator::insertInTrack(), Manipulator::pivotDown(), Manipulator::pivotUp(), SegmentFsm::SegmentFsm(), and SegmentFsm::slackenTopology().

  bool isSlackened () const [virtual]
See also: Katabatic::AutoSegment::isSlackened().

Reimplemented in TrackSegment.

  bool isDogleg () const [virtual]
See also: Katabatic::isDogleg().

Reimplemented in TrackSegment.

  bool isCreated () const [inline]
See also: Katabatic::AutoSegment::isCreated().

  bool isInvalidated () const [inline]
Returns: true if the segment is invalidated (may be different from the supporting AutoSegment status).

Referenced by SegmentObserver::notify().

  bool isBlockage () const [inline]
true if the element is a blockage (obstacle).

Referenced by SegmentFsm::conflictSolveByPlaceds(), NegociateWindow::createTrackSegment(), Manipulator::insertInTrack(), and Manipulator::isCaged().

  bool isLocked () const [inline]
true if the element is part of a net, but must not be moved by the router, whatever the reason.

  bool isRouted () const [inline]
true if the router has placed it.

Referenced by TrackSegment::canDogleg().

  bool hasSourceDogleg () const [inline]
This method purpose has not been reviewed yet.

Referenced by TrackSegment::canDogleg(), TrackSegment::getSourceDogleg(), and TrackSegment::getTargetDogleg().

  bool hasTargetDogleg () const [inline]
This method purpose has not been reviewed yet.

Referenced by TrackSegment::canDogleg().

  bool canRipple () const [inline]
This method purpose has not been reviewed yet.

Referenced by Manipulator::ripple().

  bool canDogleg () [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().

  bool canDogleg (Interval) [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.

  bool canDogleg (Katabatic::GCell * doglegGCell, unsigned int flags = 0) [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.

  unsigned long getId () const [virtual]

Returns:
    The Id of the supporting AutoSegment, if there is any. Zero otherwise.

Reimplemented in TrackSegment, and TrackFixedSegment.

Referenced by RoutingEvent::process().

  unsigned int getDirection () const [pure virtual]

Returns:
    The direction of the supporting element (should match the preferred direction of the Track).

Implemented in TrackSegment, and TrackFixedSegment.

Referenced by TrackElement::getBoundingBox(), TrackSegment::getSourceDogleg(), TrackSegment::getTargetDogleg(), Manipulator::makeDogleg(), Manipulator::minimize(), Manipulator::relax(), and Manipulator::ripple().

  Net * getNet () const [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().

  const Layer * getLayer () const [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().

  Track * getTrack () const [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().

  size_t getIndex () const [inline]
Returns: The index of the element inside the Track's vector.

Remark: If the element is not inserted in a Track, it is set to
    Track::npos, and obviously must not be used.

Referenced by TrackSegment::swapTrack().

  unsigned long getFreedomDegree () const [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().

  float getMaxUnderDensity (unsigned int flags = 0) const [virtual]
Returns: The maximum density of all the GCells under this element.

Reimplemented in TrackSegment.

  Box getBoundingBox () const [inline]
Returns: The box that this element uses in the Track.

  TrackElement * getNext () const [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().

  TrackElement * getPrevious () const [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().

  DbU::Unit getAxis () const [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().

  DbU::Unit getSourceU () const [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().

  DbU::Unit getTargetU () const [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().

  DbU::Unit getLength () const [inline]
Returns: The length of the interval used by the element.

Referenced by NegociateWindow::computeWirelength(), Manipulator::makeDogleg(), Manipulator::moveUp(), and RoutingEvent::revalidate().

  Interval getCanonicalInterval () const [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().

  Interval getFreeInterval () const [virtual]
Returns: The greatest free interval enclosing this element.

Reimplemented in TrackSegment, and TrackFixedSegment.

  Interval getSourceConstraints () const [virtual]
See also: Katabatic::AutoSegment::getSourceConstraints().

Reimplemented in TrackSegment.

  Interval getTargetConstraints () const [virtual]
See also: Katabatic::AutoSegment::getTargetConstraints().

Reimplemented in TrackSegment.

  DataNegociate * getDataNegociate (unsigned int flags = KtDataSelf) const [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().

  TrackElement * getCanonical (Interval & i) [virtual]
Inner working still unclear to myself.

Reimplemented in TrackSegment.

Referenced by NegociateWindow::createTrackSegment(), and DataNegociate::update().

  size_t getGCells (Katabatic::GCellVector & gcells) const [virtual]
Returns: The table of Katabatic::GCell underneath the element whole span.

Reimplemented in TrackSegment.

Referenced by Manipulator::makeDogleg(), and Manipulator::relax().

  TrackElement * getParent () const [virtual]
Returns: The TrackElement from which the dogleg has been created, if any.

Reimplemented in TrackSegment.

Referenced by RoutingEvent::setAxisHintFromParent().

  unsigned int getDoglegLevel () const [virtual]
Returns: The deepness of the dogleg.

Reimplemented in TrackSegment.

  TrackElement * getSourceDogleg () [virtual]
Returns: The source part of the segment from which the dogleg has been created.

Reimplemented in TrackSegment.

Referenced by Manipulator::relax().

  TrackElement * getTargetDogleg () [virtual]
Returns: The target part of the segment from which the dogleg has been created.

Reimplemented in TrackSegment.

Referenced by Manipulator::relax().

  TrackElements getPerpandiculars () [virtual]
Returns: The collection of all element perpandiculars to this one.

Reimplemented in TrackSegment.

Referenced by Manipulator::forceToTrack(), and Manipulator::insertInTrack().

  void setFlags (unsigned int flags) [inline]
Set to true flags in the element state array.

Referenced by TrackSegment::detach(), TrackSegment::invalidate(), and Manipulator::relax().

  void unsetFlags (unsigned int flags) [inline]
Reset to false flags in the element state array.

Referenced by TrackSegment::revalidate().

  void setTrack (Track * track) [virtual]
Insert the element into track, also used as an insertion marker.

Reimplemented in TrackSegment.

Referenced by Track::insert(), and TrackSegment::setTrack().

  void setIndex (size_t index) [inline]
Cache the element's index in the Track internal vector.

Referenced by TrackSegment::detach(), and TrackSegment::swapTrack().

  void updateFreedomDegree () [virtual]
Update, from the element characteristics, it's degree of freedom.

Reimplemented in TrackSegment.

  void setDoglegLevel (unsigned int level) [virtual]
Sets the level of dogleg of the element.

Reimplemented in TrackSegment.

  void swapTrack (TrackElement * other) [virtual]
Swap the tracks of this and other.

Reimplemented in TrackSegment.

  void reschedule (unsigned int level) [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().

  void detach () [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.

  void invalidate () [virtual]
See also: AutoSegment::invalidate().

Reimplemented in TrackSegment.

Referenced by NegociateWindow::createTrackSegment(), and SegmentObserver::notify().

  void revalidate () [virtual]
Actualize the TrackElement characteristics from the supporting elements (set of AutoSegment).

Must be completed with the event management

Reimplemented in TrackSegment.

  void incOverlapCost (Net * net, TrackCost & cost) const [virtual]
See also: Compute the cost of overlap between this segment and the interval specified in cost. Mainly calls the relevant callback.

  void setAxis (DbU::Unit, unsigned int flags = Katabatic::SegAxisSet) [virtual]
Sets the axis of the TrackElement.

Reimplemented in TrackSegment.

Referenced by NegociateWindow::createTrackSegment(), SegmentAction::doAction(), Track::insert(), TrackSegment::makeDogleg(), and Manipulator::relax().

  TrackElement * makeDogleg () [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().

  TrackElement * makeDogleg (Katabatic::GCell * gcell) [inline]
See also: AutoSegment::makeDogleg(), Dogleg management.

Post-processing done by TrackSegment::_postDoglegs().

  TrackElement * makeDogleg (Interval interval, unsigned int & flags) [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.

  bool _check () const [virtual]
Check the coherency of the element. For a TrackSegment:

•   The supporting AutoSegment the canonical one of the set.

•   The cached min & max values are identical to the computed ones.

Returns: true on success.

Reimplemented in TrackSegment.

Author

Generated automatically by Doxygen for Kite - Detailed Router from the source code.