Derived \fBKatabatic::AutoSegment\fP for the router\&.
Fig 1: TrackSegment Context We create one \fBTrackSegment\fP per aligned \fBKatabatic::AutoSegment\fP set, the \fBTrackSegment\fP is associated to the canonical one of the set\&.
.PP
To provide some speedup, the full extention of the aligned segment set is computed once and stored in the \fBTrackSegment\fP itself\&. The drawback beeing that whenever one segment from the aligned set has it's extention modified, the full extention must be recomputed\&.
.SH"Lazy Revalidate"
.PP
When the \fBTrackSegment::revalidate()\fP method is called, it only update the cached size of the segment (from the AutoSegment set of aligneds) and the track into which it may be inserted\&.
.PP
The associated \fBDataNegociate\fP and \fBRoutingEvent\fP are \fBnot\fP updated\&.
.IP"\(bu"2
The \fBRoutingEvent\fP will be updated when it's key is updated, typically during a requeueing operation \fBand\fP in the \fBSegmentFsm\fP constructor\&. This should be optimized in the future\&.
.IP"\(bu"2
The \fBDataNegociate\fP is updated \fIonly\fP in the \fBSegmentFsm\fP constructor\&. This is the most costly of the two updates as it perform a perpandicular & parallel connexity exploration\&.
.PP
.SH"Dogleg Management"
.PP
The basic \fBAutoSegment::canDogleg()\fP method is declined in three more dedicated methods in this class:
.IP"\(bu"2
\fBTrackSegment::canDogleg()\fP, for locals only, check if a break is possible, never break a segment more than once (to avoid fragmentation)\&.
.IP"\(bu"2
\fBTrackSegment::canDogleg(Katabatic::GCell*,unsigned int flags)\fP for globals, check that the segment is breakable in the desired GCell\&. Never break twice in the first/last GCell (fragmentation limitation), but may \fIreuse\fP an already existing dogleg\&.
.IP"\(bu"2
\fBTrackSegment::canDogleg(Interval)\fP, for locals only, direct proxy for the AutoSegment method\&. Never allow more than one break\&.
.PP
.PP
\fBRelationship between AutoSegment and \fBTrackSegment\fP\fP
.PP
Figure 2 below, shows an example of dogleg creation:
.IP"\(bu"2
At the Katabatic level, AutoSegment \fCid:12\fP is broken\&. Thus the creation of AutoSegments \fCid:20\fP and \fCid:21\fP\&. The orignal \fBTrackSegment\fP (canonical AutoSegment \fCid:10\fP) remains on the right side (target) of the break\&.
.IP"\(bu"2
But, because the canonical of the former aligned AutoSegment set \fC\fP(10,11,12,13,14) was on the \fIright\fP side of the break, the new parallel \fBTrackSegment\fP will be created on the \fCleft\fP side, associated to the newly promoted canonical AutoSegment \fCid:12\fP\&.
.PP
.PP
Fig 2: Dogleg Management The \fBTrackSegment::_postDoglegs()\fP method called by all flavors of \fBTrackSegment::makeDogleg()\fP methods is responsible for creating new TrackSegments for the new doglegs (there may be more than one), it also update the dogleg level and source/target dogleg flags\&.
.PP
\fBThis section is not finished\&.\fP I need to review the parent and doglevel numbering management\&. There seems to be a risk of infinite fragmentation as the numbering of the original segment is not increased, we should create a \fIbreak\fP counter separate from deepness\&.
.SH"Global, Weak Global and Local Segments"
.PP
There's a slight semantic change between Katabatic and \fBKite\fP about what is local and what is local\&. This is due to how we consider the intermediate status of \fIWeakGlobal\fP\&.
.PP
A \fCWeakGlobal\fP segment is a local segment which is aligned with a global (though a VTee or an HTee contact)\&.
.PP
In Katabatic a local segment is one that is not \fCGlobal\fP, a local segment can be both \fCLocal\fP and \fCWeakGlobal\fP\&.
.PP
In \fBKite\fP a local segment is one that is neither \fCGlobal\fP or \fCWeakGlobal\fP\&. The \fCWeakGlobal\fP sides with \fCGlobal\fP unlike in Katabatic\&.
\fBSee also:\fP\fBAutoSegment::canDogleg()\fP\&. At \fBKite\fP level, this variant of the method will apply only on local segments and the segment must not already have a source or target dogleg\&.
\fBSee also:\fP\fBAutoSegment::canDogleg()\fP\&. At \fBKite\fP level, this variant of the method will apply only on local segments and the segment must not already have a source or target dogleg\&.
\fBSee also:\fP\fBAutoSegment::canDogleg()\fP\&. At kite level, this variant of the method is mainly targeted to global segment\&. For local segment it behave like \fBTrackElement::canDogleg(Interval)\fP\&. For global segment, make the break in the requested GCell \fCdoglegGCell\fP\&. If it's in the first or last GCell and there is already a dogleg, allow to reuse it if \fCflags\fP contains \fBKite::KtAllowDoglegReuse\fP\&.
.PP
Reimplemented from \fBTrackElement\fP\&.
.SS"float getMaxUnderDensity (unsigned int flags) const\fC [virtual]\fP"
\fBReturns:\fP The maximum density of all the GCells under this element\&.
.PP
Reimplemented from \fBTrackElement\fP\&.
.SS"unsigned long getId () const\fC [virtual]\fP"
.PP
\fBReturns:\fP
.RS4
The \fCId\fP of the supporting AutoSegment, if there is any\&. \fIZero\fP otherwise\&.
.RE
.PP
.PP
Reimplemented from \fBTrackElement\fP\&.
.PP
Referenced by TrackSegment::detach()\&.
.SS"unsigned int getDirection () const\fC [virtual]\fP"
.PP
\fBReturns:\fP
.RS4
The direction of the supporting element (should match the preferred direction of the \fBTrack\fP)\&.
.RE
.PP
.PP
Implements \fBTrackElement\fP\&.
.PP
Referenced by TrackSegment::getSourceDogleg(), and TrackSegment::getTargetDogleg()\&.
.SS"\fBNet\fP * getNet () const\fC [virtual]\fP"
\fBReturns:\fP The Net associated to the element (may be \fCNULL\fP)\&.
.PP
Implements \fBTrackElement\fP\&.
.PP
Referenced by TrackSegment::getFreeInterval(), TrackSegment::getNext(), and TrackSegment::getPrevious()\&.
Remove the link from the \fBTrackElement\fP to it's owning \fBTrack\fP, marking it for removal\&. The removal from the \fBTrack\fP's vector is managed by the \fBTrack\fP itself during the \fBSession\fP revalidation stage\&.
.PP
Reimplemented from \fBTrackElement\fP\&.
.SS"void invalidate ()\fC [virtual]\fP"
\fBSee also:\fP\fBAutoSegment::invalidate()\fP\&.
.PP
Reimplemented from \fBTrackElement\fP\&.
.PP
Referenced by TrackSegment::create(), and TrackSegment::setAxis()\&.
.SS"void revalidate ()\fC [virtual]\fP"
Actualize the \fBTrackSegment\fP characteristics from the supporting elements (set of AutoSegment)\&.
.PP
This method do not update the \fBDataNegociate\fP or the \fBRoutingEvent\fP\&. This is a lazy update delayed until the constructor of \fBSegmentFsm\fP is called\&. (see \fBLazy Revalidate\fP)\&.
.PP
Reimplemented from \fBTrackElement\fP\&.
.SS"void setAxis (\fBDbU::Unit\fP, unsigned int flags)\fC [virtual]\fP"
Create a dogleg on the source end of the \fBTrackSegment\fP\&. Put the dogleg axis on the source \fBTo be further reviewed\fP\&.
.PP
\fBSee also:\fP\fBDogleg management\fP\&.
.PP
Post-processing done by \fBTrackSegment::_postDoglegs()\fP\&.
.PP
Reimplemented from \fBTrackElement\fP\&.
.SS"\fBTrackElement\fP * makeDogleg (\fBInterval\fP interval, unsigned int & flags)\fC [virtual]\fP"
\fBSee also:\fP\fBAutoSegment::makeDogleg()\fP, \fBDogleg management\fP, the return flags from this method are returned through the \fCflags\fP variable\&.
.PP
Post-processing done by \fBTrackSegment::_postDoglegs()\fP\&.
Post-process to be called inside the various dogleg creation or slacken methods\&. Iterate through the newly created AutoSegments to create, for the \fIperpandicular\fP and the \fInew parallel\fP associateds TrackSegments\&. Also sets the dogleg levels and flags of the newly created elements\&.
.PP
The session dogleg reset is called at the end of this method\&. The \fCperpandicular\fP and \fCparallel\fP references to pointers contains the newly created segments for the \fBlast\fP dogleg\&. If more than one was created, you cannot access them (the need has not arised yet)\&.
.PP
Reimplemented from \fBTrackElement\fP\&.
.PP
Referenced by TrackSegment::makeDogleg()\&.
.SS"bool _check () const\fC [virtual]\fP"
Check the coherency of the element\&. For a \fBTrackSegment\fP:
.IP"\(bu"2
The supporting AutoSegment the canonical one of the set\&.
.IP"\(bu"2
The cached \fCmin\fP & \fCmax\fP values are identical to the computed ones\&.
.PP
.PP
\fBReturns:\fP\fBtrue\fP on success\&.
.PP
Reimplemented from \fBTrackElement\fP\&.
.SH"Author"
.PP
Generated automatically by Doxygen for Kite - Detailed Router from the source code\&.