# Kite - Detailed Router

Public Member Functions | Static Public Member Functions | List of all members
TrackElement Class Referenceabstract

Abstract Class for all Elements inserted inside a Track. More...

Inheritance diagram for TrackElement:
[legend]

## 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

## ◆ setOverlapCostCB()

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().

## ◆ isFixed()

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().

## ◆ isHorizontal()

bool isHorizontal | ( |  | ) | const
| pure virtual

See also: Katabatic::AutoSegment::isHorizontal().

Implemented in TrackSegment, and TrackFixedSegment.

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

## ◆ isVertical()

bool isVertical | ( |  | ) | const
| pure virtual

See also: Katabatic::AutoSegment::isVertical().

Implemented in TrackSegment, and TrackFixedSegment.

## ◆ isLocal()

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().

## ◆ isGlobal()

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().

## ◆ isBipoint()

bool isBipoint | ( |  | ) | const
| virtual

See also: Katabatic::AutoSegment::isBipoint().

Reimplemented in TrackSegment.

Referenced by SegmentFsm::desaturate().

## ◆ isTerminal()

bool isTerminal | ( |  | ) | const
| virtual

See also: Katabatic::AutoSegment::isTerminal().

Reimplemented in TrackSegment.

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

## ◆ isStrap()

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().

## ◆ isSlackened()

bool isSlackened | ( |  | ) | const
| virtual

See also: Katabatic::AutoSegment::isSlackened().

Reimplemented in TrackSegment.

## ◆ isDogleg()

bool isDogleg | ( |  | ) | const
| virtual

See also: Katabatic::isDogleg().

Reimplemented in TrackSegment.

## ◆ isCreated()

bool isCreated | ( |  | ) | const
| inline

See also: Katabatic::AutoSegment::isCreated().

## ◆ isInvalidated()

bool isInvalidated | ( |  | ) | const
| inline

Returns: true if the segment is invalidated (may be different from the supporting AutoSegment status).

Referenced by SegmentObserver::notify().

## ◆ isBlockage()

bool isBlockage | ( |  | ) | const
| inline

true if the element is a blockage (obstacle).

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

## ◆ isLocked()

bool isLocked | ( |  | ) | const
| inline

true if the element is part of a net, but must not be moved by the router, whatever the reason.

## ◆ isRouted()

bool isRouted | ( |  | ) | const
| inline

true if the router has placed it.

Referenced by TrackSegment::canDogleg().

## ◆ hasSourceDogleg()

bool hasSourceDogleg | ( |  | ) | const
| inline

This method purpose has not been reviewed yet.

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

## ◆ hasTargetDogleg()

bool hasTargetDogleg | ( |  | ) | const
| inline

This method purpose has not been reviewed yet.

Referenced by TrackSegment::canDogleg().

## ◆ canRipple()

bool canRipple | ( |  | ) | const
| inline

This method purpose has not been reviewed yet.

Referenced by Manipulator::ripple().

## ◆ canDogleg() [1/3]

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().

## ◆ canDogleg() [2/3]

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.

## ◆ canDogleg() [3/3]

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.

## ◆ getId()

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().

## ◆ getDirection()

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().

## ◆ getNet()

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().

## ◆ getLayer()

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().

## ◆ getTrack()

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().

## ◆ getIndex()

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().

## ◆ getFreedomDegree()

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().

## ◆ getMaxUnderDensity()

float getMaxUnderDensity | ( | unsigned int | flags = `0` | ) | const
| virtual

Returns: The maximum density of all the GCells under this element.

Reimplemented in TrackSegment.

## ◆ getBoundingBox()

Box getBoundingBox | ( |  | ) | const
| inline

Returns: The box that this element uses in the Track.

## ◆ getNext()

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().

## ◆ getPrevious()

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().

## ◆ getAxis()

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().

## ◆ getSourceU()

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().

## ◆ getTargetU()

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().

## ◆ getLength()

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().

## ◆ getCanonicalInterval()

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().

## ◆ getFreeInterval()

Interval getFreeInterval | ( |  | ) | const
| virtual

Returns: The greatest free interval enclosing this element.

Reimplemented in TrackSegment, and TrackFixedSegment.

## ◆ getSourceConstraints()

Interval getSourceConstraints | ( |  | ) | const
| virtual

See also: Katabatic::AutoSegment::getSourceConstraints().

Reimplemented in TrackSegment.

## ◆ getTargetConstraints()

Interval getTargetConstraints | ( |  | ) | const
| virtual

See also: Katabatic::AutoSegment::getTargetConstraints().

Reimplemented in TrackSegment.

## ◆ getDataNegociate()

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().

## ◆ getCanonical()

TrackElement * getCanonical | ( | Interval & | i | ) |
| virtual

Inner working still unclear to myself.

Reimplemented in TrackSegment.

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

## ◆ getGCells()

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().

## ◆ getParent()

TrackElement * getParent | ( |  | ) | const
| virtual

Returns: The TrackElement from which the dogleg has been created, if any.

Reimplemented in TrackSegment.

Referenced by RoutingEvent::setAxisHintFromParent().

## ◆ getDoglegLevel()

unsigned int getDoglegLevel | ( |  | ) | const
| virtual

Returns: The deepness of the dogleg.

Reimplemented in TrackSegment.

## ◆ getSourceDogleg()

TrackElement * getSourceDogleg | ( |  | ) |
| virtual

Returns: The source part of the segment from which the dogleg has been created.

Reimplemented in TrackSegment.

Referenced by Manipulator::relax().

## ◆ getTargetDogleg()

TrackElement * getTargetDogleg | ( |  | ) |
| virtual

Returns: The target part of the segment from which the dogleg has been created.

Reimplemented in TrackSegment.

Referenced by Manipulator::relax().

## ◆ getPerpandiculars()

TrackElements getPerpandiculars | ( |  | ) |
| virtual

Returns: The collection of all element perpandiculars to this one.

Reimplemented in TrackSegment.

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

## ◆ setFlags()

void setFlags | ( | unsigned int | flags | ) |
| inline

Set to true `flags` in the element state array.

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

## ◆ unsetFlags()

void unsetFlags | ( | unsigned int | flags | ) |
| inline

Reset to false `flags` in the element state array.

Referenced by TrackSegment::revalidate().

## ◆ setTrack()

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().

## ◆ setIndex()

void setIndex | ( | size_t | index | ) |
| inline

Cache the element's index in the Track internal vector.

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

## ◆ updateFreedomDegree()

void updateFreedomDegree | ( |  | ) |
| virtual

Update, from the element characteristics, it's degree of freedom.

Reimplemented in TrackSegment.

## ◆ setDoglegLevel()

void setDoglegLevel | ( | unsigned int | level | ) |
| virtual

Sets the level of dogleg of the element.

Reimplemented in TrackSegment.

## ◆ swapTrack()

void swapTrack | ( | TrackElement * | other | ) |
| virtual

Swap the tracks of `this` and `other`.

Reimplemented in TrackSegment.

## ◆ reschedule()

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().

## ◆ detach()

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.

## ◆ invalidate()

void invalidate | ( |  | ) |
| virtual

See also: AutoSegment::invalidate().

Reimplemented in TrackSegment.

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

## ◆ revalidate()

void revalidate | ( |  | ) |
| virtual

Actualize the TrackElement characteristics from the supporting elements (set of AutoSegment).

Must be completed with the event management

Reimplemented in TrackSegment.

## ◆ incOverlapCost()

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.

## ◆ setAxis()

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().

## ◆ makeDogleg() [1/3]

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().

## ◆ makeDogleg() [2/3]

TrackElement * makeDogleg | ( | Katabatic::GCell * | gcell | ) |
| inline

See also: AutoSegment::makeDogleg(), Dogleg management.

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

## ◆ makeDogleg() [3/3]

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.

## ◆ _check()

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.

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

- TrackElement.h
- TrackElement.cpp
- TrackElement.dox
- TrackSegment.dox

Generated by doxygen 1.8.14 on Mon Feb 3 2020 | Return to top of page

Kite - Detailed Router | Copyright © 2008-2016 UPMC. All rights reserved