{\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033 {\fonttbl {\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} {\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} {\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;} } {\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;} {\stylesheet {\widctlpar\adjustright \fs20\cgrid \snext0 Normal;} {\paperw11900\paperh16840\margl1800\margr1800\margt1440\margb1440\gutter0\ltrsect} {\s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \sbasedon0 \snext0 heading 1;} {\s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \sbasedon0 \snext0 heading 2;} {\s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid \sbasedon0 \snext0 heading 3;} {\s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 4;}{\*\cs10 \additive Default Paragraph Font;} {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext0 heading 5;}{\*\cs10 \additive Default Paragraph Font;} {\s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid \sbasedon0 \snext15 Title;} {\s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \sbasedon0 \snext16 Subtitle;} {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \sbasedon0 \snext17 BodyText;} {\s18\widctlpar\fs22\cgrid \sbasedon0 \snext18 DenseText;} {\s28\widctlpar\tqc\tx4320\tqr\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext28 header;} {\s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid \sbasedon0 \snext29 footer;} {\s30\li360\sa60\sb120\keepn\widctlpar\adjustright \b\f1\fs20\cgrid \sbasedon0 \snext30 GroupHeader;} {\s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext41 Code Example 0;} {\s41\li360\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext42 Code Example 1;} {\s42\li720\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext43 Code Example 2;} {\s43\li1080\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext44 Code Example 3;} {\s44\li1440\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext45 Code Example 4;} {\s45\li1800\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext46 Code Example 5;} {\s46\li2160\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext47 Code Example 6;} {\s47\li2520\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext48 Code Example 7;} {\s48\li2880\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 8;} {\s49\li3240\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid \sbasedon0 \snext49 Code Example 9;} {\s50\li0\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext51 List Continue 0;} {\s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext52 List Continue 1;} {\s52\li720\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext53 List Continue 2;} {\s53\li1080\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext54 List Continue 3;} {\s54\li1440\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext55 List Continue 4;} {\s55\li1800\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext56 List Continue 5;} {\s56\li2160\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext57 List Continue 6;} {\s57\li2520\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext58 List Continue 7;} {\s58\li2880\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext59 List Continue 8;} {\s59\li3240\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid \sbasedon0 \snext59 List Continue 9;} {\s60\li0\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext61 DescContinue 0;} {\s61\li360\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext62 DescContinue 1;} {\s62\li720\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext63 DescContinue 2;} {\s63\li1080\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext64 DescContinue 3;} {\s64\li1440\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext65 DescContinue 4;} {\s65\li1800\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext66 DescContinue 5;} {\s66\li2160\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext67 DescContinue 6;} {\s67\li2520\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext68 DescContinue 7;} {\s68\li2880\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext69 DescContinue 8;} {\s69\li3240\widctlpar\ql\adjustright \fs20\cgrid \sbasedon0 \snext69 DescContinue 9;} {\s70\li0\sa30\sb30\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext81 LatexTOC 0;} {\s71\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext82 LatexTOC 1;} {\s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext83 LatexTOC 2;} {\s73\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext84 LatexTOC 3;} {\s74\li1440\sa18\sb18\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext85 LatexTOC 4;} {\s75\li1800\sa15\sb15\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext86 LatexTOC 5;} {\s76\li2160\sa12\sb12\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext87 LatexTOC 6;} {\s77\li2520\sa9\sb9\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext88 LatexTOC 7;} {\s78\li2880\sa6\sb6\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext89 LatexTOC 8;} {\s79\li3240\sa3\sb3\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid \sbasedon0 \snext89 LatexTOC 9;} {\s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid \sbasedon0 \snext81 \sautoupd List Bullet 0;} {\s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid \sbasedon0 \snext82 \sautoupd List Bullet 1;} {\s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid \sbasedon0 \snext83 \sautoupd List Bullet 2;} {\s83\fi-360\li1440\widctlpar\jclisttab\tx1440{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pndec }\ls4\adjustright \fs20\cgrid \sbasedon0 \snext84 \sautoupd List Bullet 3;} {\s84\fi-360\li1800\widctlpar\jclisttab\tx1800{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pndec }\ls5\adjustright \fs20\cgrid \sbasedon0 \snext85 \sautoupd List Bullet 4;} {\s85\fi-360\li2160\widctlpar\jclisttab\tx2160{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pndec }\ls6\adjustright \fs20\cgrid \sbasedon0 \snext86 \sautoupd List Bullet 5;} {\s86\fi-360\li2520\widctlpar\jclisttab\tx2520{\*\pn \pnlvlbody\ilvl0\ls7\pnrnot0\pndec }\ls7\adjustright \fs20\cgrid \sbasedon0 \snext87 \sautoupd List Bullet 6;} {\s87\fi-360\li2880\widctlpar\jclisttab\tx2880{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pndec }\ls8\adjustright \fs20\cgrid \sbasedon0 \snext88 \sautoupd List Bullet 7;} {\s88\fi-360\li3240\widctlpar\jclisttab\tx3240{\*\pn \pnlvlbody\ilvl0\ls9\pnrnot0\pndec }\ls9\adjustright \fs20\cgrid \sbasedon0 \snext89 \sautoupd List Bullet 8;} {\s89\fi-360\li3600\widctlpar\jclisttab\tx3600{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pndec }\ls10\adjustright \fs20\cgrid \sbasedon0 \snext89 \sautoupd List Bullet 9;} {\s90\fi-360\li360\widctlpar\fs20\cgrid \sbasedon0 \snext91 \sautoupd List Enum 0;} {\s91\fi-360\li720\widctlpar\fs20\cgrid \sbasedon0 \snext92 \sautoupd List Enum 1;} {\s92\fi-360\li1080\widctlpar\fs20\cgrid \sbasedon0 \snext93 \sautoupd List Enum 2;} {\s93\fi-360\li1440\widctlpar\fs20\cgrid \sbasedon0 \snext94 \sautoupd List Enum 3;} {\s94\fi-360\li1800\widctlpar\fs20\cgrid \sbasedon0 \snext95 \sautoupd List Enum 4;} {\s95\fi-360\li2160\widctlpar\fs20\cgrid \sbasedon0 \snext96 \sautoupd List Enum 5;} {\s96\fi-360\li2520\widctlpar\fs20\cgrid \sbasedon0 \snext96 \sautoupd List Enum 5;} {\s97\fi-360\li2880\widctlpar\fs20\cgrid \sbasedon0 \snext98 \sautoupd List Enum 7;} {\s98\fi-360\li3240\widctlpar\fs20\cgrid \sbasedon0 \snext99 \sautoupd List Enum 8;} {\s99\fi-360\li3600\widctlpar\fs20\cgrid \sbasedon0 \snext99 \sautoupd List Enum 9;} } {\info {\title {\comment Kite - Detailed Router {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 1.0 \par }}Kite - Detailed Router} {\comment Generated byDoxgyen. } {\creatim \yr2020\mo4\dy27\hr11\min35\sec2} }\pard\plain \sectd\pgnlcrm {\footer \s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid {\chpgn}} \pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \vertalc\qc\par\par\par\par\par\par\par \pard\plain \s15\qc\sb240\sa60\widctlpar\outlinelevel0\adjustright \b\f1\fs32\kerning28\cgrid {\field\fldedit {\*\fldinst TITLE \\*MERGEFORMAT}{\fldrslt Kite - Detailed Router}}\par \pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid \par \par\par\par\par\par\par\par\par\par\par\par\par \pard\plain \s16\qc\sa60\widctlpar\outlinelevel1\adjustright \f1\cgrid {\field\fldedit {\*\fldinst AUTHOR \\*MERGEFORMAT}{\fldrslt AUTHOR}}\par Version 1.0\par{\field\fldedit {\*\fldinst CREATEDATE \\*MERGEFORMAT}{\fldrslt Mon Apr 27 2020 }}\par \page\page\vertalt \pard\plain \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Table of Contents\par \pard\plain \par {\field\fldedit {\*\fldinst TOC \\f \\*MERGEFORMAT}{\fldrslt Table of contents}}\par \pard\plain \sect \sbkpage \pgndec \pgnrestart \sect \sectd \sbknone {\footer \s29\widctlpar\tqc\tx4320\tqr\tx8640\qr\adjustright \fs20\cgrid {\chpgn}} \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Detailed Router Documentation\par \pard\plain {\tc \v Detailed Router Documentation} { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This documentation adresses two level of explanations :\par { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The {\b API} description which explains how to use {\b Kite}, thoses parts as flagged as {\b API} . \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The internal description which details how {\b Kite} do things. It's mostly intended for myself to help me not to forget how I've done things when debug time will come... It may also be valuable to people who may want to use or patch {\b Kite} for their own purpose (my secret hope). \par} Additionnal documents:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Synthetic Hierarchy (API)} \par} }} \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Notes{\tc \v Notes}\par \pard\plain {\bkmkstart AAAAAAAAVN} {\bkmkend AAAAAAAAVN} { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {\bkmkstart AAAAAAAAAA} {\bkmkend AAAAAAAAAA} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Summary \par} {\tc\tcl2 \v Summary} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Various Things to Remeber}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Pending Modifications}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Modifications History}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Changes in the general architecture}{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Changes in KiteEngine class design}\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Changes in DataNegociate class design}\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Changes in TrackElement class design}\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Changes in TrackSegment class design}\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Changes in AutoSegment class design}\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Changes in AutoContact class design}\par} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Bug Solving Memento}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Evaluation with Cadence NanoRoute}\par} \par} {\bkmkstart AAAAAAAAAB} {\bkmkend AAAAAAAAAB} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Various Things to Remember \par} {\tc\tcl2 \v Various Things to Remember} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Determinism checking.} The trace level to get only determinism related log is {\f2 500} . Each line for the determinism is prepended with 'Deter|', possible with some leading spaces.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The router only sees/manages the aligned segment sets (through a pseudo- decorator on their canonical segment). So the non-canonical segments and the contacts should not be handled at all at this level.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Do do confuse the Session::Event, events that modificate the state of the {\b Kite} database (insert, move or remove {\b TrackSegment} in {\b Track}) and the {\b RoutingEvent} class which request that a segment must be processed.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid In the various processing method of {\b RoutingEvent}, when a {\b TrackSegment} can be inserted inside a {\b Track} a Session::Event is generated but no further {\b RoutingEvent}, this end the placement processus of segment (until it is ripped-up).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid AutoSegment do not invalidate their S/T anchor contacts.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid AutoContact invalidate their anchored upon AutoSegment.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Now that the Hurricane database is deterministic, the router seems to be likewise.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Reduce/raise mechanism} . To manage {\i same layer} dogleg this mechanism has been implemented. When a candidate dogleg perpandicular segment length shrink below one pitch it is removed from any track to become {\i invisible} . Conversely, when a reduced segment length expand over one pitch generate a new {\b RoutingEvent} to insert it. All this is managed in the {\b Session::revalidate()} method.\par} \par} {\bkmkstart AAAAAAAAAC} {\bkmkend AAAAAAAAAC} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Pending Modifications \par} {\tc\tcl2 \v Pending Modifications} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid In {\b SegmentAction::doAction()}, completly disable the movement of {\b TrackSegment} on it's target {\b Track} axis. This should not be needed as, if the algorithm as worked correctly, the next time it's {\b RoutingEvent} is processed, the target {\b Track} will have a free space to insert into. Then the {\b Track} insertion will set the {\b TrackSegment} axis.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Has to complete the lazy evaluation of the {\b TrackSegment} / {\b DataNegociate} / {\b RoutingEvent}. There is still some redundancy when the key of the {\b RoutingEvent} is updated.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid In {\b AutoContact::updateTopology()} & {\b AutoContact::updateGeometry()} we could avoid to systematically run through the Hooks to cache the connected segments. This can be done once at the first call of either method (whichever comes first) on the first revalidate. Afterwards the cache can be updated only by {\b AutoContact::updateTopology()}.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The canonization is done in two places, directly on a set of aligneds AutoSegments through {\b AutoSegment::canonize()} and for the whole net Session::_canonize(), which is called after the initial creation and each time the topology is modificated. The later may be suppressed if we uses more intelligently the former, and gain some more speedup.\par} \par} {\bkmkstart AAAAAAAAAD} {\bkmkend AAAAAAAAAD} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Modifications History \par} {\tc\tcl2 \v Modifications History} {\bkmkstart AAAAAAAAAE} {\bkmkend AAAAAAAAAE} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Changes in the general architecture \par} {\tc\tcl3 \v Changes in the general architecture} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Lazy Update.} Update of {\b DataNegociate} and {\b RoutingEvent} are now delayed until the event is processed, and systematically done at this point. Thus, the explicit invalidation of those objects is no longer needed. The revalidation is no longer triggered by the revalidation of {\b TrackSegment}.\par} \par} {\bkmkstart AAAAAAAAAF} {\bkmkend AAAAAAAAAF} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Changes in KiteEngine class design \par} {\tc\tcl3 \v Changes in KiteEngine class design} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Suppress the lookup table of {\b Hurricane::Segment} toward {\b TrackSegment}. Instead uses the Observer mecanism between {\b Katabatic::AutoSegment} and {\b TrackSegment}.\par} \par} {\bkmkstart AAAAAAAAAG} {\bkmkend AAAAAAAAAG} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Changes in DataNegociate class design \par} {\tc\tcl3 \v Changes in DataNegociate class design} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Merge in the separate class {\f2 Cost} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Suppress the {\f2 SlackState::Desalignate} , due to the simplificated structure of the AutoSegment/AutoContacts (no more collapseds, or forced alignements).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Displace the computation and caching of the perpandiculars and perpandicular free interval from {\b RoutingEvent} into {\b DataNegociate}. Allows code factorization with the attractors computation, and data size reduction as there is exaclty one {\b DataNegociate} but there may be more than one {\b RoutingEvent} for the same {\b TrackSegment}.\par} \par} {\bkmkstart AAAAAAAAAH} {\bkmkend AAAAAAAAAH} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Changes in TrackElement class design \par} {\tc\tcl3 \v Changes in TrackElement class design} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Due to the simplificated structure of the Katabatic contacts (terminal, turn, vtee & htee), there's no longer collapsed AutoSegment or {\i expandable} contacts. The {\b desalignate} feature, relaxing constraints due to collapsed segments or contacts with more than three segments, is no longer implemented. {\b Have to redevelop a method to break long segments linked} {\b by HTee or VTee.} \par} \par} {\bkmkstart AAAAAAAAAI} {\bkmkend AAAAAAAAAI} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Changes in TrackSegment class design \par} {\tc\tcl3 \v Changes in TrackSegment class design} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The method {\f2 TrackSegment::_postModify()} is merged with {\b TrackSegment::_postDoglegs()} as, in the context of {\b TrackSegment} the only used topological modifications goes through the creation of one or more dogleg.\par} \par} {\bkmkstart AAAAAAAAAJ} {\bkmkend AAAAAAAAAJ} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Changes in AutoSegment class design \par} {\tc\tcl3 \v Changes in AutoSegment class design} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid In {\b AutoSegment::_makeDogleg()}, update the local/global status of the involved AutoSegment and re-canonize only what is necessary. Thus, guarantee that the net's topology is still valid after this method call and no topological update is needed at {\b Session} level (should be {\i much} faster). In this method, the code sharing between AutoHorizontal and AutoVertical can still be increased (update mechanisms are identicals).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The {\f2 id} support is now also implemented at Hurricane level. We may choose to use as a replacement of the one already present in AutoSegment. But in that case, we at least must cache the id in the AutoSegment. So we will not gain in memory footprint, the only benefit would be to have coherent id number throughout all the tools, but the sequentiality will be lost (this may not be a big issue).\par} \par} {\bkmkstart AAAAAAAAAK} {\bkmkend AAAAAAAAAK} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Changes in AutoContact class design \par} {\tc\tcl3 \v Changes in AutoContact class design} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid In {\b AutoSegment::invalidate()}, no longer uses collection to walk through attached AutoSegment, directly uses the cache. Much simple and efficient as we exactly know what is attached on every kind of contact.\par} \par} \par} {\bkmkstart AAAAAAAAAL} {\bkmkend AAAAAAAAAL} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Bug Solving Memento \par} {\tc\tcl2 \v Bug Solving Memento} {\b LUT lookup change:} When breaking a {\b TrackSegment}, the break may not occurs in the associated canonical AutoSegment. In that case the {\f2 dogleg[O]} will not match the one that is looked up for the broken (canonical) segment. Thus it was not a bug but a misunderstanding...\par {\b Overlap of perpandiculars after a dogleg creation:} The axis of the new parallel was not set to the axis of it's parent. This was due to the uses of {\b AutoSegment::setAxis()} in AutoHorizontal::_makeDogleg() which silently do nothing on non-canonical AutoSegment, and at this point, the re-canonisation did not yet take place. Now Uses AutoSegment::_setAxis() the atomic variant wich works inconditionnaly.\par} {\bkmkstart AAAAAAAAAM} {\bkmkend AAAAAAAAAM} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Evaluation with Cadence NanoRoute \par} {\tc\tcl2 \v Evaluation with Cadence NanoRoute} To perform a comparison with NanoRoute the procedure is as follow:\par { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Export the design in Alliance {\f2 DEF} format. It will generate both {\f2 DEF} file and the supporting {\f2 LEF} file containing the technology and the abstract of all the standard cell of the design. As Alliance uses symbolic units (lambda), they are translated with the simple rule: {\b 1 lambda == 1 micron} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Run the commands in NanoRoute:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 loadLefFile design.lef} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 loadDefFile design.def} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 generateTracks} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 generateVias} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 setNanoRouteMode -quiet -drouteFixAntenna 0} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 setNanoRouteMode -quiet -drouteStartIteration default} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 setNanoRouteMode -quiet -routeTopRoutingLayer default} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 setNanoRouteMode -quiet -routeBottomRoutingLayer 2} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 setNanoRouteMode -quiet -drouteEndIteration default} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 setNanoRouteMode -quiet -routeWithTimingDriven false} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 setNanoRouteMode -quiet -routeWithSiDriven false} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 routeDesign -globalDetail} \par} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid To perform as fair a comparison as possible, those commands disable antenna effect protection and disable the use of the {\f2 M1} as a routing layer ({\f2 -routeBottomRoutingLayer 2} ). Those commands are issued through the graphical interface of NanoRoute.\par} {\i To see the resulting layout, do not forget to switch the view mode.} \par} }} \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Module Index\par \pard\plain {\tc \v Module Index} \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Modules\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid Here is a list of all modules:} { \par \pard\plain \s71\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid Synthetic Hierarchy (API)\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAN \\*MERGEFORMAT}{\fldrslt pagenum}} \par Algorithm Overview\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAO \\*MERGEFORMAT}{\fldrslt pagenum}} \par Generalities {\f2 [external]}\par \par JSON Support {\f2 [external]}\par \par DbU/Unit description {\f2 [external]}\par \par Graphics {\f2 [external]}\par \par Global Routing Loading {\f2 [external]}\par \par} \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Namespace Index\par \pard\plain {\tc \v Namespace Index} \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Namespace List\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid Here is a list of all documented namespaces with brief descriptions:} { \par \pard\plain \s71\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid {\b {\b anonymous_namespace\{AutoSegment.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAP \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{ChipTools.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAQ \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{GCell.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAR \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{KatabaticEngine.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAS \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{LoadGrByNet.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAT \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{Manipulator.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAU \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{NegociateWindow.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAV \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{RoutingPlane.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAW \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{SegmentFsm.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAX \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{Session.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAY \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{Track.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAZ \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{TrackElement.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABA \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b Kite} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The namespace dedicated to {\b Kite} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABB \\*MERGEFORMAT}{\fldrslt pagenum}} \par \par} \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Hierarchical Index\par \pard\plain {\tc \v Hierarchical Index} \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Class Hierarchy\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid This inheritance list is sorted roughly, but not completely, alphabetically:} { \par \pard\plain \s71\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid BaseObserver {\f2 [external]}{ \par \pard\plain \s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid Observer< class > {\f2 [external]}{ \par \pard\plain \s73\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid SegmentObserver\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMT \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par }\par DataNegociate\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABN \\*MERGEFORMAT}{\fldrslt pagenum}} \par DBo {\f2 [external]}{ \par \pard\plain \s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid ToolEngine {\f2 [external]}{ \par \pard\plain \s73\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid KatabaticEngine {\f2 [external]}{ \par \pard\plain \s74\li1440\sa18\sb18\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid KiteEngine\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAADH \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par }\par }\par RoutingEvent::Key\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHX \\*MERGEFORMAT}{\fldrslt pagenum}} \par Manipulator\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAADT \\*MERGEFORMAT}{\fldrslt pagenum}} \par NegociateWindow\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAFG \\*MERGEFORMAT}{\fldrslt pagenum}} \par RoutingEvent\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGD \\*MERGEFORMAT}{\fldrslt pagenum}} \par RoutingEventHistory\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHZ \\*MERGEFORMAT}{\fldrslt pagenum}} \par RoutingEventLoop\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAII \\*MERGEFORMAT}{\fldrslt pagenum}} \par RoutingEventQueue\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIP \\*MERGEFORMAT}{\fldrslt pagenum}} \par RoutingPlane\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJE \\*MERGEFORMAT}{\fldrslt pagenum}} \par SegmentAction\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKA \\*MERGEFORMAT}{\fldrslt pagenum}} \par SegmentFsm\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAALF \\*MERGEFORMAT}{\fldrslt pagenum}} \par Session {\f2 [external]}{ \par \pard\plain \s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid Session\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMV \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par Track\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAANP \\*MERGEFORMAT}{\fldrslt pagenum}} { \par \pard\plain \s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid HorizontalTrack\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAACY \\*MERGEFORMAT}{\fldrslt pagenum}} \par VerticalTrack\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAVM \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par TrackElement\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQC \\*MERGEFORMAT}{\fldrslt pagenum}} { \par \pard\plain \s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid TrackFixedSegment\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUW \\*MERGEFORMAT}{\fldrslt pagenum}} \par TrackSegment\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAVG \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par TrackMarker\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUY \\*MERGEFORMAT}{\fldrslt pagenum}} \par } \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Class Index\par \pard\plain {\tc \v Class Index} \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Class List\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid Here are the classes, structs, unions and interfaces with brief descriptions:} { \par \pard\plain \s71\li360\sa27\sb27\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid {\b {\b DataNegociate} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Algorimthmic datas associated the {\b TrackSegment} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABN \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b HorizontalTrack} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Horizontal track managment })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAACY \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b RoutingEvent::Key} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b RoutingEvent} cached key for maps })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHX \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b KiteEngine} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b Kite} Tool })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAADH \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b Manipulator} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Handle {\b TrackElement} ripup & topological modifications })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAADT \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b NegociateWindow} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform the routing, main {\b RoutingEvent} manager })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAFG \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b RoutingEvent} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Atomic Placement Request for a {\b TrackSegment} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGD \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b RoutingEventHistory} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid History of {\b RoutingEvent} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHZ \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b RoutingEventLoop} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Simple loop dectector for {\b RoutingEvent} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAII \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b RoutingEventQueue} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The priority Queue of {\b RoutingEvent} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIP \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b RoutingPlane} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Array of Tracks in one Layer })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJE \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b SegmentAction} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Store request for an event to be generated on a {\b TrackElement} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKA \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b SegmentFsm} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Pseudo-decorator to process a {\b RoutingEvent} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAALF \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b SegmentObserver} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Observer on the base AutoSegment })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMT \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b Session} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Kite} update {\b Session} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMV \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b Track} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Structure managing one routing track })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAANP \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b TrackElement} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract Class for all Elements inserted inside a {\b Track} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQC \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b TrackFixedSegment} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Track} elements for fixed wires })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUW \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b TrackMarker} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Tag part of {\b Track} with a weight })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUY \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b TrackSegment} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Derived {\b Katabatic::AutoSegment} for the router })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAVG \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b VerticalTrack} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Vertical track managment })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAVM \\*MERGEFORMAT}{\fldrslt pagenum}} \par \par} \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Module Documentation{\tc \v Module Documentation} \par \pard\plain \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Synthetic Hierarchy (API)\par \pard\plain {\tc\tcl2 \v Synthetic Hierarchy (API)} {\xe \v Synthetic Hierarchy (API)} {\bkmkstart AAAAAAAAAN} {\bkmkend AAAAAAAAAN} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Simplificated class hierarchy. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Simplificated class hierarchy. \par }{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par }\par \pard\plain \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Algorithm Overview\par \pard\plain {\tc\tcl2 \v Algorithm Overview} {\xe \v Algorithm Overview} {\bkmkstart AAAAAAAAAO} {\bkmkend AAAAAAAAAO} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Description of the algorithm. }}\par {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Description of the algorithm. \par }{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The algorithm top-level is implemented in the {\f2 {\b NegociateWindow}} .\par {\b First step\~:} NegociateWindow::_loadRouting() { \par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 1.\tab Load routing wires ({\f2 AutoSegment} ) from {\f2 KatabaticEngine} inside the {\b Kite} {\f2 GCell's} . Then update the {\f2 GCell's} density. \par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 2.\tab Sort the {\f2 GCell's} according to decreasing density (denser {\f2 GCell's} are to be routed first). \par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 3.\tab Agglomerate clusters of contiguous GCell's whose density is superior to 0.7 to the seed GCell. See {\f2 GCellRoutingSet} for the mechanism.\par GCellRoutingSet receive an increasing order number. The higher the order the lower the density. This order is transmitted to the {\f2 {\b TrackSegment}} of the {\f2 GCellRoutingSet} to be taken into account by the track cost function. \par} {\b Second step\~:} {\f2 NegociateWindow::_runOnGCellRoutingSet()} \par For each {\f2 GCellRoutingSet} in decreasing density, negociate the set of associated {\f2 {\b TrackSegment}} . { \par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 1.\tab Build a {\f2 {\b RoutingEventQueue}} from the list of {\f2 {\b TrackSegment}} . The queue is responsible for allocating the {\f2 {\b RoutingEvent}} associated to each {\f2 {\b TrackSegment}} . \par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 2.\tab The queue is sorted according to the "event level" then to the priority, which is for now the slack of the {\f2 {\b TrackSegment}} . That is, constrained {\f2 {\b TrackSegment}} are routed first. \par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 3.\tab The queue is processed till it's empty (no unprocessed {\f2 {\b RoutingEvent}} remains).\par Processing a {\f2 {\b RoutingEvent}} is trying to insert a {\f2 {\b TrackSegment}} in a suitable {\b Track}. We proceed as follow\~: { \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The maximum ripup count for the to be inserted segment has been reached. Issue a severe warning and left unrouted this {\f2 {\b TrackSegment}} (for now). \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Compute the Tracks in which the {\f2 {\b TrackSegment}} can be inserted, then compute the insertion cost in each one. The candidates are ordered by the insertion cost. \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Now consider the lower cost {\f2 {\b Track}} . If there is a free interval for the {\f2 {\b TrackSegment}} . Issue a {\f2 Session::addInsertEvent()} then finish.\par If there is a {\i "soft overlap"} , that is the overlaping {\f2 {\b TrackSegment}} already in the {\f2 {\b Track}} could be shrunk either to the left or the right so the new {\f2 {\b TrackSegment}} can be inserted. This is managed by {\f2 RoutingEvent::_setAside()} , for each soft overlaping {\f2 {\b TrackSegment}} , gets its perpandiculars and issue a displacement request for all of them. That is, re-post a {\f2 {\b RoutingEvent}} with updated constraints and remove the perpandicular from it's {\b Track} if it has already been routed. Note that no request is issued for the overlaping {\f2 {\b TrackSegment}} itself has it do not change of {\b Track}.\par If there is a {\i "hard overlap"} , that is the two {\f2 {\b TrackSegment}} cannot share the same {\f2 {\b Track}} , remove the previous one from the {\f2 {\b Track}} and re-post a {\f2 {\b RoutingEvent}} . Note that, the cost object should have selected a {\f2 {\b TrackSegment}} which could be ripped-up. Otherwise the {\f2 {\b Track}} would'nt even be a candidate. \par} When a {\b TrackSegment} is riped up, it is re-routed immediately afterward. This is done by increasing his event level. \par} } \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Namespace Documentation\par \pard\plain \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid anonymous_namespace\{AutoSegment.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{AutoSegment.cpp\}} {\xe \v anonymous_namespace\{AutoSegment.cpp\}} {\bkmkstart AAAAAAAAAP} {\bkmkend AAAAAAAAAP} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid anonymous_namespace\{ChipTools.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{ChipTools.cpp\}} {\xe \v anonymous_namespace\{ChipTools.cpp\}} {\bkmkstart AAAAAAAAAQ} {\bkmkend AAAAAAAAAQ} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid anonymous_namespace\{GCell.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{GCell.cpp\}} {\xe \v anonymous_namespace\{GCell.cpp\}} {\bkmkstart AAAAAAAAAR} {\bkmkend AAAAAAAAAR} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid anonymous_namespace\{KatabaticEngine.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{KatabaticEngine.cpp\}} {\xe \v anonymous_namespace\{KatabaticEngine.cpp\}} {\bkmkstart AAAAAAAAAS} {\bkmkend AAAAAAAAAS} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid anonymous_namespace\{LoadGrByNet.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{LoadGrByNet.cpp\}} {\xe \v anonymous_namespace\{LoadGrByNet.cpp\}} {\bkmkstart AAAAAAAAAT} {\bkmkend AAAAAAAAAT} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Classes\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b GCellTopology}\par } \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid anonymous_namespace\{Manipulator.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{Manipulator.cpp\}} {\xe \v anonymous_namespace\{Manipulator.cpp\}} {\bkmkstart AAAAAAAAAU} {\bkmkend AAAAAAAAAU} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid anonymous_namespace\{NegociateWindow.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{NegociateWindow.cpp\}} {\xe \v anonymous_namespace\{NegociateWindow.cpp\}} {\bkmkstart AAAAAAAAAV} {\bkmkend AAAAAAAAAV} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid anonymous_namespace\{RoutingPlane.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{RoutingPlane.cpp\}} {\xe \v anonymous_namespace\{RoutingPlane.cpp\}} {\bkmkstart AAAAAAAAAW} {\bkmkend AAAAAAAAAW} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid anonymous_namespace\{SegmentFsm.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{SegmentFsm.cpp\}} {\xe \v anonymous_namespace\{SegmentFsm.cpp\}} {\bkmkstart AAAAAAAAAX} {\bkmkend AAAAAAAAAX} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid anonymous_namespace\{Session.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{Session.cpp\}} {\xe \v anonymous_namespace\{Session.cpp\}} {\bkmkstart AAAAAAAAAY} {\bkmkend AAAAAAAAAY} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid anonymous_namespace\{Track.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{Track.cpp\}} {\xe \v anonymous_namespace\{Track.cpp\}} {\bkmkstart AAAAAAAAAZ} {\bkmkend AAAAAAAAAZ} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid anonymous_namespace\{TrackElement.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{TrackElement.cpp\}} {\xe \v anonymous_namespace\{TrackElement.cpp\}} {\bkmkstart AAAAAAAABA} {\bkmkend AAAAAAAABA} \par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Kite Namespace Reference\par \pard\plain {\tc\tcl2 \v Kite} {\xe \v Kite} {\bkmkstart AAAAAAAABB} {\bkmkend AAAAAAAABB} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The namespace dedicated to {\b Kite}. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Classes\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b DataNegociate}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Algorimthmic datas associated the {\b TrackSegment}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b HorizontalTrack}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Horizontal track managment. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b KiteEngine}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b Kite} Tool. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b Manipulator}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Handle {\b TrackElement} ripup & topological modifications. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b NegociateWindow}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform the routing, main {\b RoutingEvent} manager. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b RoutingEvent}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Atomic Placement Request for a {\b TrackSegment}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b RoutingEventHistory}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid History of {\b RoutingEvent}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b RoutingEventLoop}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Simple loop dectector for {\b RoutingEvent}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b RoutingEventQueue}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The priority Queue of {\b RoutingEvent}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b RoutingPlane}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Array of Tracks in one Layer. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b SegmentAction}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Store request for an event to be generated on a {\b TrackElement}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b SegmentFsm}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Pseudo-decorator to process a {\b RoutingEvent}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b SegmentObserver}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Observer on the base AutoSegment. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b Session}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Kite} update {\b Session}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b Track}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Structure managing one routing track. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b TrackElement}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract Class for all Elements inserted inside a {\b Track}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b TrackFixedSegment}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Track} elements for fixed wires. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b TrackMarker}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Tag part of {\b Track} with a weight. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b TrackSegment}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Derived {\b Katabatic::AutoSegment} for the router. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b VerticalTrack}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Vertical track managment. }\par}}} } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Typedefs\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef void() {\b SegmentOverlapCostCB}(const {\b TrackElement} *, TrackCost &)\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Enumerations\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid enum {\b FunctionFlags} \{ , {\b KtLoadGlobalRouting} = 0x00000001, {\b KtBuildGlobalRouting} = 0x00000002, {\b KtAllowDoglegReuse} = 0x00000004, {\b KtDataSelf} = 0x00000008, {\b KtNearest} = 0x00000010, {\b KtForce} = 0x00000020, {\b KtResetCount} = 0x00000040, {\b KtWithPerpands} = 0x00000080, {\b KtWithConstraints} = 0x00000100 \}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The namespace dedicated to {\b Kite}. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Typedef Documentation\par \pard\plain {\xe \v SegmentOverlapCostCB\:Kite} {\xe \v Kite\:SegmentOverlapCostCB} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b SegmentOverlapCostCB}} \par {\bkmkstart AAAAAAAABC} {\bkmkend AAAAAAAABC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Prototype of overlap cost callback functions.\par {\b See also:} \~ {\b TrackSegment::setOverlapCostCB()}, TrackSegment::getOverlapCost(). \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Enumeration Type Documentation\par \pard\plain {\xe \v FunctionFlags\:Kite} {\xe \v Kite\:FunctionFlags} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b FunctionFlags}}} \par {\bkmkstart AAAAAAAABD} {\bkmkend AAAAAAAABD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Enumerator:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {\xe \v KtLoadGlobalRouting\:Kite} {\xe \v Kite\:KtLoadGlobalRouting} {\qr KtLoadGlobalRouting{\bkmkstart AAAAAAAABE} {\bkmkend AAAAAAAABE} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Reload the global routing from a preciously saved run ({\f2 } .kgr file). \par }\cell }{\row } {\xe \v KtBuildGlobalRouting\:Kite} {\xe \v Kite\:KtBuildGlobalRouting} {\qr KtBuildGlobalRouting{\bkmkstart AAAAAAAABF} {\bkmkend AAAAAAAABF} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Run the global router Knik. \par }\cell }{\row } {\xe \v KtAllowDoglegReuse\:Kite} {\xe \v Kite\:KtAllowDoglegReuse} {\qr KtAllowDoglegReuse{\bkmkstart AAAAAAAABG} {\bkmkend AAAAAAAABG} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Allow sharing of dogleg. \par }\cell }{\row } {\xe \v KtDataSelf\:Kite} {\xe \v Kite\:KtDataSelf} {\qr KtDataSelf{\bkmkstart AAAAAAAABH} {\bkmkend AAAAAAAABH} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid To be documented. \par }\cell }{\row } {\xe \v KtNearest\:Kite} {\xe \v Kite\:KtNearest} {\qr KtNearest{\bkmkstart AAAAAAAABI} {\bkmkend AAAAAAAABI} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Round the position to the nearest track axis. \par }\cell }{\row } {\xe \v KtForce\:Kite} {\xe \v Kite\:KtForce} {\qr KtForce{\bkmkstart AAAAAAAABJ} {\bkmkend AAAAAAAABJ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Force to perform an action ignoring the "up to date" state. \par }\cell }{\row } {\xe \v KtResetCount\:Kite} {\xe \v Kite\:KtResetCount} {\qr KtResetCount{\bkmkstart AAAAAAAABK} {\bkmkend AAAAAAAABK} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Tells to reset a counter. \par }\cell }{\row } {\xe \v KtWithPerpands\:Kite} {\xe \v Kite\:KtWithPerpands} {\qr KtWithPerpands{\bkmkstart AAAAAAAABL} {\bkmkend AAAAAAAABL} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Ripup perpandiculars alongside the current segment. \par }\cell }{\row } {\xe \v KtWithConstraints\:Kite} {\xe \v Kite\:KtWithConstraints} {\qr KtWithConstraints{\bkmkstart AAAAAAAABM} {\bkmkend AAAAAAAABM} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Force constraints recomputation. \par }\cell }{\row } } } \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Class Documentation{\tc \v Class Documentation} \par \pard\plain \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid DataNegociate Class Reference\par \pard\plain {\tc\tcl2 \v DataNegociate} {\xe \v DataNegociate} {\bkmkstart AAAAAAAABN} {\bkmkend AAAAAAAABN} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Algorimthmic datas associated the {\b TrackSegment}. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Types\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid enum {\b SlackState} \{ {\b RipupPerpandiculars} = 1, {\b Minimize} = 2, {\b Dogleg} = 3, {\b Slacken} = 4, {\b ConflictSolveByHistory} = 5, {\b ConflictSolveByPlaceds} = 6, {\b LocalVsGlobal} = 7, {\b MoveUp} = 8, {\b MaximumSlack} = 9, {\b Unimplemented} =10, {\b Repair} =11 \}\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b hasRoutingEvent} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEvent} * {\b getRoutingEvent} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackElement} * {\b getTrackSegment} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Track} * {\b getTrack} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getLeftMinExtend} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getRightMinExtend} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getTerminals} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Net} * {\b getNet} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getState} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getStateCount} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getRipupCount} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getStateAndRipupCount} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getWiringDelta} ({\b DbU::Unit} axis) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Interval} & {\b getPerpandicularFree} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setState} (unsigned int, unsigned int flags=0)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setRoutingEvent} ({\b RoutingEvent} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setRipupCount} (unsigned int)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b incRipupCount} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b decRipupCount} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b resetRipupCount} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b resetStateCount} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b update} ()\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Algorimthmic datas associated the {\b TrackSegment}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b DataNegociate} object contains all the informations the negociation algorithm needs to know about a {\b TrackSegment}. Those informations mostly describe the slackening and ripup state of that segment.\par {\b State related datas:} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The ripup count in the current state. The count is reset to zero at each state transition.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The slackening state (see {\b DataNegociate::SlackState}). The state indicate the {\b next} topological modification to be applied on the segment should the ripup count reach it's maximal value.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The associated {\b RoutingEvent}. If no {\b RoutingEvent} is present, it means the segment has been either successufully placed or the algorithm has given up trying to. If present, it is a {\i pending} request for placement.\par} {\b Topological related datas:} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 leftMinExtend} , the potential minimal position of the segment left extension. May not be reachable due to other topological constraints.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 rightMinExtend} , the potential minimal position of the segment right extension.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 terminals} , the number of terminals attached to this segment.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 attractors} , a table of coordinates of the end points of the perpandiculars to this segment. Used to compute the wiring delta if we move the axis of the segment.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 perpandiculars} , a {\f2 vector} of the perpandicular {\b TrackElement}. This is a fast-access cache. It must be updated each time the topology of the net is modificated.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 perpandicularFree} , the free interval defined by the perpandiculars, that is for the sgement axis.\par} {\bkmkstart AAAAAAAABO} {\bkmkend AAAAAAAABO} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Perpandiculars, Free, Attractors & Wiring Delta \par} {\tc\tcl2 \v Perpandiculars, Free, Attractors & Wiring Delta} All those informations are computed and updated by the {\b DataNegociate::update()} method, which relies on:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid AutoSegment::getTopologicalInfos()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid AutoSegment::getTerminalCount()\par} They must be reviewed as they do not take advantage of the new AutoSegment structuration.\par For every perpandicular set of AutoSegment to the {\b TrackSegment} we want to place, get the coordinates of the extremity not connected to the segment and put that coordinate into a table associated with it's {\i spin} . The {\i spin} tells if the extremity is attracting the segment {\i up} or {\i down} (for an horizontal segment). The {\i spin} is incremented for up and decremented for down. After all the extremities have been processeds, we took into account only the coordinates with a non-zero spin, which means they truly attract the segment (whatever the direction).\par The {\i wiring delta} is the total wire length needed to connect from the attractors to the segment, should it be placed on {\f2 axis} .\par \par} {\bkmkstart AAAAAAAABP} {\bkmkend AAAAAAAABP} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Modifications History \par} {\tc\tcl2 \v Modifications History} Main changes in {\b DataNegociate} class design:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Merge in the separate class {\f2 Cost} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Suppress the {\f2 SlackState::Desalignate} , due to the simplificated structure of the AutoSegment/AutoContacts (no more collapseds, or forced alignements). \par} \par} }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Enumeration Documentation\par \pard\plain {\xe \v SlackState\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:SlackState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b SlackState}}} \par {\bkmkstart AAAAAAAABQ} {\bkmkend AAAAAAAABQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Describe the various stages of a {\b TrackSegment} slackening. The numerical values are choosen so we can increment them as a counter. \par }{\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Enumerator:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {\xe \v RipupPerpandiculars\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:RipupPerpandiculars} {\qr RipupPerpandiculars{\bkmkstart AAAAAAAABR} {\bkmkend AAAAAAAABR} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Force perpandiculars to be riped up as well as the {\b TrackSegment}, then schedule the placement of the {\b TrackSegment} {\i before} it's perpandiculars. \par }\cell }{\row } {\xe \v Minimize\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:Minimize} {\qr Minimize{\bkmkstart AAAAAAAABS} {\bkmkend AAAAAAAABS} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid If the {\b TrackSegment} is made of multiple TrackSegments with a forced alignement, suppress the alignement constraint.\par This should be deprecated now. Try to displace the perpandiculars so the {\b TrackSegment} is reduced to it's minimal length. \par }\cell }{\row } {\xe \v Dogleg\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:Dogleg} {\qr Dogleg{\bkmkstart AAAAAAAABT} {\bkmkend AAAAAAAABT} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Break the segment into two smaller ones. \par }\cell }{\row } {\xe \v Slacken\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:Slacken} {\qr Slacken{\bkmkstart AAAAAAAABU} {\bkmkend AAAAAAAABU} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create additional wiring so threre is no more contraints transmitted by the perpandiculars or the terminal contacts. \par }\cell }{\row } {\xe \v ConflictSolveByHistory\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:ConflictSolveByHistory} {\qr ConflictSolveByHistory{\bkmkstart AAAAAAAABV} {\bkmkend AAAAAAAABV} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Try to solve a conflict between a set of global segments by analysing the event/ripup history. See {\b SegmentFsm::conflictSolveByHistory()}. \par }\cell }{\row } {\xe \v ConflictSolveByPlaceds\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:ConflictSolveByPlaceds} {\qr ConflictSolveByPlaceds{\bkmkstart AAAAAAAABW} {\bkmkend AAAAAAAABW} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Try to solve a conflict between a set of global segments by analysing the current track context. See {\b SegmentFsm::conflictSolveByPlaceds()}. \par }\cell }{\row } {\xe \v LocalVsGlobal\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:LocalVsGlobal} {\qr LocalVsGlobal{\bkmkstart AAAAAAAABX} {\bkmkend AAAAAAAABX} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid To be reviewed. \par }\cell }{\row } {\xe \v MoveUp\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:MoveUp} {\qr MoveUp{\bkmkstart AAAAAAAABY} {\bkmkend AAAAAAAABY} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The segment is to be moved up (if possible). \par }\cell }{\row } {\xe \v MaximumSlack\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:MaximumSlack} {\qr MaximumSlack{\bkmkstart AAAAAAAABZ} {\bkmkend AAAAAAAABZ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The final state, topological modifications are exhausteds, if it cannot place at this point, it never will. \par }\cell }{\row } {\xe \v Unimplemented\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:Unimplemented} {\qr Unimplemented{\bkmkstart AAAAAAAACA} {\bkmkend AAAAAAAACA} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Used only during the development stage, telling that the state is not available yet. \par }\cell }{\row } {\xe \v Repair\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:Repair} {\qr Repair{\bkmkstart AAAAAAAACB} {\bkmkend AAAAAAAACB} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The router is in repair mode. \par }\cell }{\row } } } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v hasRoutingEvent\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:hasRoutingEvent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool hasRoutingEvent () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACC} {\bkmkend AAAAAAAACC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if there is a pending {\b RoutingEvent} for this {\b TrackSegment}. \par }{ Referenced by NegociateWindow::addRoutingEvent(), and TrackSegment::reschedule().}\par } {\xe \v getRoutingEvent\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getRoutingEvent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEvent} * getRoutingEvent () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACD} {\bkmkend AAAAAAAACD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The pending {\b RoutingEvent}. {\f2 NULL} will be returned if there is no pending event, meaning that the segment has been placed. \par }{ Referenced by SegmentAction::doAction(), Manipulator::makeDogleg(), Manipulator::relax(), TrackSegment::reschedule(), RoutingEvent::reschedule(), and TrackSegment::swapTrack().}\par } {\xe \v getTrackSegment\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getTrackSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackSegment} * getTrackSegment () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACE} {\bkmkend AAAAAAAACE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The associated {\b TrackSegment}. \par }} {\xe \v getTrack\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Track} * getTrack () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACF} {\bkmkend AAAAAAAACF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A proxy accessor for the segment's track. \par }} {\xe \v getLeftMinExtend\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getLeftMinExtend} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getLeftMinExtend () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACG} {\bkmkend AAAAAAAACG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The minimum extend possible of the segment's source (left) ending. Computed by {\b DataNegociate::update()}. \par }{ Referenced by Manipulator::insertInTrack().}\par } {\xe \v getRightMinExtend\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getRightMinExtend} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getRightMinExtend () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACH} {\bkmkend AAAAAAAACH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The minimum extend possible of the segment's target (right) ending. Computed by {\b DataNegociate::update()}. \par }{ Referenced by Manipulator::insertInTrack().}\par } {\xe \v getTerminals\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getTerminals} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getTerminals () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACI} {\bkmkend AAAAAAAACI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The number of terminal to which this segment is connected Computed by {\b DataNegociate::update()}.\par Must be refined: direct or indirect?. \par }} {\xe \v getNet\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getNet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Net} * getNet () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACJ} {\bkmkend AAAAAAAACJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A cached accessor to the segment's net (for faster access). \par }} {\xe \v getState\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getState () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACK} {\bkmkend AAAAAAAACK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The current state (see {\b DataNegociate::SlackState}). \par }{ Referenced by RoutingEvent::getState(), Manipulator::insertInTrack(), and Manipulator::ripupPerpandiculars().}\par } {\xe \v getStateCount\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getStateCount} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getStateCount () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACL} {\bkmkend AAAAAAAACL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The number of times we have reached the ripup limit while in this stage. \par }{ Referenced by SegmentFsm::conflictSolveByPlaceds().}\par } {\xe \v getRipupCount\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getRipupCount} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getRipupCount () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACM} {\bkmkend AAAAAAAACM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The number of times the segment has been riped up in this stage. \par }{ Referenced by Manipulator::canRipup(), SegmentAction::doAction(), and RoutingEvent::process().}\par } {\xe \v getStateAndRipupCount\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getStateAndRipupCount} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getStateAndRipupCount () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACN} {\bkmkend AAAAAAAACN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid A composite number combining the state and the ripup count: {\f2 (state<<4)+ripup} . \par }}} {\xe \v getWiringDelta\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getWiringDelta} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getWiringDelta ({\b DbU::Unit} {\i axis}) const}} \par {\bkmkstart AAAAAAAACO} {\bkmkend AAAAAAAACO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The wiring length needed to connect to the attractors if the segment is put on {\f2 axis} . The lower, the better... \par }} {\xe \v getPerpandicularFree\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:getPerpandicularFree} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Interval} & getPerpandicularFree () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAACP} {\bkmkend AAAAAAAACP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The range of legal positions generated only by the perpandiculars. \par }} {\xe \v setState\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:setState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setState (unsigned int {\i state}, unsigned int {\i flags} = {\f2 0}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAACQ} {\bkmkend AAAAAAAACQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set or reset the slacking state (see SlackState). If the {\f2 state} is the same as the current one, the state count is incremented. If the new state changes or {\f2 flags} contain KtReset, the state count is reset to one. \par }{ Referenced by SegmentAction::doAction(), Manipulator::relax(), Manipulator::repackPerpandiculars(), RoutingEvent::reschedule(), Manipulator::ripupPerpandiculars(), and RoutingEvent::setState().}\par } {\xe \v setRoutingEvent\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:setRoutingEvent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setRoutingEvent ({\b RoutingEvent} * {\i event}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAACR} {\bkmkend AAAAAAAACR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Associate {\f2 event} to this {\b TrackSegment}. \par }{ Referenced by RoutingEvent::reschedule(), and RoutingEvent::setSegment().}\par } {\xe \v setRipupCount\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:setRipupCount} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setRipupCount (unsigned int {\i count}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAACS} {\bkmkend AAAAAAAACS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Directly sets the ripup count to {\f2 count} . \par }{ Referenced by SegmentAction::doAction().}\par } {\xe \v incRipupCount\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:incRipupCount} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void incRipupCount (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAACT} {\bkmkend AAAAAAAACT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Increment the ripup count. No check is performed for bound limit. \par }} {\xe \v decRipupCount\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:decRipupCount} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void decRipupCount (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAACU} {\bkmkend AAAAAAAACU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Decrement the ripup count (will never go below zero). \par }} {\xe \v resetRipupCount\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:resetRipupCount} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void resetRipupCount (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAACV} {\bkmkend AAAAAAAACV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Reset the ripup count to zero. \par }{ Referenced by SegmentAction::doAction().}\par } {\xe \v resetStateCount\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:resetStateCount} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void resetStateCount (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAACW} {\bkmkend AAAAAAAACW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Reset the state count to zero. \par }} {\xe \v update\:Kite::DataNegociate} {\xe \v Kite::DataNegociate\:update} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void update ()}} \par {\bkmkstart AAAAAAAACX} {\bkmkend AAAAAAAACX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Recompute {\f2 leftMinExtend} , {\f2 righMinExtend} , number of terminals and attractors positions.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: The constructor do not calls it. It is to the algorithm responsability\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid to call it before using the computed datas. \par }}{ Referenced by NegociateWindow::setGCells().}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid DataNegociate.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid DataNegociate.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid DataNegociate.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid HorizontalTrack Class Reference\par \pard\plain {\tc\tcl2 \v HorizontalTrack} {\xe \v HorizontalTrack} {\bkmkstart AAAAAAAACY} {\bkmkend AAAAAAAACY} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Horizontal track managment. }}\par Inheritance diagram for HorizontalTrack:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKite_1_1HorizontalTrack__inherit__graph.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par } \par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isHorizontal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isVertical} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned int {\b getDirection} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Point} {\b getPosition} ({\b DbU::Unit} coordinate) const\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Additional Inherited Members\par \pard\plain {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Horizontal track managment. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v isHorizontal\:Kite::HorizontalTrack} {\xe \v Kite::HorizontalTrack\:isHorizontal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isHorizontal () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAACZ} {\bkmkend AAAAAAAACZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} . \par }{ Implements {\b Track} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAADA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v isVertical\:Kite::HorizontalTrack} {\xe \v Kite::HorizontalTrack\:isVertical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isVertical () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAADB} {\bkmkend AAAAAAAADB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b false} . \par }{ Implements {\b Track} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAADC \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getDirection\:Kite::HorizontalTrack} {\xe \v Kite::HorizontalTrack\:getDirection} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDirection () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAADD} {\bkmkend AAAAAAAADD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} Katabatic::KbHorizontal. \par }{ Implements {\b Track} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAADE \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getPosition\:Kite::HorizontalTrack} {\xe \v Kite::HorizontalTrack\:getPosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Point} getPosition ({\b DbU::Unit} {\i position}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAADF} {\bkmkend AAAAAAAADF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the point at {\f2 } (position,{\b getAxis()}). \par }{ Implements {\b Track} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAADG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid HorizontalTrack.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid HorizontalTrack.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid HorizontalTrack.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid RoutingEvent::Key Class Reference\par \pard\plain {\tc\tcl2 \v RoutingEvent::Key} {\xe \v RoutingEvent::Key} {\bkmkstart AAAAAAAAHX} {\bkmkend AAAAAAAAHX} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b RoutingEvent} cached key for maps. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b update} (const {\b RoutingEvent} *)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b RoutingEvent} cached key for maps. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The key is used as a cache in {\b RoutingEvent}, that is, the {\b RoutingEvent} attributes could be modificated without the key changing. It is important for the key to remain stable as it used in the various event queue as the sorting attribute. The key should be updated only when the {\b RoutingEvent} is temporarily whidrawn from the queue.\par Cached attributes: (used in that lexicographical order for sorting){ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b 1} \'96 {\f2 eventLevel} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b 2} \'96 {\f2 canRipple} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b 3} \'96 {\f2 priority} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b 4} \'96 {\f2 length} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b 5} \'96 {\f2 isHorizontal} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b 6} \'96 {\f2 axis} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b 7} \'96 {\f2 sourceU} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b 8} \'96 {\f2 net} (name).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b 9} \'96 {\f2 id} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b X} \'96 {\f2 slackenStrap} {\b unused} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b X} \'96 {\f2 tracksNb} {\b unused} .\par} It is internally managed by {\b RoutingEvent} and the queue. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v update\:Kite::RoutingEvent::Key} {\xe \v Kite::RoutingEvent::Key\:update} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b update (const {\b RoutingEvent} * {\i event})}} \par {\bkmkstart AAAAAAAAHY} {\bkmkend AAAAAAAAHY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Cache the value of the key from {\f2 event} . \par }{ Referenced by RoutingEvent::updateKey().}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEvent.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEvent.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEvent.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid KiteEngine Class Reference\par \pard\plain {\tc\tcl2 \v KiteEngine} {\xe \v KiteEngine} {\bkmkstart AAAAAAAADH} {\bkmkend AAAAAAAADH} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b Kite} Tool. }}\par Inheritance diagram for KiteEngine:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKite_1_1KiteEngine__inherit__graph.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par } \par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b KatabaticEngine} * {\b base} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Configuration * {\b getKiteConfiguration} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual Configuration * {\b getConfiguration} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Net} * {\b getBlockageNet} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b getToolSuccess} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned long {\b getEventsLimit} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getRipupLimit} (unsigned int type) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getRipupCost} () const\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static const {\b Name} & {\b staticGetName} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b KiteEngine} * {\b create} ({\b Cell} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b KiteEngine} * {\b get} (const {\b Cell} *)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b Kite} Tool. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Lookup Mechanism} \par Please look at {\b Kite::Session} for an explanation of the lookup mechanism from {\b Hurricane::Segment} or {\b Katabatic::AutoSegment} to {\b TrackSegment}. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v staticGetName\:Kite::KiteEngine} {\xe \v Kite::KiteEngine\:staticGetName} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Name} & staticGetName (){\f2 [static]}}} \par {\bkmkstart AAAAAAAADI} {\bkmkend AAAAAAAADI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The unique string identifier for the {\b KiteEngine} class of ToolEngine. \par }} {\xe \v create\:Kite::KiteEngine} {\xe \v Kite::KiteEngine\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b KiteEngine} * create ({\b Cell} * {\i cell}){\f2 [static]}}} \par {\bkmkstart AAAAAAAADJ} {\bkmkend AAAAAAAADJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a {\b KiteEngine} on {\f2 cell} . \par }} {\xe \v get\:Kite::KiteEngine} {\xe \v Kite::KiteEngine\:get} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b KiteEngine} * get (const {\b Cell} * {\i cell}){\f2 [static]}}} \par {\bkmkstart AAAAAAAADK} {\bkmkend AAAAAAAADK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b KiteEngine} associated to {\f2 cell} . {\f2 NULL} if there isn't. \par }} {\xe \v base\:Kite::KiteEngine} {\xe \v Kite::KiteEngine\:base} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b KatabaticEngine} * base (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAADL} {\bkmkend AAAAAAAADL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b KiteEngine}, casted as it's base class (KatabaticEngine). \par }} {\xe \v getKiteConfiguration\:Kite::KiteEngine} {\xe \v Kite::KiteEngine\:getKiteConfiguration} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b Configuration * getKiteConfiguration (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAADM} {\bkmkend AAAAAAAADM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b KiteEngine} configuration. The {\b Kite} Configuration is a derived class of KatabaticConfiguration. \par }} {\xe \v getConfiguration\:Kite::KiteEngine} {\xe \v Kite::KiteEngine\:getConfiguration} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b Configuration * getConfiguration (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAADN} {\bkmkend AAAAAAAADN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b KiteEngine} configuration. \par }{ Reimplemented from {\b KatabaticEngine}.}\par } {\xe \v getBlockageNet\:Kite::KiteEngine} {\xe \v Kite::KiteEngine\:getBlockageNet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Net} * getBlockageNet (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAADO} {\bkmkend AAAAAAAADO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The Net which is used to mark the blockage segments. It's not part of the Configuration {\i per se} but an isolated attribute. \par }} {\xe \v getToolSuccess\:Kite::KiteEngine} {\xe \v Kite::KiteEngine\:getToolSuccess} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool getToolSuccess () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAADP} {\bkmkend AAAAAAAADP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the tool was successful, that is, all the Net were routeds. \par }} {\xe \v getEventsLimit\:Kite::KiteEngine} {\xe \v Kite::KiteEngine\:getEventsLimit} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned long getEventsLimit () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAADQ} {\bkmkend AAAAAAAADQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The maximal number of allowed routing events. This limit is a security against infinite looping, be sure that it is great enough not to prevent normal routing completion. \par }} {\xe \v getRipupLimit\:Kite::KiteEngine} {\xe \v Kite::KiteEngine\:getRipupLimit} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned long getRipupLimit (unsigned int {\i type}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAADR} {\bkmkend AAAAAAAADR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the maximum ripup allowed of a segment of {\f2 type} . \par }{ Referenced by Manipulator::canRipup(), and SegmentAction::doAction().}\par } {\xe \v getRipupCost\:Kite::KiteEngine} {\xe \v Kite::KiteEngine\:getRipupCost} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned long getRipupCost () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAADS} {\bkmkend AAAAAAAADS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the differential used while comparing two ripup costs. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid KiteEngine.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid KiteEngine.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Manipulator Class Reference\par \pard\plain {\tc\tcl2 \v Manipulator} {\xe \v Manipulator} {\bkmkstart AAAAAAAADT} {\bkmkend AAAAAAAADT} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Handle {\b TrackElement} ripup & topological modifications. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Types\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid enum {\b FunctionFlag} \{ {\b ToRipupLimit} = 0x0001, {\b AllowExpand} = 0x0002, {\b NoExpand} = 0x0004, {\b PerpandicularsFirst} = 0x0008, {\b ToMoveUp} = 0x0010, {\b AllowLocalMoveUp} = 0x0020, {\b AllowTerminalMoveUp} = 0x0040, {\b AllowShortPivotUp} = 0x0080, {\b NoDoglegReuse} = 0x0100, {\b LeftAxisHint} = 0x0200, {\b RightAxisHint} = 0x0400, {\b NotOnLastRipup} = 0x0800 \}\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Manipulator} ({\b TrackElement} *, {\b SegmentFsm} &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackElement} * {\b getSegment} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DataNegociate} * {\b getData} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEvent} * {\b getEvent} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b canRipup} (unsigned int flags=0) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isCaged} ({\b DbU::Unit}) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b ripup} (unsigned int type, {\b DbU::Unit} axisHint=0)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b ripupPerpandiculars} (unsigned int flags=0)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b repackPerpandiculars} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b ripple} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b minimize} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b slacken} (unsigned int flags=KbNoFlags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b pivotUp} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b pivotDown} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b moveUp} (unsigned int flags=0)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b makeDogleg} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b makeDogleg} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b makeDogleg} ({\b Interval})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b relax} ({\b Interval}, unsigned int flags={\b AllowExpand})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b insertInTrack} (size_t)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b shrinkToTrack} (size_t, unsigned int flags=0, {\b DbU::Unit} leftAxisHint=0, {\b DbU::Unit} rightAxisHint=0)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b forceToTrack} (size_t)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b forceOverLocals} ()\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Handle {\b TrackElement} ripup & topological modifications. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {\bkmkstart AAAAAAAADU} {\bkmkend AAAAAAAADU} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Manipulator Structure \par} {\tc\tcl2 \v Manipulator Structure} A {\b Manipulator} basically binds together a {\b TrackElement}, it's {\b DataNegociate} and {\b RoutingEvent} (cached for fast access), and {\b a} {\b SegmentFsm}.\par {\i The {\b TrackElement} may differs from the one of the {\b SegmentFsm}.} This can occurs when manipulating perpandiculars or segments from other nets in conflict. For example: {\b Manipulator::isCaged()}.\par In the following documentation, the segment {\i which is associated to the {\b SegmentFsm}} will be called the {\i reference segment} .\par} {\bkmkstart AAAAAAAADV} {\bkmkend AAAAAAAADV} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Delayed Modifications \par} {\tc\tcl2 \v Delayed Modifications} It is important to note that when a {\b Manipulator} is called to modificate a {\b TrackElement}, nothing is actually done by the {\b Manipulator} itself. Instead, the {\b Manipulator} create the relevant {\b SegmentAction} (s) that are stored in the {\b SegmentFsm}. The action themselves are done at the end of the {\b SegmentFsm} lifecycle (wrapped inside a {\b Session}).\par This is not true! When dogleg are created, the topology is immediatly modificated. That way of doing must be clarified. \par} }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Enumeration Documentation\par \pard\plain {\xe \v FunctionFlag\:Kite::Manipulator} {\xe \v Kite::Manipulator\:FunctionFlag} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b FunctionFlag}}} \par {\bkmkstart AAAAAAAADW} {\bkmkend AAAAAAAADW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The various flags that can be passed to the {\b Manipulator} methods. \par }{\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Enumerator:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {\xe \v ToRipupLimit\:Kite::Manipulator} {\xe \v Kite::Manipulator\:ToRipupLimit} {\qr ToRipupLimit{\bkmkstart AAAAAAAADX} {\bkmkend AAAAAAAADX} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The ripup limit must be immediatly to it's limit for the current state. \par }\cell }{\row } {\xe \v AllowExpand\:Kite::Manipulator} {\xe \v Kite::Manipulator\:AllowExpand} {\qr AllowExpand{\bkmkstart AAAAAAAADY} {\bkmkend AAAAAAAADY} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Allow break points for dogleg not to be exactly on the requested position. Meaning that they are moved to the least congested GCell. \par }\cell }{\row } {\xe \v NoExpand\:Kite::Manipulator} {\xe \v Kite::Manipulator\:NoExpand} {\qr NoExpand{\bkmkstart AAAAAAAADZ} {\bkmkend AAAAAAAADZ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Breakpoints for dogleg are kept right where they are requested. \par }\cell }{\row } {\xe \v PerpandicularsFirst\:Kite::Manipulator} {\xe \v Kite::Manipulator\:PerpandicularsFirst} {\qr PerpandicularsFirst{\bkmkstart AAAAAAAAEA} {\bkmkend AAAAAAAAEA} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Reorder the events so that perpandiculars segments are re-processed before their reference segment. By default this is the other way around. \par }\cell }{\row } {\xe \v ToMoveUp\:Kite::Manipulator} {\xe \v Kite::Manipulator\:ToMoveUp} {\qr ToMoveUp{\bkmkstart AAAAAAAAEB} {\bkmkend AAAAAAAAEB} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Try to move up ripped up segments. \par }\cell }{\row } {\xe \v AllowLocalMoveUp\:Kite::Manipulator} {\xe \v Kite::Manipulator\:AllowLocalMoveUp} {\qr AllowLocalMoveUp{\bkmkstart AAAAAAAAEC} {\bkmkend AAAAAAAAEC} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Allow local segments to be moved up (forbidden by default). \par }\cell }{\row } {\xe \v AllowTerminalMoveUp\:Kite::Manipulator} {\xe \v Kite::Manipulator\:AllowTerminalMoveUp} {\qr AllowTerminalMoveUp{\bkmkstart AAAAAAAAED} {\bkmkend AAAAAAAAED} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Allow terminal segments to be moved up (forbidden by default). \par }\cell }{\row } {\xe \v AllowShortPivotUp\:Kite::Manipulator} {\xe \v Kite::Manipulator\:AllowShortPivotUp} {\qr AllowShortPivotUp{\bkmkstart AAAAAAAAEE} {\bkmkend AAAAAAAAEE} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Allow short segment yo be pivoted up. \par }\cell }{\row } {\xe \v NoDoglegReuse\:Kite::Manipulator} {\xe \v Kite::Manipulator\:NoDoglegReuse} {\qr NoDoglegReuse{\bkmkstart AAAAAAAAEF} {\bkmkend AAAAAAAAEF} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid When creating a dogleg, the default behavior is {\i not} to create a new one if there's already one in the same GCell. If this flag is set, a second dogleg will be created. \par }\cell }{\row } {\xe \v LeftAxisHint\:Kite::Manipulator} {\xe \v Kite::Manipulator\:LeftAxisHint} {\qr LeftAxisHint{\bkmkstart AAAAAAAAEG} {\bkmkend AAAAAAAAEG} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid An explicit left axis hint has been supplied as argument. \par }\cell }{\row } {\xe \v RightAxisHint\:Kite::Manipulator} {\xe \v Kite::Manipulator\:RightAxisHint} {\qr RightAxisHint{\bkmkstart AAAAAAAAEH} {\bkmkend AAAAAAAAEH} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid An explicit right axis hint has been supplied as argument. \par }\cell }{\row } {\xe \v NotOnLastRipup\:Kite::Manipulator} {\xe \v Kite::Manipulator\:NotOnLastRipup} {\qr NotOnLastRipup{\bkmkstart AAAAAAAAEI} {\bkmkend AAAAAAAAEI} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The reference segment has still more than one ripup to go for the given state. \par }\cell }{\row } } } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Constructor & Destructor Documentation\par \pard\plain {\xe \v Manipulator\:Kite::Manipulator} {\xe \v Kite::Manipulator\:Manipulator} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Manipulator} ({\b TrackElement} * {\i segment}, {\b SegmentFsm} & {\i fsm})}} \par {\bkmkstart AAAAAAAAEJ} {\bkmkend AAAAAAAAEJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i segment} \cell }{The {\b TrackElement} to manipulate. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i fsm} \cell }{The associated {\b SegmentFsm}.\cell } {\row } } Construct a new {\b Manipulator} on {\f2 segment} . \par }{ Referenced by Manipulator::forceOverLocals(), Manipulator::forceToTrack(), Manipulator::insertInTrack(), Manipulator::ripupPerpandiculars(), and Manipulator::shrinkToTrack().}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v getSegment\:Kite::Manipulator} {\xe \v Kite::Manipulator\:getSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getSegment () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEK} {\bkmkend AAAAAAAAEK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The working {\b TrackElement}. \par }} {\xe \v getData\:Kite::Manipulator} {\xe \v Kite::Manipulator\:getData} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DataNegociate} * getData () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEL} {\bkmkend AAAAAAAAEL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b DataNegociate} of the {\b TrackElement} (act as a cache). \par }} {\xe \v getEvent\:Kite::Manipulator} {\xe \v Kite::Manipulator\:getEvent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEvent} * getEvent () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEM} {\bkmkend AAAAAAAAEM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b RoutingEvent} associated to the {\b TrackElement} (act as a cache). \par }} {\xe \v canRipup\:Kite::Manipulator} {\xe \v Kite::Manipulator\:canRipup} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canRipup (unsigned int {\i flags} = {\f2 0}) const}} \par {\bkmkstart AAAAAAAAEN} {\bkmkend AAAAAAAAEN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the maximum ripup, for the given {\b SegmentFsm::State} has not been reached. If {\f2 flags} contains Manipulator::HasNextRipup, return {\b true} {\b only} if it still have at least one ripup to go. \par }{ Referenced by Manipulator::forceToTrack(), and Manipulator::ripup().}\par } {\xe \v isCaged\:Kite::Manipulator} {\xe \v Kite::Manipulator\:isCaged} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isCaged ({\b DbU::Unit} {\i axis}) const}} \par {\bkmkstart AAAAAAAAEO} {\bkmkend AAAAAAAAEO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the segment is enclosed (in it's {\b Track}) by two fixed or blockage segments which at least one is closer than 10 lambdas from {\f2 axis} . Mostly used to know if a perpandicular is actually restricting the axis span of a reference segment. \par }{ Referenced by Manipulator::ripupPerpandiculars().}\par } {\xe \v ripup\:Kite::Manipulator} {\xe \v Kite::Manipulator\:ripup} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool ripup (unsigned int {\i type}, {\b DbU::Unit} {\i axisHint} = {\f2 0})}} \par {\bkmkstart AAAAAAAAEP} {\bkmkend AAAAAAAAEP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i type} \cell }{The type of ripup action. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i axisHint} \cell }{An indication as where to move the riped up segment. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b true} if the operation has succedeed.\par }If the {\b TrackElement} can be ripped up, schedule a ripup action, possibly with a hint for the preferred axis position. \par }{ Referenced by Manipulator::forceOverLocals(), Manipulator::forceToTrack(), Manipulator::insertInTrack(), and Manipulator::ripupPerpandiculars().}\par } {\xe \v ripupPerpandiculars\:Kite::Manipulator} {\xe \v Kite::Manipulator\:ripupPerpandiculars} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool ripupPerpandiculars (unsigned int {\i flags} = {\f2 0})}} \par {\bkmkstart AAAAAAAAEQ} {\bkmkend AAAAAAAAEQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Schedule a ripup of all the perpandiculars of the reference segment. {\f2 flags} that modificate the behavior:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Manipulator::PerpandicularsFirst} : the queue will be reordered so that all the perpandiculars are re-processed (placed) before the reference segment.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Manipulator::ToRipupLimit} : the ripup count of the reference segment is set to the limit (i.e. only one more attempt before a slackening occurs).\par} The method will fails (return {\b false} ) if at least one perpandicular can't be changed of track (i.e. ripped up) {\b and} none of it's neighbors could be ripped up either. Meaning that the free span on that track cannot be changed. \par }{ Referenced by SegmentFsm::conflictSolveByPlaceds().}\par } {\xe \v repackPerpandiculars\:Kite::Manipulator} {\xe \v Kite::Manipulator\:repackPerpandiculars} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool repackPerpandiculars ()}} \par {\bkmkstart AAAAAAAAER} {\bkmkend AAAAAAAAER} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Ripup all the perpandiculars of the reference segment, except fixed or globals. The reference segment is rescheduled first (before it's perpandicular).\par This function may be used to find a better placement, maximizing the overlap of the various perpandiculars.\par Ripup all perpandiculars and the reference segment itself for a complete re-placement. The reference segment will be reprocessed {\i before} it's perpandiculars. \par }} {\xe \v ripple\:Kite::Manipulator} {\xe \v Kite::Manipulator\:ripple} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool ripple ()}} \par {\bkmkstart AAAAAAAAES} {\bkmkend AAAAAAAAES} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} true if the reference segment is local.\par Applies only on reference segments that are of local type. Tries to make room for the reference segment by ripping up it's neigbors on the parallels tracks. On a vertical plane, left neigbors are shifted one track left (trough axis hint) and right ones, one track right. Note that they are ripped up and the shift is just a hint, there's no guarantee that the router can honor it. \par }{ Referenced by Manipulator::ripupPerpandiculars().}\par } {\xe \v minimize\:Kite::Manipulator} {\xe \v Kite::Manipulator\:minimize} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool minimize ()}} \par {\bkmkstart AAAAAAAAET} {\bkmkend AAAAAAAAET} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} true if the reference segment can be mimized in a suitable track hole.\par Compute the miminal span of the reference segment, summing up contraints from source anchor and target anchors (if any) and perpandiculars. Then find holes in the avalaible tracks, and check if one is suitable for the miminized segment (try first the biggest hole).\par This operation can only be called once on a segment (a flag is set in the event). \par }} {\xe \v slacken\:Kite::Manipulator} {\xe \v Kite::Manipulator\:slacken} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool slacken (unsigned int {\i flags} = {\f2 KbNoFlags})}} \par {\bkmkstart AAAAAAAAEU} {\bkmkend AAAAAAAAEU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Simple proxy towards TrackElement::slacken().\par To be reviewed. \par }} {\xe \v pivotUp\:Kite::Manipulator} {\xe \v Kite::Manipulator\:pivotUp} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool pivotUp ()}} \par {\bkmkstart AAAAAAAAEV} {\bkmkend AAAAAAAAEV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Tries to move up the reference segment. The segment will be moved up only if a half track is free (for a local) or a full track is free (for a global).\par This function do not modifies/create perpandiculars. \par }{ Referenced by SegmentFsm::solveFullBlockages().}\par } {\xe \v pivotDown\:Kite::Manipulator} {\xe \v Kite::Manipulator\:pivotDown} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool pivotDown ()}} \par {\bkmkstart AAAAAAAAEW} {\bkmkend AAAAAAAAEW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Tries to move down the reference segment. The segment will be moved up only if {\i two} track are free (whether global or local). Is is more restrictive than {\b Manipulator::pivotUp()}.\par This function do not modifies/create perpandiculars. \par }} {\xe \v moveUp\:Kite::Manipulator} {\xe \v Kite::Manipulator\:moveUp} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool moveUp (unsigned int {\i flags} = {\f2 0})}} \par {\bkmkstart AAAAAAAAEX} {\bkmkend AAAAAAAAEX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Tries to move up a segment, if there is enough space in the {\b RoutingPlane} above and in the same direction.\par This function may modificate perpandiculars in order to maintain connexity.\par To be reviewed. \par }{ Referenced by SegmentFsm::solveFullBlockages().}\par } {\xe \v makeDogleg\:Kite::Manipulator} {\xe \v Kite::Manipulator\:makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool makeDogleg ()}} \par {\bkmkstart AAAAAAAAEY} {\bkmkend AAAAAAAAEY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b false} if the segment is {\i not} local or the dogleg cannot be done.\par For {\i local} reference segment only, look in the first track candidate for other segment overlapping and break the reference accordingly. \par }} {\xe \v makeDogleg\:Kite::Manipulator} {\xe \v Kite::Manipulator\:makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool makeDogleg ({\b DbU::Unit} {\i position})}} \par {\bkmkstart AAAAAAAAEZ} {\bkmkend AAAAAAAAEZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a dogleg in the GCell under {\f2 position} . \par }} {\xe \v makeDogleg\:Kite::Manipulator} {\xe \v Kite::Manipulator\:makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool makeDogleg ({\b Interval} {\i overlap})}} \par {\bkmkstart AAAAAAAAFA} {\bkmkend AAAAAAAAFA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a dogleg to avoid the obstructed interval {\f2 overlap} . \par }} {\xe \v relax\:Kite::Manipulator} {\xe \v Kite::Manipulator\:relax} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool relax ({\b Interval} {\i overlap}, unsigned int {\i flags} = {\f2 {\b AllowExpand}})}} \par {\bkmkstart AAAAAAAAFB} {\bkmkend AAAAAAAAFB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Break the reference segment so it can detour around the interval {\f2 overlap} . If {\f2 overlap} is completly enclosed inside the span of the reference segment two dogleg will be created. If the overlap occurs only on one side of the reference segment, only one dogleg will be created.\par If {\f2 flags} contains {\b Manipulator::AllowExpand}, the dogleg are not created exactly at the edges of the overlap but on the lowest density GCell (outside the overlap interval).\par The axis of the created dogleg are sets so that the broken part of the segment completly enclose {\f2 overlap} . That is, the orignal segment no longer intersect with {\f2 overlap} . So the min dogleg is pushed to the left and the max to the right if they are in the same GCell as the min/max of {\f2 overlap} . Otherwise (they have been expanded), they are put in the center of the GCell.\par We do not allow to dogleg twice in the same GCell, so if min or max is in respectively the first or last GCell, it is not done. Moreover if there is only one dogleg {\i and} it is in the first or last GCell, the relax method is cancelled (and returns {\b false} ). It means that this is the segment which is likely to be enclosed inside {\f2 overlap} .\par {\b Important:} The doglegs are created immediatly and not in a delayed fashion like the {\b SegmentAction}.\par \par }} {\xe \v insertInTrack\:Kite::Manipulator} {\xe \v Kite::Manipulator\:insertInTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool insertInTrack (size_t {\i i})}} \par {\bkmkstart AAAAAAAAFC} {\bkmkend AAAAAAAAFC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Try to insert the reference segment in the track at index {\f2 i} (in the cost table from {\b SegmentFsm}). The insertion is done by ripping up overlapping segment or shrinking them to left/right if possible.\par This operation ripup the processed segment neighbors (and their perpandiculars). \par }} {\xe \v shrinkToTrack\:Kite::Manipulator} {\xe \v Kite::Manipulator\:shrinkToTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool shrinkToTrack (size_t {\i i}, unsigned int {\i flags} = {\f2 0}, {\b DbU::Unit} {\i leftAxisHint} = {\f2 0}, {\b DbU::Unit} {\i rightAxisHint} = {\f2 0})}} \par {\bkmkstart AAAAAAAAFD} {\bkmkend AAAAAAAAFD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Attempt to minimize the reference segment to fit into the track. For this operation to succeed, the minimal span of the segment must not overlap any other segment already in the track. To reach the minimal span the perpandiculars are ripped up with an axis hint which is the center of the minimal span or the explicit value given as arguments {\f2 leftAxisHint} and {\f2 rightAxisHint} if {\f2 flags} contains respectively {\b Manipulator::LeftAxisHint} or {\b Manipulator::RightAxisHint}.\par This operation ripup the processed segment itself and its perpandiculars. \par }} {\xe \v forceToTrack\:Kite::Manipulator} {\xe \v Kite::Manipulator\:forceToTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool forceToTrack (size_t {\i i})}} \par {\bkmkstart AAAAAAAAFE} {\bkmkend AAAAAAAAFE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Try to insert the reference segment in the track at index {\f2 i} (in the cost table from {\b SegmentFsm}). The insertion is done by {\i forcibly} ripping up the overlapping segments {\b and} their perpandiculars.\par This operation ripup the processed segment neighbors (and their perpandiculars). \par }} {\xe \v forceOverLocals\:Kite::Manipulator} {\xe \v Kite::Manipulator\:forceOverLocals} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool forceOverLocals ()}} \par {\bkmkstart AAAAAAAAFF} {\bkmkend AAAAAAAAFF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Loop over all the candidate tracks and, insert in the first which all conflicting segments are locals (rip them up). \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Manipulator.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Manipulator.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Manipulator.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid NegociateWindow Class Reference\par \pard\plain {\tc\tcl2 \v NegociateWindow} {\xe \v NegociateWindow} {\bkmkstart AAAAAAAAFG} {\bkmkend AAAAAAAAFG} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform the routing, main {\b RoutingEvent} manager. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Types\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid enum {\b Stage} \{ {\b Negociation} = 1, {\b Packing} = 2 \}\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b destroy} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isInterrupted} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b KiteEngine} * {\b getKiteEngine} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Hurricane::Cell} * {\b getCell} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const Katabatic::GCellVector & {\b getGCells} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEventQueue} & {\b getEventQueue} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEventHistory} & {\b getEventHistory} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEventLoop} & {\b getEventLoop} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Stage} {\b getStage} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setGCells} (const Katabatic::GCellVector &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setInterrupt} (bool)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setStage} ({\b Stage})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid double {\b computeWirelength} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackElement} * {\b createTrackSegment} ({\b AutoSegment} *, unsigned int flags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b addRoutingEvent} ({\b TrackElement} *, unsigned int level)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b rescheduleEvent} ({\b RoutingEvent} *, unsigned int level)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b run} (unsigned int flags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b printStatistics} () const\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b NegociateWindow} * {\b create} ({\b KiteEngine} *)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform the routing, main {\b RoutingEvent} manager. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This object perform the routing. That is creates all the initial {\b RoutingEvent}, load them into the queue and then process the queue until it is empty, that is, the routing is finished.\par This object is the owner of the {\b RoutingEventQueue}, {\b RoutingEventHistory} and {\b RoutingEventLoop} used all troughout {\b RoutingEvent} and {\b SegmentFsm}. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Enumeration Documentation\par \pard\plain {\xe \v Stage\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:Stage} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b Stage}}} \par {\bkmkstart AAAAAAAAFH} {\bkmkend AAAAAAAAFH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The state under which the router is operating. \par }{\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Enumerator:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {\xe \v Negociation\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:Negociation} {\qr Negociation{\bkmkstart AAAAAAAAFI} {\bkmkend AAAAAAAAFI} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The normal mode, priority negociation with ripup. \par }\cell }{\row } {\xe \v Packing\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:Packing} {\qr Packing{\bkmkstart AAAAAAAAFJ} {\bkmkend AAAAAAAAFJ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Try to find a better placement for segment but just by looking for other fully free spaces. No ripup is performed. \par }\cell }{\row } } } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v create\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b create ({\b KiteEngine} * {\i kite}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAFK} {\bkmkend AAAAAAAAFK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The publicly avalaible contructor. Route the whole are defined by the {\b Kite} associated Cell abutment box. \par }} {\xe \v destroy\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:destroy} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void destroy ()}} \par {\bkmkstart AAAAAAAAFL} {\bkmkend AAAAAAAAFL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The publicly avalaible destructor. \par }} {\xe \v isInterrupted\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:isInterrupted} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isInterrupted () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFM} {\bkmkend AAAAAAAAFM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the {\b NegociateWindow} has received an interrupt request. \par }} {\xe \v getKiteEngine\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:getKiteEngine} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b KiteEngine} * getKiteEngine () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFN} {\bkmkend AAAAAAAAFN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The associated {\b KiteEngine}. \par }{ Referenced by NegociateWindow::printStatistics().}\par } {\xe \v getCell\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:getCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Hurricane::Cell} * getCell () const}} \par {\bkmkstart AAAAAAAAFO} {\bkmkend AAAAAAAAFO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The associated Cell. \par }} {\xe \v getGCells\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:getGCells} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const Katabatic::GCellVector & getGCells () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFP} {\bkmkend AAAAAAAAFP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A Copy of the vector of GCell from KatabaticEngine. The vector is copied but not the GCell themselves (shallow copy). \par }} {\xe \v getEventQueue\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:getEventQueue} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEventQueue} & getEventQueue (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFQ} {\bkmkend AAAAAAAAFQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b RoutingEventQueue}. \par }} {\xe \v getEventHistory\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:getEventHistory} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEventHistory} & getEventHistory (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFR} {\bkmkend AAAAAAAAFR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b RoutingEventHistory}. \par }} {\xe \v getEventLoop\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:getEventLoop} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEventLoop} & getEventLoop (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFS} {\bkmkend AAAAAAAAFS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b RoutingEventLoop}. \par }} {\xe \v getStage\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:getStage} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Stage} getStage () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFT} {\bkmkend AAAAAAAAFT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The stage (NegicateWindow::Stage) into which the {\b NegociateWindow} is running. \par }} {\xe \v setGCells\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:setGCells} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setGCells (const Katabatic::GCellVector & {\i v})}} \par {\bkmkstart AAAAAAAAFU} {\bkmkend AAAAAAAAFU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets the GCell vector from KatabaticEngine (perform a shallow copy). \par }} {\xe \v setInterrupt\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:setInterrupt} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setInterrupt (bool {\i state}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFV} {\bkmkend AAAAAAAAFV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets or unset the interruption flag. \par }} {\xe \v setStage\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:setStage} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setStage ({\b Stage} {\i stage}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFW} {\bkmkend AAAAAAAAFW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the stage ({\b NegociateWindow::Stage}) under which we are running. \par }} {\xe \v computeWirelength\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:computeWirelength} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b double computeWirelength ()}} \par {\bkmkstart AAAAAAAAFX} {\bkmkend AAAAAAAAFX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Compute the total wirelength of the circuit. It is not completly accurate because overlaps are not took into accounts. \par }{ Referenced by NegociateWindow::run().}\par } {\xe \v createTrackSegment\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:createTrackSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * createTrackSegment ({\b AutoSegment} * {\i autoSegment}, unsigned int {\i flags})}} \par {\bkmkstart AAAAAAAAFY} {\bkmkend AAAAAAAAFY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Build a {\b TrackSegment} from the {\b Katabatic::AutoSegment}. If {\f2 flags} contains Kite::KtLoadingStage then assume that we are in the initial loading stage (constructor). \par }} {\xe \v addRoutingEvent\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:addRoutingEvent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void addRoutingEvent ({\b TrackElement} * {\i segment}, unsigned int {\i level})}} \par {\bkmkstart AAAAAAAAFZ} {\bkmkend AAAAAAAAFZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a new {\b RoutingEvent} from {\b TrackElement} (if it doesn't already exists) and insert it into the queue with priority {\f2 level} . \par }{ Referenced by TrackSegment::reschedule().}\par } {\xe \v rescheduleEvent\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:rescheduleEvent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void rescheduleEvent ({\b RoutingEvent} * {\i event}, unsigned int {\i level}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAGA} {\bkmkend AAAAAAAAGA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Reschedule an event into the queue, with priority {\f2 level} . \par }{ Referenced by TrackSegment::reschedule().}\par } {\xe \v run\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:run} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void run (unsigned int {\i flags})}} \par {\bkmkstart AAAAAAAAGB} {\bkmkend AAAAAAAAGB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform the routing.\par {\f2 slowMotion} is not implemented yet. \par }} {\xe \v printStatistics\:Kite::NegociateWindow} {\xe \v Kite::NegociateWindow\:printStatistics} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void printStatistics () const}} \par {\bkmkstart AAAAAAAAGC} {\bkmkend AAAAAAAAGC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Display some statistics about the routing, compute the internal complete statistics. \par }{ Referenced by NegociateWindow::run().}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid NegociateWindow.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid NegociateWindow.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid NegociateWindow.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid RoutingEvent Class Reference\par \pard\plain {\tc\tcl2 \v RoutingEvent} {\xe \v RoutingEvent} {\bkmkstart AAAAAAAAGD} {\bkmkend AAAAAAAAGD} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Atomic Placement Request for a {\b TrackSegment}. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Classes\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b Key}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b RoutingEvent} cached key for maps. }\par}}} } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Types\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid enum {\b Mode} \{ {\b Negociate} =1, {\b Pack} =2, {\b Repair} =3 \}\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEvent} * {\b clone} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b destroy} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isCloned} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isValid} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isUnimplemented} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isProcessed} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isDisabled} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isForcedToHint} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isRipedByLocal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b getMode} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b canMinimize} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getState} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Key} & {\b getKey} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackElement} * {\b getSegment} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const vector< {\b TrackElement} * > & {\b getPerpandiculars} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getAxisHint} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getAxisHistory} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid long {\b getAxisWeight} ({\b DbU::Unit}) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Interval} & {\b getConstraints} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Interval} & {\b getOptimal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid float {\b getPriority} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getTracksNb} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getInsertState} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getEventLevel} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b revalidate} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b updateKey} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b process} ({\b RoutingEventQueue} &, {\b RoutingEventHistory} &, {\b RoutingEventLoop} &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setSegment} ({\b TrackElement} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEvent} * {\b reschedule} ({\b RoutingEventQueue} &, unsigned int eventLevel)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setMode} (unsigned int)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setState} (unsigned int)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setAxisHintFromParent} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b incInsertState} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b resetInsertState} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setEventLevel} (unsigned int)\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static unsigned int {\b getStage} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static size_t {\b getAllocateds} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static size_t {\b getProcesseds} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b resetProcesseds} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b setStage} (unsigned int)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b RoutingEvent} * {\b create} ({\b TrackElement} *, unsigned int mode={\b Negociate})\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Atomic Placement Request for a {\b TrackSegment}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The trackFrees attribute has to be reviewed not sure it's still useful.\par Cached key for stable sorting, see {\b RoutingEvent::Key}. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Enumeration Documentation\par \pard\plain {\xe \v Mode\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:Mode} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b Mode}}} \par {\bkmkstart AAAAAAAAGE} {\bkmkend AAAAAAAAGE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The working mode of the router, affect how events are to be handled. \par }{\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Enumerator:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {\xe \v Negociate\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:Negociate} {\qr Negociate{\bkmkstart AAAAAAAAGF} {\bkmkend AAAAAAAAGF} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This is the normal mode of operation, topological modifications and ripup are enableds. \par }\cell }{\row } {\xe \v Pack\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:Pack} {\qr Pack{\bkmkstart AAAAAAAAGG} {\bkmkend AAAAAAAAGG} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid First post-processing step. For each segment, tries to find a more compact position for a segment, but without riping any others. \par }\cell }{\row } {\xe \v Repair\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:Repair} {\qr Repair{\bkmkstart AAAAAAAAGH} {\bkmkend AAAAAAAAGH} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Second post-processing step, try to find a suitable location for a segment more aggressively. \par }\cell }{\row } } } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v getStage\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getStage} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getStage (){\f2 [static]}}} \par {\bkmkstart AAAAAAAAGI} {\bkmkend AAAAAAAAGI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The stage the router is in (see {\b RoutingEvent::Mode}). \par }{ Referenced by SegmentAction::doAction(), Manipulator::repackPerpandiculars(), RoutingEvent::reschedule(), RoutingEvent::revalidate(), SegmentFsm::SegmentFsm(), and RoutingEvent::setAxisHintFromParent().}\par } {\xe \v getAllocateds\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getAllocateds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getAllocateds (){\f2 [static]}}} \par {\bkmkstart AAAAAAAAGJ} {\bkmkend AAAAAAAAGJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The number of {\b RoutingEvent} currently allocateds. \par }} {\xe \v getProcesseds\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getProcesseds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getProcesseds (){\f2 [static]}}} \par {\bkmkstart AAAAAAAAGK} {\bkmkend AAAAAAAAGK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The number of {\b RoutingEvent} that have been processeds since the last call to {\b RoutingEvent::resetProcesseds()}. \par }{ Referenced by NegociateWindow::printStatistics(), RoutingEvent::process(), and RoutingEventLoop::update().}\par } {\xe \v resetProcesseds\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:resetProcesseds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void resetProcesseds (){\f2 [static]}}} \par {\bkmkstart AAAAAAAAGL} {\bkmkend AAAAAAAAGL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} Reset the number of processeds events. \par }{ Referenced by NegociateWindow::run().}\par } {\xe \v setStage\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:setStage} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int setStage (unsigned int {\i mode}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAGM} {\bkmkend AAAAAAAAGM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets the router's stage (see {\b RoutingEvent::Mode}). \par }} {\xe \v create\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEvent} * create ({\b TrackElement} * {\i element}, unsigned int {\i mode} = {\f2 {\b Negociate}}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAGN} {\bkmkend AAAAAAAAGN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i element} \cell }{The element for which to create the event. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i mode} \cell }{The mode into which this event will be valid.\cell } {\row } } {\b RoutingEvent} constructor. \par }{ Referenced by RoutingEventQueue::add(), and RoutingEventQueue::load().}\par } {\xe \v clone\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:clone} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEvent} * clone () const}} \par {\bkmkstart AAAAAAAAGO} {\bkmkend AAAAAAAAGO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid A clone of the event.\par }Cloning an event is slightly different from copying it (which is forbidden). There can be multiple events for one {\f2 element} but only one must be active at a time. This is a cheap way of implementing the rescheduling mechanism. The original event remains the active one, but it's cloned flag is raised. The cloned event is created inactive and with a null {\i eventLevel} . \par }{ Referenced by RoutingEvent::reschedule().}\par } {\xe \v destroy\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:destroy} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void destroy ()}} \par {\bkmkstart AAAAAAAAGP} {\bkmkend AAAAAAAAGP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The destructor. \par }} {\xe \v isCloned\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:isCloned} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isCloned () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAGQ} {\bkmkend AAAAAAAAGQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if this event has been cloned at least once. \par }} {\xe \v isValid\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:isValid} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isValid () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAGR} {\bkmkend AAAAAAAAGR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the cached informations from the {\i element} are valid (i.e. the element has not been changed). \par }} {\xe \v isUnimplemented\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:isUnimplemented} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isUnimplemented () const}} \par {\bkmkstart AAAAAAAAGS} {\bkmkend AAAAAAAAGS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the event has tried to use an unimplemented feature. \par }{ Referenced by Manipulator::canRipup(), and RoutingEvent::reschedule().}\par } {\xe \v isProcessed\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:isProcessed} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isProcessed () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAGT} {\bkmkend AAAAAAAAGT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the event has been processed. \par }{ Referenced by RoutingEvent::process(), and RoutingEvent::reschedule().}\par } {\xe \v isDisabled\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:isDisabled} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isDisabled () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAGU} {\bkmkend AAAAAAAAGU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the event is {\b not} the active one. It should be discarted by the algorithm. \par }{ Referenced by RoutingEvent::process().}\par } {\xe \v isForcedToHint\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:isForcedToHint} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isForcedToHint () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAGV} {\bkmkend AAAAAAAAGV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} the {\i element} must be placed exacltly on the given axis hint. \par }} {\xe \v isRipedByLocal\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:isRipedByLocal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isRipedByLocal () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAGW} {\bkmkend AAAAAAAAGW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} the {\i element} (global) has been riped up to place a local one. \par }} {\xe \v getMode\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getMode} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getMode () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAGX} {\bkmkend AAAAAAAAGX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the mode the event must be taken into account to. \par }} {\xe \v canMinimize\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:canMinimize} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canMinimize () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAGY} {\bkmkend AAAAAAAAGY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} the {\i element} could still be minimized. \par }{ Referenced by Manipulator::minimize().}\par } {\xe \v getState\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getState () const}} \par {\bkmkstart AAAAAAAAGZ} {\bkmkend AAAAAAAAGZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the mode the router is currently in. \par }{ Referenced by RoutingEvent::isUnimplemented().}\par } {\xe \v getKey\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getKey} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Key} & getKey () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHA} {\bkmkend AAAAAAAAHA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\i key} to use in map & queue for this event. \par }} {\xe \v getSegment\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getSegment () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHB} {\bkmkend AAAAAAAAHB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The associated segment. \par }{ Referenced by SegmentFsm::conflictSolveByHistory(), SegmentFsm::conflictSolveByPlaceds(), SegmentFsm::desaturate(), SegmentFsm::doActions(), SegmentFsm::insertInTrack(), Manipulator::ripupPerpandiculars(), SegmentFsm::SegmentFsm(), SegmentFsm::slackenTopology(), and SegmentFsm::solveFullBlockages().}\par } {\xe \v getPerpandiculars\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getPerpandiculars} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const vector< {\b TrackElement} * > & getPerpandiculars () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHC} {\bkmkend AAAAAAAAHC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A vector of cached perpandiculars to the associated segment. \par }{ Referenced by Manipulator::minimize(), Manipulator::repackPerpandiculars(), and Manipulator::ripupPerpandiculars().}\par } {\xe \v getAxisHint\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getAxisHint} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getAxisHint () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHD} {\bkmkend AAAAAAAAHD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The preferred position for the segment axis. \par }{ Referenced by RoutingEvent::getAxisWeight(), RoutingEvent::revalidate(), Manipulator::ripple(), and SegmentFsm::SegmentFsm().}\par } {\xe \v getAxisHistory\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getAxisHistory} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getAxisHistory () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHE} {\bkmkend AAAAAAAAHE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The previous position of the segment axis (before it's current position). \par }} {\xe \v getAxisWeight\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getAxisWeight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getAxisWeight ({\b DbU::Unit} {\i axis}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHF} {\bkmkend AAAAAAAAHF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The distance between {\f2 axis} and the preferred position. \par }{ Referenced by SegmentFsm::SegmentFsm().}\par } {\xe \v getConstraints\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Interval} & getConstraints () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHG} {\bkmkend AAAAAAAAHG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The range of legal positions for the axis. \par }{ Referenced by Manipulator::minimize(), Manipulator::ripupPerpandiculars(), and SegmentFsm::SegmentFsm().}\par } {\xe \v getOptimal\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getOptimal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Interval} & getOptimal () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHH} {\bkmkend AAAAAAAAHH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The range of positions for the optimal axis (cached). \par }{ Referenced by SegmentFsm::SegmentFsm().}\par } {\xe \v getPriority\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getPriority} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getPriority () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHI} {\bkmkend AAAAAAAAHI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The priority of the event, it quantify the degree of freedom of the segment. Currently it's computed from the length of the segment and it's slack: \[ priority = (slack(segment)+1.0) \times (length(segment)+1.0) \] A high priority means that the segment will be harder to place thus it will be scheduled first. With this function, longer segments will be placed first. \par }{ Referenced by RoutingEvent::process().}\par } {\xe \v getTracksNb\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getTracksNb} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getTracksNb () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHJ} {\bkmkend AAAAAAAAHJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The number of tracks avalaibles for the segment to be placed. \par }{ Referenced by SegmentFsm::SegmentFsm().}\par } {\xe \v getInsertState\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getInsertState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getInsertState () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHK} {\bkmkend AAAAAAAAHK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The kind of track insertion that will be intended. It's a counter whose values have the following meaning:{ \par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid {\b 1} : normal insert.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid {\b 2} : shrink the segment to it's minimum before inserting.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid {\b 3} : attempt to ripup conflicting others before inserting. \par} }}{ Referenced by SegmentFsm::insertInTrack().}\par } {\xe \v getEventLevel\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:getEventLevel} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getEventLevel () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHL} {\bkmkend AAAAAAAAHL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The event level of the event, used to tweak the order inside the event queue. It differs from the priority in the sense that it isn't a topologicaly based value, but manipulated by the algorithm. \par }{ Referenced by RoutingEvent::process().}\par } {\xe \v revalidate\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:revalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void revalidate ()}} \par {\bkmkstart AAAAAAAAHM} {\bkmkend AAAAAAAAHM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform an event revalidation. \par }{ Referenced by SegmentFsm::SegmentFsm(), and RoutingEvent::updateKey().}\par } {\xe \v updateKey\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:updateKey} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateKey (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHN} {\bkmkend AAAAAAAAHN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Update the key with the new values from the event, the key {\i must} not be inserted in the queue when this method is called. \par }} {\xe \v process\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:process} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void process ({\b RoutingEventQueue} & {\i queue}, {\b RoutingEventHistory} & {\i history}, {\b RoutingEventLoop} & {\i loop})}} \par {\bkmkstart AAAAAAAAHO} {\bkmkend AAAAAAAAHO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i queue} \cell }{The main event queue. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i history} \cell }{The event's history list. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i loop} \cell }{The loop detector.\cell } {\row } } Process the event, that is:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid First, check if there is no looping, if any, do not process the event but dicard it (marked as unimplemented).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Second, attempt to place the associated segment. Pass it to the relevant function, according to the router's mode ({\f2 _processNegociate()} , {\f2 processPack()} or {\f2 _processRepair()} ). Once processed, the event is added to both {\f2 history} (for the record) and {\f2 loop} to check if we are not looping. \par} }} {\xe \v setSegment\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:setSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setSegment ({\b TrackElement} * {\i element})}} \par {\bkmkstart AAAAAAAAHP} {\bkmkend AAAAAAAAHP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Change the associated {\f2 segment} . Used only by {\b TrackSegment::swapTrack()}. \par }{ Referenced by TrackSegment::swapTrack().}\par } {\xe \v reschedule\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:reschedule} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEvent} * reschedule ({\b RoutingEventQueue} & {\i queue}, unsigned int {\i eventLevel})}} \par {\bkmkstart AAAAAAAAHQ} {\bkmkend AAAAAAAAHQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The newly reinserted event. Depending on the cases it could be itself.\par }Insert or reinsert an event in the scheduler. The {\f2 eventLevel} parameter only allows to increase the level (if it is less than the current level of the event, it will be ignored).\par {\b Cloning Management.} As an event could be cloned, if we try to re-insert a disabled original, we must first lookup the currently cloned active event. This is done through the associated {\f2 segment} which must always be associated with the active event (if any).\par {\b Unimplemented Protection.} If the unimplemented flag is set the reschedule is cancelled ({\f2 NULL} is returned).\par {\b Unprocessed Event.} The event is still in queue, waiting to be processed, then just repush it in the queue with it's new level.\par {\b Processed Event.} Clone the already processed one, activate it and push it on the queue.\par {\b Router's Mode.} The mode is also updated. \par }{ Referenced by SegmentAction::doAction(), and RoutingEvent::reschedule().}\par } {\xe \v setMode\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:setMode} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setMode (unsigned int {\i mode})}} \par {\bkmkstart AAAAAAAAHR} {\bkmkend AAAAAAAAHR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the mode in which the event must be processed (see {\b RoutingEvent::Mode}). \par }{ Referenced by SegmentAction::doAction(), and RoutingEvent::reschedule().}\par } {\xe \v setState\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:setState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setState (unsigned int {\i state})}} \par {\bkmkstart AAAAAAAAHS} {\bkmkend AAAAAAAAHS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Proxy mutator for {\b DataNegociate::setState()}. \par }{ Referenced by RoutingEvent::process().}\par } {\xe \v setAxisHintFromParent\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:setAxisHintFromParent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setAxisHintFromParent ()}} \par {\bkmkstart AAAAAAAAHT} {\bkmkend AAAAAAAAHT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets the axis hint from it's parent segment. The parentage is found through the {\b TrackSegment} parentage. \par }{ Referenced by RoutingEvent::revalidate().}\par } {\xe \v incInsertState\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:incInsertState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void incInsertState (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHU} {\bkmkend AAAAAAAAHU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Increment the insertion state.\par {\b See also:} \~ {\b RoutingEvent::getInsertState()}. \par }{ Referenced by SegmentFsm::insertInTrack().}\par } {\xe \v resetInsertState\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:resetInsertState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void resetInsertState (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHV} {\bkmkend AAAAAAAAHV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Reset the insertion state.\par {\b See also:} \~ {\b RoutingEvent::getInsertState()}. \par }{ Referenced by SegmentFsm::slackenTopology().}\par } {\xe \v setEventLevel\:Kite::RoutingEvent} {\xe \v Kite::RoutingEvent\:setEventLevel} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setEventLevel (unsigned int {\i level}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHW} {\bkmkend AAAAAAAAHW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the event level (user-controlled re-ordering). \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEvent.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEvent.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEvent.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid RoutingEventHistory Class Reference\par \pard\plain {\tc\tcl2 \v RoutingEventHistory} {\xe \v RoutingEventHistory} {\bkmkstart AAAAAAAAHZ} {\bkmkend AAAAAAAAHZ} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid History of {\b RoutingEvent}. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEventHistory} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b ~RoutingEventHistory} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b empty} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b size} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEvent} * {\b getNth} (size_t) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEvent} * {\b getRNth} (size_t) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b push} ({\b RoutingEvent} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b clear} ()\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid History of {\b RoutingEvent}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid An history of all the routing events. We can afford to keep an history because while one event is a relatively big object, there is not that much of them (their number is roughly proportional to the number of TrackSegments).\par One event is likely to appear more than one time in the history, in fact it will apprears each time it is ripped up.\par Lastly, it is a way to keep track of all the allocated RoutingEvents. When history is deleted it will deleted all the events that it knows of. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Constructor & Destructor Documentation\par \pard\plain {\xe \v RoutingEventHistory\:Kite::RoutingEventHistory} {\xe \v Kite::RoutingEventHistory\:RoutingEventHistory} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEventHistory} ()}} \par {\bkmkstart AAAAAAAAIA} {\bkmkend AAAAAAAAIA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Construct an empty {\b RoutingEventHistory}. \par }} {\xe \v ~RoutingEventHistory\:Kite::RoutingEventHistory} {\xe \v Kite::RoutingEventHistory\:~RoutingEventHistory} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b ~{\b RoutingEventHistory} ()}} \par {\bkmkstart AAAAAAAAIB} {\bkmkend AAAAAAAAIB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Delete a {\b RoutingEventHistory}.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: The deletion of this object triggers the deletion of\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid all the {\b RoutingEvent} that are referenced in it. \par }}} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v empty\:Kite::RoutingEventHistory} {\xe \v Kite::RoutingEventHistory\:empty} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool empty () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAIC} {\bkmkend AAAAAAAAIC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the history is empty. \par }} {\xe \v size\:Kite::RoutingEventHistory} {\xe \v Kite::RoutingEventHistory\:size} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t size () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAID} {\bkmkend AAAAAAAAID} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the number of events in the history. \par }{ Referenced by RoutingEventHistory::getNth(), and RoutingEventHistory::getRNth().}\par } {\xe \v getNth\:Kite::RoutingEventHistory} {\xe \v Kite::RoutingEventHistory\:getNth} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEvent} * getNth (size_t {\i pos}) const}} \par {\bkmkstart AAAAAAAAIE} {\bkmkend AAAAAAAAIE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The event at index {\f2 pos} from the beginning of the history ({\f2 NULL} if {\f2 pos} exeed the size). \par }} {\xe \v getRNth\:Kite::RoutingEventHistory} {\xe \v Kite::RoutingEventHistory\:getRNth} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEvent} * getRNth (size_t {\i pos}) const}} \par {\bkmkstart AAAAAAAAIF} {\bkmkend AAAAAAAAIF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The event at index {\f2 pos} from the end of the history ({\f2 NULL} if {\f2 pos} exeed the size). \par }{ Referenced by SegmentFsm::conflictSolveByHistory().}\par } {\xe \v push\:Kite::RoutingEventHistory} {\xe \v Kite::RoutingEventHistory\:push} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void push ({\b RoutingEvent} * {\i event})}} \par {\bkmkstart AAAAAAAAIG} {\bkmkend AAAAAAAAIG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Push a new {\b RoutingEvent} in the history. \par }{ Referenced by RoutingEvent::process().}\par } {\xe \v clear\:Kite::RoutingEventHistory} {\xe \v Kite::RoutingEventHistory\:clear} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void clear ()}} \par {\bkmkstart AAAAAAAAIH} {\bkmkend AAAAAAAAIH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Clear the history, also remove the {\b RoutingEvent} that are pointed to. \par }{ Referenced by RoutingEventHistory::~RoutingEventHistory().}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEventHistory.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEventHistory.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEventHistory.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid RoutingEventLoop Class Reference\par \pard\plain {\tc\tcl2 \v RoutingEventLoop} {\xe \v RoutingEventLoop} {\bkmkstart AAAAAAAAII} {\bkmkend AAAAAAAAII} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Simple loop dectector for {\b RoutingEvent}. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEventLoop} (size_t depth=10, int limit=20)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isLooping} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid int {\b getMaxCount} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const std::vector< Element > & {\b getElements} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b update} (size_t id)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b erase} (size_t id)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Simple loop dectector for {\b RoutingEvent}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b RoutingEventLoop} can be roughly understood as a truncated histogram of the {\f2 depth} last (in the time meaning) greatest riped up elements.\par The loop detector keep track of the {\f2 depth} {\b TrackElement} with the greatest processing count. {\b TrackElement} are just identified through the {\f2 id} of their associated AutoSegment. Each entry in the loop table contains:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The {\f2 id} of the associated {\b TrackSegment} ({\b Katabatic::AutoSegment}).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The {\f2 count} of times it has been processed\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The {\f2 timestamp} of the latest time it has been updated.\par} The table (implemented as {\f2 vector<>} ) it kept sorted on the timestamp (decreasing). Whenever there is more than {\f2 depth} elements in the table, the oldest one are discarted (regardless of their count). Obviously, there are pathological cases into which a loop cannot be detected, but so far it has not happened so a more robust approach seems not necessary at this time.\par Whenever the count of an element reaches {\f2 countLimit} , the looping flag is set. It will remains set unless the faulty element is manually removed. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Constructor & Destructor Documentation\par \pard\plain {\xe \v RoutingEventLoop\:Kite::RoutingEventLoop} {\xe \v Kite::RoutingEventLoop\:RoutingEventLoop} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEventLoop} (size_t {\i depth} = {\f2 10}, int {\i countLimit} = {\f2 20})}} \par {\bkmkstart AAAAAAAAIJ} {\bkmkend AAAAAAAAIJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Construct a loop detector that handle {\f2 depth} differents segments and has a looping threshold of {\f2 countLimit} . \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v isLooping\:Kite::RoutingEventLoop} {\xe \v Kite::RoutingEventLoop\:isLooping} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isLooping () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAIK} {\bkmkend AAAAAAAAIK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the loop threshold has been reached for at least one element. \par }{ Referenced by RoutingEvent::process().}\par } {\xe \v getMaxCount\:Kite::RoutingEventLoop} {\xe \v Kite::RoutingEventLoop\:getMaxCount} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b int getMaxCount () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAIL} {\bkmkend AAAAAAAAIL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The maximal count an element as reached so far. \par }{ Referenced by RoutingEvent::process().}\par } {\xe \v getElements\:Kite::RoutingEventLoop} {\xe \v Kite::RoutingEventLoop\:getElements} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const std::vector< Element > & getElements () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAIM} {\bkmkend AAAAAAAAIM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The complete table elements. \par }{ Referenced by RoutingEvent::process().}\par } {\xe \v update\:Kite::RoutingEventLoop} {\xe \v Kite::RoutingEventLoop\:update} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void update (size_t {\i id})}} \par {\bkmkstart AAAAAAAAIN} {\bkmkend AAAAAAAAIN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Update the loop, telling that element {\f2 id} has appreared one more time. \par }{ Referenced by RoutingEvent::process().}\par } {\xe \v erase\:Kite::RoutingEventLoop} {\xe \v Kite::RoutingEventLoop\:erase} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void erase (size_t {\i id})}} \par {\bkmkstart AAAAAAAAIO} {\bkmkend AAAAAAAAIO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Remove the entry related to element {\f2 id} in the table. The state of the table is fully recomputed after the removal (looping flag & maximum count).\par This method is used when a loop has been encountered, presumably on element {\f2 id} , and we want to continue. To avoid the loop detector yelling at each check, the associated {\b TrackElement} should be invalidated and it's reference removed from the table. \par }{ Referenced by RoutingEvent::process().}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEventLoop.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEventLoop.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEventLoop.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid RoutingEventQueue Class Reference\par \pard\plain {\tc\tcl2 \v RoutingEventQueue} {\xe \v RoutingEventQueue} {\bkmkstart AAAAAAAAIP} {\bkmkend AAAAAAAAIP} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The priority Queue of {\b RoutingEvent}. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEventQueue} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b ~RoutingEventQueue} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b empty} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b size} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getTopEventLevel} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEvent} * {\b pop} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b load} (const vector< {\b TrackElement} *> &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b add} ({\b TrackElement} *, unsigned int level)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b push} ({\b RoutingEvent} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b repush} ({\b RoutingEvent} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b repushInvalidateds} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b commit} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b clear} ()\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The priority Queue of {\b RoutingEvent}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {\bkmkstart AAAAAAAAIQ} {\bkmkend AAAAAAAAIQ} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Implementation Details \par} {\tc\tcl2 \v Implementation Details} The {\b RoutingEventQueue} is build upon a STL multiset<> and is sorted according to the {\b RoutingEvent::Key} attribute of the event. The key attribute has been designed specifically to be used with this queue. It provides the features:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Sort the {\b RoutingEvent} according to their priority. Higher priority mainly means more constrained segment, which must be routed first.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The attributes of {\b RoutingEvent} may change while inserted in the queue. The key provide a cached value of those attributes ensuring a stable sorting order.\par} For more details about the sorting order, refer to {\b RoutingEvent::Key}.\par {\b Insertion, Reinsertion & Commit} \par When pushing a new event into the queue, the actual insertion into the multimap is delayed until the next call to {\f2 RoutingEvent::commit()} . The to be inserted events are stored into a request set which is processed when commit is called. At commit time, the {\b RoutingEvent::Key} cache is updated just before inserting the element.\par When repushing an event, the event is immediatly withdrawn from the queue and put into the request set.\par {\b Mutiple Event for one Segment} \par As {\b RoutingEvent} can be cloned, there may be more than one event pointing to a segment. But there must be {\i only one active event} , the one which is pointed to by the segment. As a result, there maybe multiple events for an unique segment in the queue, but {\i only one active event} , the one that will be processed. \par} }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Constructor & Destructor Documentation\par \pard\plain {\xe \v RoutingEventQueue\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:RoutingEventQueue} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEventQueue} ()}} \par {\bkmkstart AAAAAAAAIR} {\bkmkend AAAAAAAAIR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Contructor, create an empty queue. \par }} {\xe \v ~RoutingEventQueue\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:~RoutingEventQueue} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b ~{\b RoutingEventQueue} ()}} \par {\bkmkstart AAAAAAAAIS} {\bkmkend AAAAAAAAIS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Destructor.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: The destruction of the queue do not delete the\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b RoutingEvent} that may still be in it (they shouldn't an a warning is issued). \par }}} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v empty\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:empty} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool empty () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAIT} {\bkmkend AAAAAAAAIT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if there is the queue is empty. \par }} {\xe \v size\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:size} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t size () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAIU} {\bkmkend AAAAAAAAIU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The number of events in the queue. \par }} {\xe \v getTopEventLevel\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:getTopEventLevel} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getTopEventLevel () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAIV} {\bkmkend AAAAAAAAIV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The greatest event level the queue has ever reached (always increasing, starting from zero). \par }} {\xe \v pop\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:pop} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEvent} * pop ()}} \par {\bkmkstart AAAAAAAAIW} {\bkmkend AAAAAAAAIW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Remove the top element of the queue (i.e. the one with the highest priority) and return it. If the queue is empty, {\f2 NULL} is returned. \par }} {\xe \v load\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:load} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void load (const vector< {\b TrackElement} *> & {\i segments})}} \par {\bkmkstart AAAAAAAAIX} {\bkmkend AAAAAAAAIX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Load a whole vector of {\b TrackElement} into the queue, for each element:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Create a {\b RoutingEvent} linked to the element. To be reviewed: replace any previous event.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Insert the new {\b RoutingEvent} into the queue.\par} {\i No commit is needed after this operation.} \par }} {\xe \v add\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:add} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void add ({\b TrackElement} * {\i element}, unsigned int {\i level})}} \par {\bkmkstart AAAAAAAAIY} {\bkmkend AAAAAAAAIY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a new {\b RoutingEvent} in the queue with {\f2 level} , associated to {\f2 element} . A commit is needed afterwards.\par To be reviewed: replace any previous event on element. \par }{ Referenced by NegociateWindow::addRoutingEvent().}\par } {\xe \v push\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:push} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void push ({\b RoutingEvent} * {\i event}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAIZ} {\bkmkend AAAAAAAAIZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Push a {\b RoutingEvent} in the queue. Effective only after the next commit. \par }{ Referenced by RoutingEventQueue::add(), and RoutingEventQueue::repush().}\par } {\xe \v repush\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:repush} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void repush ({\b RoutingEvent} * {\i event})}} \par {\bkmkstart AAAAAAAAJA} {\bkmkend AAAAAAAAJA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Force a complete queue re-insertion for {\f2 event} . The event is immediatly withdrawn from the queue and put into the insertion request set.\par If the {\f2 event} is not already in the queue, works like {\b RoutingEventQueue::push()}. \par }{ Referenced by RoutingEventQueue::repushInvalidateds(), and RoutingEvent::reschedule().}\par } {\xe \v repushInvalidateds\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:repushInvalidateds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void repushInvalidateds ()}} \par {\bkmkstart AAAAAAAAJB} {\bkmkend AAAAAAAAJB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Using the list of invalidated segments from the {\b Session}, repush them if:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid They have an associated event.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The event is not {\i unimplemented} , {\i disabled} or {\i processed} . \par} }{ Referenced by RoutingEvent::process().}\par } {\xe \v commit\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:commit} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void commit ()}} \par {\bkmkstart AAAAAAAAJC} {\bkmkend AAAAAAAAJC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Process the insertion request set and actually insert it's elements into the queue. Perform a RoutingEvent::key update prior to insertion. \par }{ Referenced by RoutingEvent::process().}\par } {\xe \v clear\:Kite::RoutingEventQueue} {\xe \v Kite::RoutingEventQueue\:clear} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void clear ()}} \par {\bkmkstart AAAAAAAAJD} {\bkmkend AAAAAAAAJD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Empty the queue. Issue a warning if the queue is not empty (i.e. some events remains to be processeds). \par }{ Referenced by RoutingEventQueue::~RoutingEventQueue().}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEventQueue.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEventQueue.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingEventQueue.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid RoutingPlane Class Reference\par \pard\plain {\tc\tcl2 \v RoutingPlane} {\xe \v RoutingPlane} {\bkmkstart AAAAAAAAJE} {\bkmkend AAAAAAAAJE} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Array of Tracks in one Layer. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isHorizontal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isVertical} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b KiteEngine} * {\b getKiteEngine} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingLayerGauge} * {\b getLayerGauge} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getDirection} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getDepth} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getAxisMin} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getAxisMax} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getTrackMin} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getTrackMax} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingPlane} * {\b getTop} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingPlane} * {\b getBottom} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Layer} * {\b getLayer} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Layer} * {\b getBlockageLayer} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getTracksSize} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b computeTracksSize} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getTrackPosition} (size_t index) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Track} * {\b getTrackByIndex} (size_t index) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Track} * {\b getTrackByPosition} ({\b DbU::Unit} axis, unsigned int mode={\b KtNearest}) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b _check} (unsigned int &overlaps) const\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b RoutingPlane} * {\b create} ({\b KiteEngine} *, size_t depth)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Array of Tracks in one Layer. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A {\b RoutingPlane} is an array of {\b Track} covering a rectangular area. For now the area is the abutment box of the to be routed Cell. Tracks are spaced evenly and according to the configuration of the relevant RoutingLayerGauge.\par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v create\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingPlane} * create ({\b KiteEngine} * {\i engine}, size_t {\i depth}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAJF} {\bkmkend AAAAAAAAJF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i engine} \cell }{The associated engine. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i depth} \cell }{The Layer depth of the plane. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The newly created {\b RoutingPlane}.\par }The {\b RoutingPlane} public constructor. The {\f2 depth} is in the sense of the RoutingGauge. \par }} {\xe \v isHorizontal\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:isHorizontal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isHorizontal () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJG} {\bkmkend AAAAAAAAJG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the preferred routing direction is horizontal (the actual direction of the tracks). \par }} {\xe \v isVertical\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:isVertical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isVertical () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJH} {\bkmkend AAAAAAAAJH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the preferred routing direction is vertical (the actual direction of the tracks). \par }} {\xe \v getKiteEngine\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getKiteEngine} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b KiteEngine} * getKiteEngine () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJI} {\bkmkend AAAAAAAAJI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The associated {\b KiteEngine}. \par }{ Referenced by Track::getKiteEngine().}\par } {\xe \v getLayerGauge\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getLayerGauge} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingLayerGauge} * getLayerGauge () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJJ} {\bkmkend AAAAAAAAJJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The RoutingLayerGauge of the plane. \par }{ Referenced by RoutingPlane::getBlockageLayer(), and RoutingPlane::getLayer().}\par } {\xe \v getDirection\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getDirection} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDirection () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJK} {\bkmkend AAAAAAAAJK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The preferred routing direction (Katabatic::KbHorizontal or Katabatic::KbVertical). \par }{ Referenced by RoutingPlane::create(), RoutingPlane::isHorizontal(), and RoutingPlane::isVertical().}\par } {\xe \v getDepth\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getDepth} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getDepth () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJL} {\bkmkend AAAAAAAAJL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The depth of the associated layer (as defined by the RoutingLayerGauge). \par }{ Referenced by Track::getDepth().}\par } {\xe \v getAxisMin\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getAxisMin} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getAxisMin () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJM} {\bkmkend AAAAAAAAJM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The axis coordinate of the first/lowest track. \par }} {\xe \v getAxisMax\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getAxisMax} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getAxisMax () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJN} {\bkmkend AAAAAAAAJN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The axis coordinate of the last/highest track. \par }} {\xe \v getTrackMin\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getTrackMin} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getTrackMin () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJO} {\bkmkend AAAAAAAAJO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The minimum bound of all track. \par }} {\xe \v getTrackMax\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getTrackMax} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getTrackMax () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJP} {\bkmkend AAAAAAAAJP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The maximum bound of all track. \par }} {\xe \v getTop\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getTop} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingPlane} * getTop () const}} \par {\bkmkstart AAAAAAAAJQ} {\bkmkend AAAAAAAAJQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b RoutingPlane} immediatly above this one. \par }} {\xe \v getBottom\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getBottom} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingPlane} * getBottom () const}} \par {\bkmkstart AAAAAAAAJR} {\bkmkend AAAAAAAAJR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b RoutingPlane} immediatly below this one. \par }} {\xe \v getLayer\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Layer} * getLayer () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJS} {\bkmkend AAAAAAAAJS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The associated routing layer. \par }{ Referenced by Track::getLayer().}\par } {\xe \v getBlockageLayer\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getBlockageLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Layer} * getBlockageLayer () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJT} {\bkmkend AAAAAAAAJT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The blockage layer associated to the routing layer. \par }{ Referenced by Track::getBlockageLayer().}\par } {\xe \v getTracksSize\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getTracksSize} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getTracksSize () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJU} {\bkmkend AAAAAAAAJU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The number of tracks in the array. \par }} {\xe \v computeTracksSize\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:computeTracksSize} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t computeTracksSize () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJV} {\bkmkend AAAAAAAAJV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The number of tracks {\i to create} in the array.\par Helper method that compute the number of tracks in the array from the area of the Cell to be routed and the RoutingLayerGauge characteristics (the Cell is accessible through the {\b KiteEngine}). \par }{ Referenced by RoutingPlane::create().}\par } {\xe \v getTrackPosition\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getTrackPosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getTrackPosition (size_t {\i index}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAJW} {\bkmkend AAAAAAAAJW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The axis of the track at {\f2 index} in the array. \par }} {\xe \v getTrackByIndex\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getTrackByIndex} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Track} * getTrackByIndex (size_t {\i index}) const}} \par {\bkmkstart AAAAAAAAJX} {\bkmkend AAAAAAAAJX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The track at {\f2 index} in the array. \par }{ Referenced by Track::getNextTrack(), and Track::getPreviousTrack().}\par } {\xe \v getTrackByPosition\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:getTrackByPosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Track} * getTrackByPosition ({\b DbU::Unit} {\i axis}, unsigned int {\i mode} = {\f2 {\b KtNearest}}) const}} \par {\bkmkstart AAAAAAAAJY} {\bkmkend AAAAAAAAJY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The track which position is nearest from {\f2 axis} . The meaning of {\i nearest} is defined by {\f2 mode} (classic rouding options). \par }{ Referenced by SegmentFsm::conflictSolveByPlaceds(), NegociateWindow::createTrackSegment(), RoutingEvent::revalidate(), Manipulator::ripupPerpandiculars(), and SegmentFsm::SegmentFsm().}\par } {\xe \v _check\:Kite::RoutingPlane} {\xe \v Kite::RoutingPlane\:_check} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool _check (unsigned int & {\i overlaps}) const}} \par {\bkmkstart AAAAAAAAJZ} {\bkmkend AAAAAAAAJZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if no errors have been found (i.e. the database is coherent).\par Perform a coherency check on all tracks part of the array. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingPlane.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingPlane.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid RoutingPlane.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid SegmentAction Class Reference\par \pard\plain {\tc\tcl2 \v SegmentAction} {\xe \v SegmentAction} {\bkmkstart AAAAAAAAKA} {\bkmkend AAAAAAAAKA} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Store request for an event to be generated on a {\b TrackElement}. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Types\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid enum {\b Type} \{ {\b Self} = (1<< 0), {\b Other} = (1<< 1), {\b Perpandicular} = (1<< 2), {\b Insert} = (1<< 3), {\b Ripup} = (1<< 4), {\b RipedByLocal} = (1<< 5), {\b ResetRipup} = (1<< 6), {\b ToRipupLimit} = (1<< 7) , {\b AxisHint} = (1<< 9), {\b PackingMode} = (1<<10), {\b ToState} = (1<<11), {\b EventLevel1} = (1<<12), {\b EventLevel2} = (1<<13), {\b EventLevel3} = (1<<14), {\b EventLevel4} = (1<<15), {\b EventLevel5} = (1<<16), {\b SelfInsert} = Self |Insert, {\b SelfRipup} = Self |Ripup, {\b SelfRipupPerpand} = Self |Ripup|Perpandicular, {\b SelfRipupPerpandWithAxisHint} = Self |Ripup|Perpandicular|EventLevel4|AxisHint, {\b OtherRipup} = Other|Ripup, {\b OtherRipupPerpandAndPushAside} = Other|Ripup|Perpandicular|EventLevel3|AxisHint, {\b OtherRipupPerpandAndPacking} = Other|Ripup|Perpandicular|EventLevel4|PackingMode \}\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b SegmentAction} ({\b TrackElement} *, unsigned int type, {\b DbU::Unit} axisHint=0, unsigned int toState=0)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackElement} * {\b getSegment} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getType} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setAxisHint} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b setFlag} (unsigned int)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b doAction} ({\b RoutingEventQueue} &)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Store request for an event to be generated on a {\b TrackElement}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid When an event on a {\b Kite::TrackElement} is being processed (with the {\b SegmentFsm} helper), it may generate events on {\b TrackElement} already placed and belonging either to the same net or other ones. Those events are not generated and queued immediatly but instead {\b SegmentAction}, requesting the event generation are created and stored into a simple vector in {\b SegmentFsm}. The last operation of the {\b SegmentFsm} object is to call the {\b SegmentAction::doAction()} method on all the action to actually generate and queue the events. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Enumeration Documentation\par \pard\plain {\xe \v Type\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:Type} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b Type}}} \par {\bkmkstart AAAAAAAAKB} {\bkmkend AAAAAAAAKB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Indicates the kind of action to be performed on the segment. In the following {\b flags} and {\b masks} descriptions, we uses the term {\i reference segment} for the {\b TrackElement} which is associated with the currently processed {\b RoutingEvent} (also referenced in {\b SegmentFsm}).\par Here is the list of the availables actions that can be performed when (re)scheduling a {\b RoutingEvent}. It is here that we uses the {\b RoutingEvent} level feature to perform a local reordering of the top of the queue. Reordering is used to allows perpandiculars to be routed {\i before} the reference segment (instead of after) or {\i other} segments in conflict.\par { \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b SegmentAction::SelfInsert}\par {\b Action:} The reference segment is to be inserted in a {\b Track} (placed).\par {\b Event Level:} Unchanged.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b SegmentAction::SelfRipup}\par {\b Action:} The reference segment is to be ripped up.\par {\b Event Level:} Unchanged.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b SegmentAction::SelfRipupPerpand}\par {\b Action:} Ripup a segment which is a perpandicular to the reference segment. Ordering considerations: this perpandicular will be put back into the {\b RoutingEvent} queue with a lower level (priority) than the reference segment, so it will be processed again {\i after} the reference segment.\par {\b Event Level:} Unchanged.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b SegmentAction::SelfRipupPerpandWithAxisHint}\par {\b Action:} Ripup a segment which is a perpandicular to the reference segment, supplies an axis hint and put it back into the {\b RoutingEvent} queue so that it will be processed {\i before} the reference segment.\par {\b Event Level:} Increased to {\b SegmentAction::EventLevel4}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b SegmentAction::OtherRipup}\par {\b Action:} Ripping up a segment from another net and in the same direction as the reference segment.\par {\b Event Level:} Unchanged.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b SegmentAction::OtherRipupPerpandAndPushAside}\par {\b Action:} Ripping up a segment from another net and in perpandicular direction. The level is elevated so it's priority is greater than the reference segment this it will be reprocessed first. An axis hint is also supplied in order to make room for the reference segment.\par {\b Event Level:} Increased to {\b SegmentAction::EventLevel3}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b SegmentAction::OtherRipupPerpandAndPacking}\par {\b Action:} Ripping up a segment from another net and in perpandicular direction. The level is elevated so it's priority is greater than the reference segment this it will be reprocessed first. The generated event is in packing mode only.\par {\b Event Level:} Increased to {\b SegmentAction::EventLevel4}. \par} }{\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Enumerator:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {\xe \v Self\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:Self} {\qr Self{\bkmkstart AAAAAAAAKC} {\bkmkend AAAAAAAAKC} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} The segment associated to the action is the reference segment {\i or segments from the same net} . \par }\cell }{\row } {\xe \v Other\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:Other} {\qr Other{\bkmkstart AAAAAAAAKD} {\bkmkend AAAAAAAAKD} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} The segment associated to the action is {\b not} from the same net as the reference segment. \par }\cell }{\row } {\xe \v Perpandicular\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:Perpandicular} {\qr Perpandicular{\bkmkstart AAAAAAAAKE} {\bkmkend AAAAAAAAKE} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} The action concern a perpandicular to the reference segment. \par }\cell }{\row } {\xe \v Insert\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:Insert} {\qr Insert{\bkmkstart AAAAAAAAKF} {\bkmkend AAAAAAAAKF} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} Request that the segment is to be inserted in the given track. It is the task of {\b SegmentFsm} to determine that there is sufficent space to do so. \par }\cell }{\row } {\xe \v Ripup\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:Ripup} {\qr Ripup{\bkmkstart AAAAAAAAKG} {\bkmkend AAAAAAAAKG} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} Request that the segment is to be ripped up. \par }\cell }{\row } {\xe \v RipedByLocal\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:RipedByLocal} {\qr RipedByLocal{\bkmkstart AAAAAAAAKH} {\bkmkend AAAAAAAAKH} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} Indicate that the segment has been ripped up by a local one. \par }\cell }{\row } {\xe \v ResetRipup\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:ResetRipup} {\qr ResetRipup{\bkmkstart AAAAAAAAKI} {\bkmkend AAAAAAAAKI} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} The ripup count is to be reset. \par }\cell }{\row } {\xe \v ToRipupLimit\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:ToRipupLimit} {\qr ToRipupLimit{\bkmkstart AAAAAAAAKJ} {\bkmkend AAAAAAAAKJ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} The ripup count is directly increased to the ripup limit, triggering a state change the next time the segment will be processed. \par }\cell }{\row } {\xe \v AxisHint\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:AxisHint} {\qr AxisHint{\bkmkstart AAAAAAAAKK} {\bkmkend AAAAAAAAKK} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} An axis hint has been supplied, and is to be passed to the generated {\b RoutingEvent}. \par }\cell }{\row } {\xe \v PackingMode\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:PackingMode} {\qr PackingMode{\bkmkstart AAAAAAAAKL} {\bkmkend AAAAAAAAKL} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} Whether the {\b RoutingEvent} should be processed in {\i packing} mode or {\i negociated} mode (transmitted to the {\b RoutingEvent}). \par }\cell }{\row } {\xe \v ToState\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:ToState} {\qr ToState{\bkmkstart AAAAAAAAKM} {\bkmkend AAAAAAAAKM} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} Force the change of state of the {\b RoutingEvent} (i.e. {\b DataNegociate}). Normally the state change is done through the increase of the ripup count in {\b DataNegociate}. \par }\cell }{\row } {\xe \v EventLevel1\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:EventLevel1} {\qr EventLevel1{\bkmkstart AAAAAAAAKN} {\bkmkend AAAAAAAAKN} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} Increase the level to {\i at least} {\b 1} . \par }\cell }{\row } {\xe \v EventLevel2\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:EventLevel2} {\qr EventLevel2{\bkmkstart AAAAAAAAKO} {\bkmkend AAAAAAAAKO} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} Increase the level to {\i at least} {\b 2} . \par }\cell }{\row } {\xe \v EventLevel3\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:EventLevel3} {\qr EventLevel3{\bkmkstart AAAAAAAAKP} {\bkmkend AAAAAAAAKP} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} Increase the level to {\i at least} {\b 3} . \par }\cell }{\row } {\xe \v EventLevel4\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:EventLevel4} {\qr EventLevel4{\bkmkstart AAAAAAAAKQ} {\bkmkend AAAAAAAAKQ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} Increase the level to {\i at least} {\b 4} . \par }\cell }{\row } {\xe \v EventLevel5\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:EventLevel5} {\qr EventLevel5{\bkmkstart AAAAAAAAKR} {\bkmkend AAAAAAAAKR} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} Increase the level to {\i at least} {\b 5} . \par }\cell }{\row } {\xe \v SelfInsert\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:SelfInsert} {\qr SelfInsert{\bkmkstart AAAAAAAAKS} {\bkmkend AAAAAAAAKS} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Mask]} , see {\b SegmentAction::Type}. \par }\cell }{\row } {\xe \v SelfRipup\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:SelfRipup} {\qr SelfRipup{\bkmkstart AAAAAAAAKT} {\bkmkend AAAAAAAAKT} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Mask]} , see {\b SegmentAction::Type}. \par }\cell }{\row } {\xe \v SelfRipupPerpand\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:SelfRipupPerpand} {\qr SelfRipupPerpand{\bkmkstart AAAAAAAAKU} {\bkmkend AAAAAAAAKU} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Mask]} , see {\b SegmentAction::Type}. \par }\cell }{\row } {\xe \v SelfRipupPerpandWithAxisHint\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:SelfRipupPerpandWithAxisHint} {\qr SelfRipupPerpandWithAxisHint{\bkmkstart AAAAAAAAKV} {\bkmkend AAAAAAAAKV} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Mask]} , see {\b SegmentAction::Type}. \par }\cell }{\row } {\xe \v OtherRipup\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:OtherRipup} {\qr OtherRipup{\bkmkstart AAAAAAAAKW} {\bkmkend AAAAAAAAKW} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Mask]} , see {\b SegmentAction::Type}. \par }\cell }{\row } {\xe \v OtherRipupPerpandAndPushAside\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:OtherRipupPerpandAndPushAside} {\qr OtherRipupPerpandAndPushAside{\bkmkstart AAAAAAAAKX} {\bkmkend AAAAAAAAKX} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Mask]} , see {\b SegmentAction::Type}. \par }\cell }{\row } {\xe \v OtherRipupPerpandAndPacking\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:OtherRipupPerpandAndPacking} {\qr OtherRipupPerpandAndPacking{\bkmkstart AAAAAAAAKY} {\bkmkend AAAAAAAAKY} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Mask]} , see {\b SegmentAction::Type}. \par }\cell }{\row } } } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Constructor & Destructor Documentation\par \pard\plain {\xe \v SegmentAction\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:SegmentAction} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b SegmentAction} ({\b TrackElement} * {\i segment}, unsigned int {\i type}, {\b DbU::Unit} {\i axisHint} = {\f2 0}, unsigned int {\i toState} = {\f2 0})}} \par {\bkmkstart AAAAAAAAKZ} {\bkmkend AAAAAAAAKZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i segment} \cell }{On what the action is to be performed. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i type} \cell }{Defines the type of action, see {\b SegmentAction::Type}. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i axisHint} \cell }{Specifies a preferred axis. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i toState} \cell }{The {\b DataNegociate::SlackState} into which the segment is to be set.\cell } {\row } } Create segment action. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v getSegment\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:getSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getSegment () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALA} {\bkmkend AAAAAAAALA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The associated {\f2 segment} . \par }} {\xe \v getType\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:getType} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b SegmentAction::Type} getType () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALB} {\bkmkend AAAAAAAALB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The action to be performed. \par }} {\xe \v setAxisHint\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:setAxisHint} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setAxisHint ({\b DbU::Unit} {\i axis}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAALC} {\bkmkend AAAAAAAALC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The axis preferred position to be transmitted to the generated event. The transmition will be effective {\i only} if the SegmentAction::Type::AxisHint flag is set. \par }} {\xe \v setFlag\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:setFlag} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int setFlag (unsigned int {\i flags}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAALD} {\bkmkend AAAAAAAALD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Allow to change the action type by indivually setting up the flags. \par }} {\xe \v doAction\:Kite::SegmentAction} {\xe \v Kite::SegmentAction\:doAction} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void doAction ({\b RoutingEventQueue} & {\i queue})}} \par {\bkmkstart AAAAAAAALE} {\bkmkend AAAAAAAALE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Actually perform the action. That is, build and queue the appropriate event for the segment. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid SegmentFsm.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid SegmentFsm.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid SegmentFsm.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid SegmentFsm Class Reference\par \pard\plain {\tc\tcl2 \v SegmentFsm} {\xe \v SegmentFsm} {\bkmkstart AAAAAAAALF} {\bkmkend AAAAAAAALF} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Pseudo-decorator to process a {\b RoutingEvent}. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Types\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid enum {\b State} \{ {\b MissingData} = (1<<0), {\b EmptyTrackList} = (1<<1), {\b Inserted} = (1<<2), {\b Self} = (1<<3), {\b Other} = (1<<4), {\b Ripup} = (1<<5), {\b MaximumSlack} = (1<<6), {\b SelfInserted} = Self | Inserted, {\b OtherRipup} = Other | Ripup, {\b SelfMaximumSlack} = Self | MaximumSlack \}\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b SegmentFsm} ({\b RoutingEvent} *, {\b RoutingEventQueue} &, {\b RoutingEventHistory} &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isFullBlocked} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEvent} * {\b getEvent} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEventQueue} & {\b getQueue} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingEventHistory} & {\b getHistory} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getState} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DataNegociate} * {\b getData} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Interval} & {\b getConstraint} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Interval} & {\b getOptimal} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid vector< TrackCost > & {\b getCosts} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid TrackCost & {\b getCost} (size_t)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Track} * {\b getTrack} (size_t)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getBegin} (size_t)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getEnd} (size_t)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid vector< {\b SegmentAction} > & {\b getActions} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setState} (unsigned int)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b addAction} ({\b TrackElement} *, unsigned int type, {\b DbU::Unit} axisHint=0, unsigned int toState=0)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b doActions} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b clearActions} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b insertInTrack} (size_t)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b conflictSolveByHistory} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b conflictSolveByPlaceds} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b desaturate} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b slackenTopology} (unsigned int flags=0)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b solveFullBlockages} ()\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Pseudo-decorator to process a {\b RoutingEvent}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b SegmentFsm} class actually perform the placement of the {\b Kite::TrackElement} of the {\b Kite::RoutingEvent}. It structured around three goals:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Implement the finite state machine for the {\b Kite::DataNegociate} state.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Provide a kind of decoration on the RoutingEvent/TrackElement (it do not abide by the definition from Design Patterns).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Cache a lot of on-the-fly computed datas needed during the {\b SegmentFsm} lifetime and the Manipulator(s) it may uses.\par} {\bkmkstart AAAAAAAALG} {\bkmkend AAAAAAAALG} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Update Mechanism \par} {\tc\tcl2 \v Update Mechanism} The constructor of {\b SegmentFsm} triggers the update of the {\b RoutingEvent} and through it {\b DataNegociate}.\par} {\bkmkstart AAAAAAAALH} {\bkmkend AAAAAAAALH} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Slackening / FSM Transitions \par} {\tc\tcl2 \v Slackening / FSM Transitions} A transition occurs in the FSM whenener all the availables ripup methods for a segment have failed. Failure means that the topology of the net itself must be altered to allow a greater level of flexibility. Modifying the net topology means to give the current segment some more slack.\par Availables slackening operations:{ \par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 1.\tab {\b DataNegociate::RipupPerpandiculars} ({\b Manipulator}) place the segments before any of it's perpandiculars are placed to allow a maximum track choice.\par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 2.\tab {\b DataNegociate::Minimize} ({\b Manipulator}) try to fit the segment in a hole in a track, perform a hole detection.\par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 3.\tab {\b DataNegociate::Dogleg} ({\b Manipulator}) create a dogleg matching {\i the first track candidate} with a non-nul overlap.\par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 4.\tab {\b DataNegociate::Slacken} ({\b Manipulator}) to be reviewed.\par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 5.\tab {\b DataNegociate::ConflictSolveByHistory} ({\b SegmentFsm}) try to find a break point on the segment, based on the ripup history.\par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 6.\tab {\b DataNegociate::ConflictSolveByPlaceds} ({\b SegmentFsm}) try to find a break point on the segment, based on the current position of segments on the candidate tracks.\par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 7.\tab {\b DataNegociate::MoveUp} ({\b Manipulator}) try to move up the segment.\par} Simple slackening operations are defined in {\b Manipulator} and complex ones directly in {\b SegmentFsm}.\par} {\bkmkstart AAAAAAAALI} {\bkmkend AAAAAAAALI} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Non-Slackening Operations \par} {\tc\tcl2 \v Non-Slackening Operations} In addition, some operation that do not modifies the topology are availables:{ \par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 1.\tab {\b Manipulator::forceOverLocals()} mostly for global segments to ripup a track from all it's locals.\par \pard\plain \s90\fi-360\li360\widctlpar\fs20\cgrid 2.\tab {\b SegmentFsm::insertInTrack()} automates the three subsequent ripup trials. \par} \par} }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Enumeration Documentation\par \pard\plain {\xe \v State\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:State} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b State}}} \par {\bkmkstart AAAAAAAALJ} {\bkmkend AAAAAAAALJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Indicates what the {\b SegmentFsm} has done the processed {\b TrackElement}, possible values are:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b SegmentFsm::MissingData}, this is an error condition, the {\b TrackElement} do not have associated {\b DataNegociate} structure. Nothing is done.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b SegmentFsm::EmptyTrackList}, no {\b Track} is available for placement (free or used).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b SegmentFsm::SelfInserted}, the {\b TrackElement} can be successfully inserted in a {\b Track} (i.e. without overlap).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b SegmentFsm::SelfMaximumSlack}, nothing can be done to further slacken the {\b TrackElement}, it is at maximum ripup of the last possible state (no more topological modifications are possibles).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b SegmentFsm::OtherRipup}, the {\b TrackElement} can be inserted but it needs the ripup of some others. \par} }{\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Enumerator:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {\xe \v MissingData\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:MissingData} {\qr MissingData{\bkmkstart AAAAAAAALK} {\bkmkend AAAAAAAALK} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} , see SegmentFsm::SegmentFsmValue. \par }\cell }{\row } {\xe \v EmptyTrackList\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:EmptyTrackList} {\qr EmptyTrackList{\bkmkstart AAAAAAAALL} {\bkmkend AAAAAAAALL} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} , see SegmentFsm::SegmentFsmValue. \par }\cell }{\row } {\xe \v Inserted\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:Inserted} {\qr Inserted{\bkmkstart AAAAAAAALM} {\bkmkend AAAAAAAALM} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} , the {\b TrackElement} can be inserted in a {\b Track}. \par }\cell }{\row } {\xe \v Self\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:Self} {\qr Self{\bkmkstart AAAAAAAALN} {\bkmkend AAAAAAAALN} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} , the action is related to the processed {\b TrackSegment}. \par }\cell }{\row } {\xe \v Other\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:Other} {\qr Other{\bkmkstart AAAAAAAALO} {\bkmkend AAAAAAAALO} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} , the action is {\b not} related to the processed {\b TrackSegment}, that is, others are being topologically modificated or riped up. \par }\cell }{\row } {\xe \v Ripup\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:Ripup} {\qr Ripup{\bkmkstart AAAAAAAALP} {\bkmkend AAAAAAAALP} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} , segement, that are not the processed one are being ripped up. \par }\cell }{\row } {\xe \v MaximumSlack\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:MaximumSlack} {\qr MaximumSlack{\bkmkstart AAAAAAAALQ} {\bkmkend AAAAAAAALQ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Flag]} , the processed segment as reached it's maximum ripup count on the last possible slackening state. \par }\cell }{\row } {\xe \v SelfInserted\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:SelfInserted} {\qr SelfInserted{\bkmkstart AAAAAAAALR} {\bkmkend AAAAAAAALR} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Mask]} , see SegmentFsm::SegmentFsmValue. \par }\cell }{\row } {\xe \v OtherRipup\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:OtherRipup} {\qr OtherRipup{\bkmkstart AAAAAAAALS} {\bkmkend AAAAAAAALS} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Mask]} , see SegmentFsm::SegmentFsmValue. \par }\cell }{\row } {\xe \v SelfMaximumSlack\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:SelfMaximumSlack} {\qr SelfMaximumSlack{\bkmkstart AAAAAAAALT} {\bkmkend AAAAAAAALT} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b [Mask]} , see SegmentFsm::SegmentFsmValue. \par }\cell }{\row } } } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Constructor & Destructor Documentation\par \pard\plain {\xe \v SegmentFsm\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:SegmentFsm} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b SegmentFsm} ({\b RoutingEvent} * {\i event}, {\b RoutingEventQueue} & {\i queue}, {\b RoutingEventHistory} & {\i history})}} \par {\bkmkstart AAAAAAAALU} {\bkmkend AAAAAAAALU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i event} \cell }{The {\b RoutingEvent} to be processed. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i queue} \cell }{The {\b RoutingEvent} queue. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i history} \cell }{The complete history of {\b RoutingEvent}.\cell } {\row } } Construct a {\b SegmentFsm} from a {\b RoutingEvent}. The constructor is in charge of computing all the cached values. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v isFullBlocked\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:isFullBlocked} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isFullBlocked () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALV} {\bkmkend AAAAAAAALV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if there are Tracks avalaibles but the constraints are such that none is actually usable. \par }} {\xe \v getEvent\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getEvent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEvent} * getEvent () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALW} {\bkmkend AAAAAAAALW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The currently processed {\b RoutingEvent} ({\i cached} ). \par }{ Referenced by SegmentFsm::doActions(), SegmentFsm::slackenTopology(), and SegmentFsm::solveFullBlockages().}\par } {\xe \v getQueue\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getQueue} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEventQueue} & getQueue () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALX} {\bkmkend AAAAAAAALX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b RoutingEvent} queue ({\i cached} ). \par }} {\xe \v getHistory\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getHistory} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingEventHistory} & getHistory () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALY} {\bkmkend AAAAAAAALY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b RoutingEvent} history ({\i cached} ). \par }{ Referenced by SegmentFsm::conflictSolveByHistory().}\par } {\xe \v getState\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getState () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALZ} {\bkmkend AAAAAAAALZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The state (SegmentFsm::SegmentFsmValues) which the {\b SegmentFsm} has computed for the {\b RoutingEvent}. This is {\b not} the state of the {\b DataNegociate} \par }} {\xe \v getData\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getData} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DataNegociate} * getData (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAMA} {\bkmkend AAAAAAAAMA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b DataNegociate} of the {\b TrackElement} ({\i cached} ). \par }} {\xe \v getConstraint\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getConstraint} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} & getConstraint (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAMB} {\bkmkend AAAAAAAAMB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The interval into which the segment axis can be set (computed from the topological constraints and the placement constraints on the already placed perpandiculars). \par }} {\xe \v getOptimal\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getOptimal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} & getOptimal (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAMC} {\bkmkend AAAAAAAAMC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The interval for an optimal placement of the segment axis. \par }} {\xe \v getCosts\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getCosts} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b vector< TrackCost > & getCosts (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAMD} {\bkmkend AAAAAAAAMD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The table of cost for all the candidates Tracks of the segment. The table is sorted in increasing cost order (see TrackCost). \par }{ Referenced by SegmentFsm::desaturate(), Manipulator::forceOverLocals(), Manipulator::makeDogleg(), and Manipulator::minimize().}\par } {\xe \v getCost\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getCost} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b TrackCost & getCost (size_t {\i i}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAME} {\bkmkend AAAAAAAAME} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The cost at index {\f2 i} in the table. \par }{ Referenced by SegmentFsm::desaturate(), Manipulator::forceOverLocals(), Manipulator::forceToTrack(), Manipulator::insertInTrack(), Manipulator::minimize(), and SegmentFsm::solveFullBlockages().}\par } {\xe \v getTrack\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Track} * getTrack (size_t {\i i}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAMF} {\bkmkend AAAAAAAAMF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b Track} for cost at index {\f2 i} in the table. \par }{ Referenced by SegmentFsm::desaturate(), Manipulator::forceOverLocals(), Manipulator::forceToTrack(), Manipulator::insertInTrack(), Manipulator::makeDogleg(), Manipulator::minimize(), and Manipulator::shrinkToTrack().}\par } {\xe \v getBegin\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getBegin} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getBegin (size_t {\i i}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAMG} {\bkmkend AAAAAAAAMG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The overlapping {\i begin} index in {\b Track} for cost at index {\f2 i} in the table. \par }{ Referenced by SegmentFsm::desaturate(), Manipulator::forceOverLocals(), Manipulator::forceToTrack(), Manipulator::insertInTrack(), Manipulator::makeDogleg(), Manipulator::minimize(), and Manipulator::shrinkToTrack().}\par } {\xe \v getEnd\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getEnd} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getEnd (size_t {\i i}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAMH} {\bkmkend AAAAAAAAMH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The overlapping {\i end} index in {\b Track} for cost at index {\f2 i} in the table. \par }{ Referenced by SegmentFsm::desaturate(), Manipulator::forceOverLocals(), Manipulator::forceToTrack(), Manipulator::insertInTrack(), Manipulator::makeDogleg(), Manipulator::minimize(), and Manipulator::shrinkToTrack().}\par } {\xe \v getActions\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:getActions} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b vector< {\b SegmentAction} * > & getActions (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAMI} {\bkmkend AAAAAAAAMI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The table of {\b SegmentAction}, that is the delayed requests for {\b RoutingEvent} creation. \par }{ Referenced by Manipulator::shrinkToTrack().}\par } {\xe \v setState\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:setState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int setState (unsigned int {\i state}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAMJ} {\bkmkend AAAAAAAAMJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} Sets the state of the state... \par }{ Referenced by SegmentFsm::desaturate(), Manipulator::forceOverLocals(), Manipulator::forceToTrack(), Manipulator::insertInTrack(), and Manipulator::shrinkToTrack().}\par } {\xe \v addAction\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:addAction} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void addAction ({\b TrackElement} * {\i segment}, unsigned int {\i type}, {\b DbU::Unit} {\i axisHint} = {\f2 0}, unsigned int {\i toState} = {\f2 0})}} \par {\bkmkstart AAAAAAAAMK} {\bkmkend AAAAAAAAMK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Request the creation of a new delayed {\b RoutingEvent}, for the meaning of the parameters, see {\b SegmentAction::SegmentAction}. \par }{ Referenced by SegmentFsm::desaturate(), Manipulator::forceOverLocals(), Manipulator::forceToTrack(), Manipulator::insertInTrack(), Manipulator::minimize(), Manipulator::relax(), Manipulator::repackPerpandiculars(), Manipulator::ripple(), Manipulator::ripup(), Manipulator::ripupPerpandiculars(), Manipulator::shrinkToTrack(), and SegmentFsm::slackenTopology().}\par } {\xe \v doActions\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:doActions} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool doActions ()}} \par {\bkmkstart AAAAAAAAML} {\bkmkend AAAAAAAAML} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Actually generate RoutingEvent(s) from the SegmentAction(s). \par }} {\xe \v clearActions\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:clearActions} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void clearActions (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAMM} {\bkmkend AAAAAAAAMM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Clear the the table of requested actions, whithout generating them. \par }{ Referenced by Manipulator::insertInTrack(), and SegmentFsm::slackenTopology().}\par } {\xe \v insertInTrack\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:insertInTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool insertInTrack (size_t {\i i})}} \par {\bkmkstart AAAAAAAAMN} {\bkmkend AAAAAAAAMN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Try to insert the {\b TrackElement} in the {\b Track} at index {\f2 i} (in the cost table). Return {\b true} if the insertion is possible.\par The insertion is not done at this stage, but a set of ripup actions is emitted to allow insertion the next time the segment will be processed.\par Three subsequent trials are done before giving up on inserting the segment:{ \par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 1.\tab {\b Manipulator::insertInTrack()}, try to push asides the neighbors.\par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 2.\tab {\b Manipulator::shrinkToTrack()}, try squeeze the segment in an existing free space.\par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 3.\tab {\b Manipulator::forceToTrack()}, perform a complete ripup of all the neighbors and their perpandiculars.\par} The event keeps track of the insertion attempt step (see {\b RoutingEvent::getInsertState()}). \par }} {\xe \v conflictSolveByHistory\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:conflictSolveByHistory} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool conflictSolveByHistory ()}} \par {\bkmkstart AAAAAAAAMO} {\bkmkend AAAAAAAAMO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if a suitable dogleg has been created in the segment.\par Initially, global segments may be very long, and a placement solution in which each one is placed on a track of it's own may not be realisable. In that case, at least one of the global segment must be broken. The figure below illustrate the case: {\b (a)} , {\b (b)} , {\b (c)} form a first cluster and {\b (d)} , {\b (e)} , {\b (f)} form a second one. Due to the constraints of the segments the remaining free track cannot be the same in both clusters. The only solution to place {\b (g)} is to break it into two sub-globals. The whole point of the conflict solve is to correctly detect the cluster and choose the breaking point.\par This variant of the conflict solve method try to guess the track span for which there is a conflict by looking at the event history.\par {\b Dislodger Definition:} \par A segment is said to be a dislodger if it matches the two following criterions:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid It's span intersect the to be inserted segment span.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid It has been placed on a track inside the perpandicular span of the to be placed segment.\par} For the time beeing we limit the search to the last three dislodgers, to not waste too much time looking back the event history. We merge overlapping intervals into one (see the undocumented class {\f2 UnionIntervals} and {\f2 RipupHistory} in {\f2 SegmentFsm.cpp} ).\par For the time beeing we only look on the track into which the to be inserted segment wants to be placed.\par Then we try to break the to be placed segment, first under the lower bound (source) of the conflicting interval then, in case of failure under the upper bound (target).\par \par }} {\xe \v conflictSolveByPlaceds\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:conflictSolveByPlaceds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool conflictSolveByPlaceds ()}} \par {\bkmkstart AAAAAAAAMP} {\bkmkend AAAAAAAAMP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if a suitable dogleg has been created in the segment {\i or} a dislodger has been moved up.\par This methods achieve the same goal as {\b SegmentFsm::conflictSolveByHistory()} but uses a different strategy.\par Instead of looking through the history to find dislodgers it analyses the placed segments in all the candidates tracks for the to be placed segment. Unlike it's sibling method, which creates only one dogleg, as it uses the {\b Manipulator::relax()} method, it may creates up to two doglegs.\par {\b Synthetic Description} \par { \par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 1.\tab For each track, find the dislodgers, merge the overlaps into one interval and store the length of the longuest overlap (aka conflict).\par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 2.\tab Sort the tracks according to decreasing longuest overlap/confict.\par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 3.\tab For each track in the sorted list, look for a dislodger under the middle of the to be placed segment. If no dislodger is present at this place go to the next track. Otherwise:{ \par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid {\i The dislodger is local} , then try to relax the to placed segment around the dislodger.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid {\i The dislodger is global} , try to move it up, if it is not possible, fallback to the relax approach.\par} \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 4.\tab Quit on the first successful move up or relax.\par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 5.\tab If there is no candidate tracks, this means the vertical constraints are too tight, in that case, ripup the perpandiculars (fallback plan).\par} {\b Interval Accounting} \par Only global conflicting segments are took into account. Local segments may be took into account if they overlap global ones (all part of the same net). All overlapping segments are merged into one big conflict interval. The whole length of a conflict interval is took into account event if it's overlap with the to be placed segment is only partial.\par {\b {\b Track} Ordering (lexicographic)} \par { \par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 1.\tab The longuest (in one interval) conflict length.\par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 2.\tab The longuest cumulative conflict length (all interval summed up).\par} Interval accounting and {\b Track} ordering is managed through the undocumented {\f2 Cs1Candidate} class implemented in {\f2 SegmentFsm.cpp} .\par \par }} {\xe \v desaturate\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:desaturate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool desaturate ()}} \par {\bkmkstart AAAAAAAAMQ} {\bkmkend AAAAAAAAMQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Try to create a suitable empty space in a cost {\b Track} by moving up {\b TrackElement} in conflict. \par }} {\xe \v slackenTopology\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:slackenTopology} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool slackenTopology (unsigned int {\i flags} = {\f2 0})}} \par {\bkmkstart AAAAAAAAMR} {\bkmkend AAAAAAAAMR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Modificate the topology of the {\b TrackElement} to slacken it. It is the implementation of the slakening finite state machine. \par }} {\xe \v solveFullBlockages\:Kite::SegmentFsm} {\xe \v Kite::SegmentFsm\:solveFullBlockages} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool solveFullBlockages ()}} \par {\bkmkstart AAAAAAAAMS} {\bkmkend AAAAAAAAMS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Try to solve a fully blocked configuration. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid SegmentFsm.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid SegmentFsm.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid SegmentFsm.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid SegmentObserver Class Reference\par \pard\plain {\tc\tcl2 \v SegmentObserver} {\xe \v SegmentObserver} {\bkmkstart AAAAAAAAMT} {\bkmkend AAAAAAAAMT} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Observer on the base AutoSegment. }}\par Inheritance diagram for SegmentObserver:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKite_1_1SegmentObserver__inherit__graph.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par } \par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b notify} (unsigned int flags)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Observer on the base AutoSegment. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The observer that will be hooked into the observable in the associated canonical AutoSegment. Used to propagate the invalidation/revalidation events from AutoSegment toward {\b TrackSegment}.\par As a secondary function, it is used by the {\b Session::lookup()} method to quicly retrieve {\b TrackSegment} from {\b Katabatic::AutoSegment}. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v notify\:Kite::SegmentObserver} {\xe \v Kite::SegmentObserver\:notify} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void notify (unsigned int {\i flags}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAMU} {\bkmkend AAAAAAAAMU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Implement the asymmetric invalidate/revalidate policy described in {\b Kite::Session}. The invalidate is immediatly passed on while the revalidate is ignored. \par }{ Reimplemented from {\b BaseObserver}.}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackElement.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackElement.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackElement.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Session Class Reference\par \pard\plain {\tc\tcl2 \v Session} {\xe \v Session} {\bkmkstart AAAAAAAAMV} {\bkmkend AAAAAAAAMV} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Kite} update {\b Session}. }}\par Inheritance diagram for Session:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKite_1_1Session__inherit__graph.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par } \par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b Session} * {\b open} ({\b KiteEngine} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b Session} * {\b get} (const char *message=NULL)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b Katabatic::Session} * {\b base} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static bool {\b isEmpty} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b KiteEngine} * {\b getKiteEngine} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static Configuration * {\b getConfiguration} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b Net} * {\b getBlockageNet} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b NegociateWindow} * {\b getNegociateWindow} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b Katabatic::GCell} * {\b getGCellUnder} ({\b DbU::Unit}, {\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b addInsertEvent} ({\b TrackElement} *, {\b Track} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b addRemoveEvent} ({\b TrackElement} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b addMoveEvent} ({\b TrackElement} *, {\b Track} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b addSortEvent} ({\b Track} *, bool forced=false)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static size_t {\b revalidate} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b TrackElement} * {\b lookup} ({\b Segment} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b TrackElement} * {\b lookup} ({\b AutoSegment} *)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Kite} update {\b Session}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Session} extend the Katabatic update session to the {\b Kite} router level. Mainly by managing {\b Track} update.\par {\b Difference between {\b Kite} & Katabatic sessions:} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid In Katabatic, segments are actually moved {\i before} the revalidation, then {\i during} the revalidation, contacts and topologies are adjusteds\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid In {\b Kite}, nothing is moved until the revalidation. Requests for segment displacement are queued for the session.\par} {\b Asymmetry between invalidation & revalidation:} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid When a {\b TrackSegment} (or directly an AutoSegment) is invalidated both associated AutoSegment and {\b TrackSegment} are invalidated (through the Observer mechanism).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid When an AutoSegment is revalidated, the {\b TrackSegment} is {\b not} immediatly revalidated. See the revalidate algorithm for more details.\par} {\b Indirect {\b TrackSegment} invalidation:} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackSegment} invalidation do not result only from direct insertion in {\b Track}. For example, any or all of it's perpandicular can be invalidated trough the {\b Katabatic::Session} update (the perpandicular {\b Katabatic::AutoSegment} is revalidated, generating invalidation on their associated {\b TrackSegment}).\par} For details on how Katabatic Sessions works, have a look to {\b Katabatic::Session}.\par {\bkmkstart AAAAAAAAMW} {\bkmkend AAAAAAAAMW} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid The Session Mechanism. \par} {\tc\tcl2 \v The Session Mechanism.} Delayed modification procedure :{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Modifications events are recorded (queued) into the {\b Session}. At this step, no modification are actually done, the data-base retains it's previous state and coherency.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The {\f2 {\b revalidate()}} procedure is called (or the {\b Session} is closed), then all the modification events are applied. The data-base is in now in it's new state.\par} \par} {\bkmkstart AAAAAAAAMX} {\bkmkend AAAAAAAAMX} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid The Revalidate Algorithm. \par} {\tc\tcl2 \v The Revalidate Algorithm.} Revalidation steps :{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Process all remove events. detach {\b TrackSegment} from their {\b Track}, but do not remove the pointer from the internal {\f2 vector} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Pack all {\b Track} in which removal have took place.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Process all insert events. {\b This is the time {\b TrackSegment} are moved into their new {\b Track} (physical displacement)} . It is at this point that the invalidation of both AutoSegment and {\b TrackSegment} is done.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Call the {\b Katabatic::Session::revalidate()} method which will recompute the correct contact extensions and topologies. {\i After} this step the Katabatic data-base is up to date, but {\i not} the {\b Kite} one. AutoSegment are revalidated.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Recompute the canonical position of source and target of all invalidateds {\b TrackSegment} (take account of extention modifications). The set of invalidated {\b TrackSegment} is computed from the revalidated AutoSegment, that is AutoSegment that are canonical.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Perform a sort() on all {\b Track} that have been modifieds.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Now that the size of the segments have been accurately computed, look for revalidateds {\b TrackSegment} that:{ \par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 1.\tab Can be reduced, generate a track remove event.\par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 2.\tab Must be raised, generate a routing event (put into the queue).\par} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Process the additional track remove events.\par} {\b Note:} We cannot use the Observer mechanism to automatically update {\b TrackSegment} from an AutoSegment, because we must wait for all AutoSegments (canonical or not) involved into the {\b TrackSegment} to be up to date before we can update it.\par {\b Note:} Have to talk about the special case when new canonical AutoSegment appears after dogleg creation.\par} {\bkmkstart AAAAAAAAMY} {\bkmkend AAAAAAAAMY} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid The Lookup Mechanism \par} {\tc\tcl2 \v The Lookup Mechanism} There are two lookup mechanisms:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid From a {\b Hurricane::Segment}, we uses the Katabatic segment lookup table (slow, stored in a {\f2 map<>} ).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid From a {\b Katabatic::AutoSegment}, we uses the Observer, it's owner is the {\b TrackSegment} (fast). \par} \par} }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v open\:Kite::Session} {\xe \v Kite::Session\:open} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Session} * open ({\b KiteEngine} * {\i kite}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAMZ} {\bkmkend AAAAAAAAMZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i kite} \cell }{A {\b Kite} ToolEngine on which to work. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid A new {\b Kite} update {\b Session}.\par }Open a new {\b Kite} update {\b Session} on the {\f2 kite} {\f2 ToolEngine} . At this point only one session can be opened at a time. Attempt to open a second one will result in an exception. \par }} {\xe \v get\:Kite::Session} {\xe \v Kite::Session\:get} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Session} * get (const char * {\i message} = {\f2 NULL}){\f2 [static]}}} \par {\bkmkstart AAAAAAAANA} {\bkmkend AAAAAAAANA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The currently opened session, {\f2 NULL} if no session has been opened. \par }{ Referenced by NegociateWindow::run().}\par } {\xe \v base\:Kite::Session} {\xe \v Kite::Session\:base} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Katabatic::Session} * base (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAANB} {\bkmkend AAAAAAAANB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b Session}, casted as it's base object. \par }} {\xe \v isEmpty\:Kite::Session} {\xe \v Kite::Session\:isEmpty} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isEmpty (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAANC} {\bkmkend AAAAAAAANC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Ensure that the {\b Session} is empty and can be closed (deleted) safely. \par }{ Referenced by NegociateWindow::run().}\par } {\xe \v getKiteEngine\:Kite::Session} {\xe \v Kite::Session\:getKiteEngine} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b KiteEngine} * getKiteEngine (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAND} {\bkmkend AAAAAAAAND} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b Kite} ToolEngine associated to the current update session (proxy helper). \par }{ Referenced by Manipulator::canRipup(), SegmentFsm::conflictSolveByHistory(), SegmentFsm::conflictSolveByPlaceds(), NegociateWindow::createTrackSegment(), SegmentAction::doAction(), RoutingEvent::process(), RoutingEvent::revalidate(), Manipulator::ripple(), Manipulator::ripupPerpandiculars(), NegociateWindow::run(), SegmentFsm::SegmentFsm(), and NegociateWindow::setGCells().}\par } {\xe \v getConfiguration\:Kite::Session} {\xe \v Kite::Session\:getConfiguration} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b Configuration * getConfiguration (){\f2 [static]}}} \par {\bkmkstart AAAAAAAANE} {\bkmkend AAAAAAAANE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b Kite} Configuration of the Router (proxy helper). \par }} {\xe \v getBlockageNet\:Kite::Session} {\xe \v Kite::Session\:getBlockageNet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Net} * getBlockageNet (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAANF} {\bkmkend AAAAAAAANF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The net used to create blockage components (proxy helper). \par }{ Referenced by TrackFixedSegment::create().}\par } {\xe \v getNegociateWindow\:Kite::Session} {\xe \v Kite::Session\:getNegociateWindow} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b NegociateWindow} * getNegociateWindow (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAANG} {\bkmkend AAAAAAAANG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The current {\b NegociateWindow} (proxy helper). \par }{ Referenced by TrackSegment::_postDoglegs(), and TrackSegment::reschedule().}\par } {\xe \v getGCellUnder\:Kite::Session} {\xe \v Kite::Session\:getGCellUnder} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Katabatic::GCell} * getGCellUnder ({\b DbU::Unit} {\i x}, {\b DbU::Unit} {\i y}){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAANH} {\bkmkend AAAAAAAANH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The GCell under {\f2 } (x,y) (proxy helper, see {\b Katabatic::GCellGrid::getGCell()}). \par }{ Referenced by SegmentFsm::conflictSolveByHistory().}\par } {\xe \v addInsertEvent\:Kite::Session} {\xe \v Kite::Session\:addInsertEvent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void addInsertEvent ({\b TrackElement} * {\i segment}, {\b Track} * {\i track}){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAANI} {\bkmkend AAAAAAAANI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i segment} \cell }{An AutoSegment to insert in a {\b Track}. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i track} \cell }{The {\b Track} into which the {\i segment} will be inserted.\cell } {\row } } Schedule the insertion of {\i segment} into {\b Track} {\i track} . The {\i segment} must not already be part of a {\b Track}. \par }} {\xe \v addRemoveEvent\:Kite::Session} {\xe \v Kite::Session\:addRemoveEvent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void addRemoveEvent ({\b TrackElement} * {\i segment}){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAANJ} {\bkmkend AAAAAAAANJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i segment} \cell }{A {\b TrackSegment} to remove from a {\b Track}.\cell } {\row } } Schedule the removal of {\i segment} from {\b Track} {\i track} . \par }{ Referenced by SegmentAction::doAction(), and TrackSegment::reschedule().}\par } {\xe \v addMoveEvent\:Kite::Session} {\xe \v Kite::Session\:addMoveEvent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void addMoveEvent ({\b TrackElement} * {\i segment}, {\b Track} * {\i track}){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAANK} {\bkmkend AAAAAAAANK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i segment} \cell }{An AutoSegment to move into a new {\b Track}. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i track} \cell }{The {\b Track} into which the {\i segment} will be moved.\cell } {\row } } Schedule the displacement of {\i segment} into {\b Track} {\i track} . \par }} {\xe \v addSortEvent\:Kite::Session} {\xe \v Kite::Session\:addSortEvent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void addSortEvent ({\b Track} * {\i track}, bool {\i forced} = {\f2 false}){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAANL} {\bkmkend AAAAAAAANL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i track} \cell }{The {\b Track} to update. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i forced} \cell }{Force the invalidation of the {\f2 {\b Track}} .\cell } {\row } } Schedule the update of {\b Track} {\i track} . If the {\f2 {\b Track}} has not been invalidated, no actual sort will takes place. To force a sort (manually invalidating the {\f2 {\b Track}} ), sets {\b forced} to {\b true} .\par {\b See also:} \~ Track::pack() & Track::sort(). \par }{ Referenced by TrackSegment::revalidate().}\par } {\xe \v revalidate\:Kite::Session} {\xe \v Kite::Session\:revalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void revalidate (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAANM} {\bkmkend AAAAAAAANM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Applies all the requested modifications, but keeping the session opened. \par }{ Referenced by RoutingEvent::process(), NegociateWindow::run(), and NegociateWindow::setGCells().}\par } {\xe \v lookup\:Kite::Session} {\xe \v Kite::Session\:lookup} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * lookup ({\b Segment} * {\i segment}){\f2 [static]}}} \par {\bkmkstart AAAAAAAANN} {\bkmkend AAAAAAAANN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the {\b TrackElement} associated to {\f2 segment} . \par }{ Referenced by NegociateWindow::computeWirelength(), TrackSegment::create(), TrackSegment::getCanonical(), TrackSegment::getParent(), TrackSegment::getSourceDogleg(), TrackSegment::getTargetDogleg(), Manipulator::relax(), RoutingEventQueue::repushInvalidateds(), and NegociateWindow::setGCells().}\par } {\xe \v lookup\:Kite::Session} {\xe \v Kite::Session\:lookup} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * lookup ({\b AutoSegment} * {\i segment}){\f2 [static]}}} \par {\bkmkstart AAAAAAAANO} {\bkmkend AAAAAAAANO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the {\b TrackElement} associated to {\f2 segment} . \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Session.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Session.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Track Class Reference\par \pard\plain {\tc\tcl2 \v Track} {\xe \v Track} {\bkmkstart AAAAAAAANP} {\bkmkend AAAAAAAANP} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Structure managing one routing track. }}\par Inheritance diagram for Track:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKite_1_1Track__inherit__graph.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par } \par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Types\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid enum {\b IndexState} \{ {\b BeginIsTrackMin} = 0x00000001, {\b BeginIsSegmentMin} = 0x00000002, {\b BeginIsSegmentMax} = 0x00000004, {\b EndIsTrackMax} = 0x00000008, {\b EndIsSegmentMin} = 0x00000010, {\b EndIsNextSegmentMin} = 0x00000020, {\b EndIsSegmentMax} = 0x00000040, {\b BeforeFirstElement} = BeginIsTrackMin |EndIsSegmentMin, {\b InsideElement} = BeginIsSegmentMin|EndIsSegmentMax, {\b OutsideElement} = BeginIsSegmentMax|EndIsNextSegmentMin, {\b AfterLastElement} = BeginIsSegmentMax|EndIsTrackMax, {\b EmptyTrack} = BeginIsTrackMin |EndIsTrackMax, {\b BeginMask} = BeginIsTrackMin |BeginIsSegmentMin|BeginIsSegmentMax, {\b EndMask} = EndIsTrackMax |EndIsSegmentMin |EndIsNextSegmentMin|EndIsSegmentMax \}\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isHorizontal} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isVertical} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isLocalAssigned} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b RoutingPlane} * {\b getRoutingPlane} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b KiteEngine} * {\b getKiteEngine} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned int {\b getDirection} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getIndex} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getDepth} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Layer} * {\b getLayer} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Layer} * {\b getBlockageLayer} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getAxis} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getMin} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getMax} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Track} * {\b getNextTrack} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Track} * {\b getPreviousTrack} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getSize} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Point} {\b getPosition} ({\b DbU::Unit} coordinate) const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackElement} * {\b getSegment} (size_t index) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackElement} * {\b getSegment} ({\b DbU::Unit} position) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackElement} * {\b getNext} (size_t &index, {\b Net} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackElement} * {\b getPrevious} (size_t &index, {\b Net} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackElement} * {\b getNextFixed} (size_t &index) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b find} (const {\b TrackElement} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getSourcePosition} (vector< {\b TrackElement} *>::iterator) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getMinimalPosition} (size_t index, unsigned int state) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getMaximalPosition} (size_t index, unsigned int state) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Interval} {\b getFreeInterval} ({\b DbU::Unit} position, {\b Net} *net=NULL) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Interval} {\b getOccupiedInterval} (size_t &begin) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Interval} {\b expandFreeInterval} (size_t &begin, size_t &end, unsigned int state, {\b Net} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b getBeginIndex} ({\b DbU::Unit} position, size_t &begin, unsigned int &state) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b getOverlapBounds} ({\b Interval}, size_t &begin, size_t &end) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid TrackCost {\b getOverlapCost} ({\b Interval}, {\b Net} *, size_t begin, size_t end, unsigned int flags) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid TrackCost {\b getOverlapCost} ({\b Interval}, {\b Net} *, unsigned int flags) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid TrackCost {\b getOverlapCost} ({\b TrackElement} *, unsigned int flags) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b getTerminalWeight} ({\b Interval}, {\b Net} *, size_t &count, unsigned int &weight) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getSourcePosition} (size_t index) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b check} (unsigned int &overlaps, const char *message=NULL) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b invalidate} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b insert} ({\b TrackElement} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b insert} ({\b TrackMarker} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setSegment} ({\b TrackElement} *, size_t)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b doRemoval} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b doReorder} ()\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Public Attributes\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static const size_t {\b npos} = (size_t)-1\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Structure managing one routing track. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {\bkmkstart AAAAAAAANQ} {\bkmkend AAAAAAAANQ} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Track Purpose \par} {\tc\tcl2 \v Track Purpose} We use an array of {\i regularly spaced} {\b Track} as a geometrical fast access structure. It allows to know whether an area is used or not. The whole area may be seen as a set of adjoining tiles of fixed {\i width} but variable {\i length} .\par The figure {\b (1.b)} show, for an horizontal, track the relation between {\f2 y,min,max} and the occupied area of the plane. {\f2 min} and {\f2 max} must take into account segment extensions ({\f2 e} ) and the minimal distance between two rectangles ({\f2 MD} ) of the same layer. We assume that the width of the segment, augmented of all it's contraints is no greater than {\f2 TS} (in fact it's how {\f2 TS} must be calculated).\par For the whole track array, see {\b RoutingPlane}.\par \par} {\bkmkstart AAAAAAAANR} {\bkmkend AAAAAAAANR} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Track Implementation \par} {\tc\tcl2 \v Track Implementation} A {\b Track} is implemented with a sorted vector of {\b TrackElement}. TrackElements from differents nets must not overlap. The sorting order is defined as follow:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid TrackElements are sorted by increasing source ({\i min} ) positions.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid In case of overlap (i.e. belongs to the same net), if they share the same source position, then they are sorted by {\i decreasing} length. This way, the longest one will be the first encountered when walking through the {\b Track} in increasing index order.\par} Figure {\b 2.b} shows the details of the {\b Track} {\b [1]} of figure {\b 1.a} . Net {\b } show an exemple of overlapping.\par \par In addition to the TrackSegments, the {\b Track} also manage additionnal informations through a second vector of TrackMarkers. {\b TrackMarker} are currently used only to hints at how strongly a terminal is dependant on that portion of {\b Track} to be accessed.\par {\bkmkstart AAAAAAAANS} {\bkmkend AAAAAAAANS} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Indexes vs. Iterators \par} {\tc\tcl3 \v Indexes vs. Iterators} Numerical indexes have been prefered over iterators because they can be used more easily by objects other the {\b Track} itself for referencing. So internal managment follow the same rule, handling indexes or reference to indexes.\par} {\bkmkstart AAAAAAAANT} {\bkmkend AAAAAAAANT} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Update Mechanism \par} {\tc\tcl3 \v Update Mechanism} When a {\b TrackElement} is normaly inserted in a {\b Track}, a two way link is established. The {\b Track} has an entry in it's vector refering to {\b TrackElement}, and conversely, the {\b TrackElement} has it's {\f2 track} field pointing to it's owning {\b Track}.\par {\b {\b TrackElement} Removal} \par To remove a {\b TrackElement} from a {\b Track}, we break one of those two links: the {\b TrackElement} cease to refer to the owning {\b Track}, marking him for removal which will occurs at the next track revalidation ({\b Track::doRemoval()}). In figure {\b 3} , the {\b TrackElement} belonging to net {\b } is marked for removal.\par {\b {\b TrackElement} Insertion} \par When a {\b TrackElement} is inserted into a {\b Track}, the two way link is immediatly created (but the {\b TrackElement} is not yet at it's final place in the {\b Track}'s vector). Before inserting a {\b TrackElement} we check that it's been already detached ({\f2 track} field to {\f2 NULL} ).\par It is at that step that the {\b TrackElement} axis is actually updated through a call to {\b TrackElement::setAxis()}.\par {\b Revalidation Sequence} \par After a {\b Track} has been modificated either the {\b Track} element vector or the MarkerElement vector (or both) has been invalidateds. Revalidation take place in three steps:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Track::doRemoval()}, remove all {\b TrackElement} marked for removal.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Track::insert()}, insert the {\b TrackElement} into their new {\b Track}.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Track::doReorder()}, sort the {\b TrackElement} of the vector, that is, put the newly inserted elements at their right place.\par} Each step must be done {\i for all Tracks} before proceeding to the next. This way a {\b TrackElement} {\f2 track} field doesn't get set {\i before} it has been actually removed from it's previous {\b Track}.\par} {\bkmkstart AAAAAAAANU} {\bkmkend AAAAAAAANU} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Main Operations on Tracks \par} {\tc\tcl3 \v Main Operations on Tracks} {\b Helper Function:} {\b Track::getBeginIndex()}\par Return in {\f2 begin} the index of the {\b TrackElement} whose minimum is immediately below the requested {\f2 position} on the {\b Track} axis. The second returned parameter {\f2 state} is a set of flags to tell how the {\f2 begin} index has to be interpreted.\par {\b Helper Function:} {\b Track::getOccupiedInterval()}\par Returns the complete interval of a set of overlapping {\b TrackElement} from the same net. \par} \par} }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Enumeration Documentation\par \pard\plain {\xe \v IndexState\:Kite::Track} {\xe \v Kite::Track\:IndexState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b IndexState}}} \par {\bkmkstart AAAAAAAANV} {\bkmkend AAAAAAAANV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Indicates how to compute the bounds of the interval enclosing a given {\f2 position} on track axis.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Note:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid According to {\i position} , the interval can be a free interval or a used interval. \par }}{\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Enumerator:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {\xe \v BeginIsTrackMin\:Kite::Track} {\xe \v Kite::Track\:BeginIsTrackMin} {\qr BeginIsTrackMin{\bkmkstart AAAAAAAANW} {\bkmkend AAAAAAAANW} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid (implies {\f2 begin=0} ) there is no {\b TrackElement} {\i before} {\f2 position} \par }\cell }{\row } {\xe \v BeginIsSegmentMin\:Kite::Track} {\xe \v Kite::Track\:BeginIsSegmentMin} {\qr BeginIsSegmentMin{\bkmkstart AAAAAAAANX} {\bkmkend AAAAAAAANX} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\f2 begin} segment starts {\i before} {\f2 position} and ends {\i after} . \par }\cell }{\row } {\xe \v BeginIsSegmentMax\:Kite::Track} {\xe \v Kite::Track\:BeginIsSegmentMax} {\qr BeginIsSegmentMax{\bkmkstart AAAAAAAANY} {\bkmkend AAAAAAAANY} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\f2 begin} segment starts and ends {\i before} {\f2 position} . \par }\cell }{\row } {\xe \v EndIsTrackMax\:Kite::Track} {\xe \v Kite::Track\:EndIsTrackMax} {\qr EndIsTrackMax{\bkmkstart AAAAAAAANZ} {\bkmkend AAAAAAAANZ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid There is no {\b TrackElement} {\i after} {\f2 position} . \par }\cell }{\row } {\xe \v EndIsSegmentMin\:Kite::Track} {\xe \v Kite::Track\:EndIsSegmentMin} {\qr EndIsSegmentMin{\bkmkstart AAAAAAAAOA} {\bkmkend AAAAAAAAOA} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\f2 begin} segment starts {\i before} {\f2 position} . \par }\cell }{\row } {\xe \v EndIsNextSegmentMin\:Kite::Track} {\xe \v Kite::Track\:EndIsNextSegmentMin} {\qr EndIsNextSegmentMin{\bkmkstart AAAAAAAAOB} {\bkmkend AAAAAAAAOB} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\f2 begin} segment starts and ends {\i before} {\f2 position} . So the maximum is given by the {\f2 minimum} of the {\i next} {\b TrackElement}. \par }\cell }{\row } {\xe \v EndIsSegmentMax\:Kite::Track} {\xe \v Kite::Track\:EndIsSegmentMax} {\qr EndIsSegmentMax{\bkmkstart AAAAAAAAOC} {\bkmkend AAAAAAAAOC} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\f2 begin} segment starts {\i before} {\f2 position} and ends {\i after} . \par }\cell }{\row } {\xe \v BeforeFirstElement\:Kite::Track} {\xe \v Kite::Track\:BeforeFirstElement} {\qr BeforeFirstElement{\bkmkstart AAAAAAAAOD} {\bkmkend AAAAAAAAOD} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid the {\f2 position} is before the first {\b TrackElement}. \par }\cell }{\row } {\xe \v InsideElement\:Kite::Track} {\xe \v Kite::Track\:InsideElement} {\qr InsideElement{\bkmkstart AAAAAAAAOE} {\bkmkend AAAAAAAAOE} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid the {\f2 position} is inside a {\b TrackElement}. \par }\cell }{\row } {\xe \v OutsideElement\:Kite::Track} {\xe \v Kite::Track\:OutsideElement} {\qr OutsideElement{\bkmkstart AAAAAAAAOF} {\bkmkend AAAAAAAAOF} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid the {\f2 position} is in free zone between two TrackElements. \par }\cell }{\row } {\xe \v AfterLastElement\:Kite::Track} {\xe \v Kite::Track\:AfterLastElement} {\qr AfterLastElement{\bkmkstart AAAAAAAAOG} {\bkmkend AAAAAAAAOG} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid the position is after the end of the last element. \par }\cell }{\row } {\xe \v EmptyTrack\:Kite::Track} {\xe \v Kite::Track\:EmptyTrack} {\qr EmptyTrack{\bkmkstart AAAAAAAAOH} {\bkmkend AAAAAAAAOH} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid the track is still empty. \par }\cell }{\row } {\xe \v BeginMask\:Kite::Track} {\xe \v Kite::Track\:BeginMask} {\qr BeginMask{\bkmkstart AAAAAAAAOI} {\bkmkend AAAAAAAAOI} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid To extract the {\i begin} part from a combination of flags. \par }\cell }{\row } {\xe \v EndMask\:Kite::Track} {\xe \v Kite::Track\:EndMask} {\qr EndMask{\bkmkstart AAAAAAAAOJ} {\bkmkend AAAAAAAAOJ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid To extract the {\i end} part from a combination of flags. \par }\cell }{\row } } } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v isHorizontal\:Kite::Track} {\xe \v Kite::Track\:isHorizontal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isHorizontal () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAADA} {\bkmkend AAAAAAAADA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the {\b Track} in horizontal direction. \par }{ Implemented in {\b HorizontalTrack} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAACZ \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b VerticalTrack} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOK \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackFixedSegment::isHorizontal().}\par } {\xe \v isVertical\:Kite::Track} {\xe \v Kite::Track\:isVertical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isVertical () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAADC} {\bkmkend AAAAAAAADC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the {\b Track} in vertical direction. \par }{ Implemented in {\b HorizontalTrack} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAADB \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b VerticalTrack} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOL \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackFixedSegment::isVertical().}\par } {\xe \v isLocalAssigned\:Kite::Track} {\xe \v Kite::Track\:isLocalAssigned} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isLocalAssigned () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAOM} {\bkmkend AAAAAAAAOM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} is the {\b Track} should be preferentially used for local routing. \par }} {\xe \v getRoutingPlane\:Kite::Track} {\xe \v Kite::Track\:getRoutingPlane} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingPlane} * getRoutingPlane () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAON} {\bkmkend AAAAAAAAON} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b RoutingPlane} owning this {\b Track}. \par }{ Referenced by Track::getNextTrack(), and Track::getPreviousTrack().}\par } {\xe \v getKiteEngine\:Kite::Track} {\xe \v Kite::Track\:getKiteEngine} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b KiteEngine} * getKiteEngine () const}} \par {\bkmkstart AAAAAAAAOO} {\bkmkend AAAAAAAAOO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b KiteEngine} owning this {\b Track}. \par }} {\xe \v getDirection\:Kite::Track} {\xe \v Kite::Track\:getDirection} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDirection () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAADE} {\bkmkend AAAAAAAADE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The direction of the {\b Track}, either Katabatic::KbHorizontal or Katabatic::KbVertical. \par }{ Implemented in {\b HorizontalTrack} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAADD \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b VerticalTrack} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOP \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackFixedSegment::getDirection().}\par } {\xe \v getIndex\:Kite::Track} {\xe \v Kite::Track\:getIndex} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingPlane} * getIndex () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAOQ} {\bkmkend AAAAAAAAOQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The index of this {\b Track} in the {\b RoutingPlane} {\b Track} vector. \par }{ Referenced by Track::check(), Track::getNextTrack(), and Track::getPreviousTrack().}\par } {\xe \v getDepth\:Kite::Track} {\xe \v Kite::Track\:getDepth} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDepth () const}} \par {\bkmkstart AAAAAAAAOR} {\bkmkend AAAAAAAAOR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The depth (as given by the RoutingGauge) of the {\b Track}'s layer. \par }} {\xe \v getLayer\:Kite::Track} {\xe \v Kite::Track\:getLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Layer} * getLayer () const}} \par {\bkmkstart AAAAAAAAOS} {\bkmkend AAAAAAAAOS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\f2 Layer} of the {\b Track}. \par }{ Referenced by Track::insert().}\par } {\xe \v getBlockageLayer\:Kite::Track} {\xe \v Kite::Track\:getBlockageLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Layer} * getBlockageLayer () const}} \par {\bkmkstart AAAAAAAAOT} {\bkmkend AAAAAAAAOT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The associated blockage {\f2 Layer} to the {\b Track}'s layer. \par }{ Referenced by Track::insert().}\par } {\xe \v getAxis\:Kite::Track} {\xe \v Kite::Track\:getAxis} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getAxis () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAOU} {\bkmkend AAAAAAAAOU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The Axis of the {\b Track}. \par }{ Referenced by Track::check(), NegociateWindow::createTrackSegment(), TrackFixedSegment::getAxis(), VerticalTrack::getPosition(), HorizontalTrack::getPosition(), Track::insert(), RoutingEvent::revalidate(), Manipulator::ripupPerpandiculars(), and SegmentFsm::SegmentFsm().}\par } {\xe \v getMin\:Kite::Track} {\xe \v Kite::Track\:getMin} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getMin () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAOV} {\bkmkend AAAAAAAAOV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The minimal allowed coordinate of the {\b Track}. \par }{ Referenced by Manipulator::minimize().}\par } {\xe \v getMax\:Kite::Track} {\xe \v Kite::Track\:getMax} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getMax () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAOW} {\bkmkend AAAAAAAAOW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The maximal allowed coordinate of the {\b Track}. \par }} {\xe \v getNextTrack\:Kite::Track} {\xe \v Kite::Track\:getNextTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Track} * getNextTrack () const}} \par {\bkmkstart AAAAAAAAOX} {\bkmkend AAAAAAAAOX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The next {\b Track} in the {\f2 {\b RoutingPlane}} vector. That is the one with the axis immediatly superior. \par }{ Referenced by NegociateWindow::createTrackSegment(), RoutingEvent::revalidate(), and Manipulator::ripupPerpandiculars().}\par } {\xe \v getPreviousTrack\:Kite::Track} {\xe \v Kite::Track\:getPreviousTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Track} * getPreviousTrack () const}} \par {\bkmkstart AAAAAAAAOY} {\bkmkend AAAAAAAAOY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The previous {\b Track} in the {\f2 {\b RoutingPlane}} vector. That is the one with the axis immediatly inferior. \par }{ Referenced by NegociateWindow::createTrackSegment().}\par } {\xe \v getSize\:Kite::Track} {\xe \v Kite::Track\:getSize} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getSize () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAOZ} {\bkmkend AAAAAAAAOZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The total number of {\b TrackSegment} in the {\b Track}. \par }{ Referenced by Track::getMaximalPosition(), and Track::getSegment().}\par } {\xe \v getPosition\:Kite::Track} {\xe \v Kite::Track\:getPosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Point} getPosition ({\b DbU::Unit} {\i position}) const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAADG} {\bkmkend AAAAAAAADG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the point at {\f2 } (position,{\b getAxis()}) for horizontal {\b Track} at or {\f2 } ({\b getAxis()},position) for vertical {\b Track}. \par }{ Implemented in {\b HorizontalTrack} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAADF \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b VerticalTrack} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAPA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getSegment\:Kite::Track} {\xe \v Kite::Track\:getSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackSegment} * getSegment (size_t {\i index}) const}} \par {\bkmkstart AAAAAAAAPB} {\bkmkend AAAAAAAAPB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i index} \cell }{The index of the {\b TrackSegment}. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The {\b TrackSegment} at {\i index} . The result will be {\f2 NULL} in the follwing cases :{ \par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid {\i index} is outside the sorted zone.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid {\i index} points to a hole in the {\b Track}.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid {\i index} is equal to {\b Track::npos}. \par} }}{ Referenced by SegmentFsm::conflictSolveByPlaceds(), NegociateWindow::createTrackSegment(), SegmentFsm::desaturate(), Manipulator::forceOverLocals(), Manipulator::forceToTrack(), Track::getSegment(), Manipulator::insertInTrack(), Manipulator::makeDogleg(), Manipulator::minimize(), and Manipulator::shrinkToTrack().}\par } {\xe \v getSegment\:Kite::Track} {\xe \v Kite::Track\:getSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackSegment} * getSegment ({\b DbU::Unit} {\i position}) const}} \par {\bkmkstart AAAAAAAAPC} {\bkmkend AAAAAAAAPC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i position} \cell }{The position where to search. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The {\b TrackSegment} whose starting point is immediatly inferior to {\i position} . \par }}} {\xe \v getNext\:Kite::Track} {\xe \v Kite::Track\:getNext} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackSegment} * getNext (size_t & {\i index}, {\b Net} * {\i net}) const}} \par {\bkmkstart AAAAAAAAPD} {\bkmkend AAAAAAAAPD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i index} \cell }{Index of the starting {\b TrackSegment}. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i net} \cell }{A {\f2 Net} to ignore. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The next {\b TrackSegment} ({\f2 NULL} if not found).\par }Find, starting from {\b TrackSegment} at {\i index} the next {\b TrackSegment} ignoring {\b TrackSegment} from {\i net} . {\i index} is modified to point on the returned {\b TrackSegment}. If there's no next {\b TrackSegment} ({\f2 NULL} ) then index is set to {\b Track::npos}. \par }{ Referenced by Track::expandFreeInterval(), TrackFixedSegment::getNext(), TrackSegment::getNext(), TrackElement::getNext(), and Track::getNextFixed().}\par } {\xe \v getPrevious\:Kite::Track} {\xe \v Kite::Track\:getPrevious} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackSegment} * getPrevious (size_t & {\i index}, {\b Net} * {\i net}) const}} \par {\bkmkstart AAAAAAAAPE} {\bkmkend AAAAAAAAPE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i index} \cell }{Index of the starting {\b TrackSegment}. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i net} \cell }{A {\f2 Net} to ignore. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The previous {\b TrackSegment} ({\f2 NULL} if not found).\par }find, starting from {\b TrackSegment} at {\i index} the previous {\b TrackSegment} ignoring {\b TrackSegment} from {\i net} . {\i index} is modified to point on the returned {\b TrackSegment}. If there's no previous {\b TrackSegment} ({\f2 NULL} ) then index is set to {\b Track::npos}. \par }{ Referenced by Track::expandFreeInterval(), TrackFixedSegment::getPrevious(), TrackSegment::getPrevious(), and TrackElement::getPrevious().}\par } {\xe \v getNextFixed\:Kite::Track} {\xe \v Kite::Track\:getNextFixed} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackSegment} * getNextFixed (size_t & {\i index}) const}} \par {\bkmkstart AAAAAAAAPF} {\bkmkend AAAAAAAAPF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i index} \cell }{Index of the starting {\b TrackSegment}. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The first previous {\i Fixed} {\b TrackSegment}.\par }find, starting from {\b TrackSegment} at {\i index} the first previous with a {\i Fixed} attribute set. {\i index} is modified to point on the returned {\b TrackSegment}. If there's no previous {\b TrackSegment} ({\f2 NULL} ) then index is set to {\b Track::npos}. \par }} {\xe \v find\:Kite::Track} {\xe \v Kite::Track\:find} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t find (const {\b TrackElement} * {\i element}) const}} \par {\bkmkstart AAAAAAAAPG} {\bkmkend AAAAAAAAPG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the {\i index} of {\i element} inside the {\b Track}. If the {\i element} do not belongs to the {\b Track}, return {\b Track::npos}. \par }} {\xe \v getSourcePosition\:Kite::Track} {\xe \v Kite::Track\:getSourcePosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getSourcePosition (vector< {\b TrackElement} *>::iterator {\i it}) const}} \par {\bkmkstart AAAAAAAAPH} {\bkmkend AAAAAAAAPH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The source position of {\b TrackSegment} pointed by iterator {\i it} . If {\i it} is equal to {\f2 end()} , returns zero. \par }} {\xe \v getMinimalPosition\:Kite::Track} {\xe \v Kite::Track\:getMinimalPosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getMinimalPosition (size_t {\i index}, unsigned int {\i state}) const}} \par {\bkmkstart AAAAAAAAPI} {\bkmkend AAAAAAAAPI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} Extract the minimal position from the interval at {\f2 index} in accordance to {\f2 state} hinting.\par {\b See also:} \~ {\b Track::IndexState}. \par }} {\xe \v getMaximalPosition\:Kite::Track} {\xe \v Kite::Track\:getMaximalPosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getMaximalPosition (size_t {\i index}, unsigned int {\i state}) const}} \par {\bkmkstart AAAAAAAAPJ} {\bkmkend AAAAAAAAPJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} Extract the maximal position from the interval at {\f2 index} in accordance to {\f2 state} hinting.\par {\b See also:} \~ {\b Track::IndexState}. \par }{ Referenced by Track::expandFreeInterval().}\par } {\xe \v getFreeInterval\:Kite::Track} {\xe \v Kite::Track\:getFreeInterval} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getFreeInterval ({\b DbU::Unit} {\i position}, {\b Net} * {\i net} = {\f2 NULL}) const}} \par {\bkmkstart AAAAAAAAPK} {\bkmkend AAAAAAAAPK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i position} \cell }{where fo find a free interval. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i net} \cell }{for which net to find the free interval. {\b Returns:} The longuest free interval enclosing {\i position} (may be empty). \cell } {\row } } }} {\xe \v getOccupiedInterval\:Kite::Track} {\xe \v Kite::Track\:getOccupiedInterval} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getOccupiedInterval (size_t & {\i begin}) const}} \par {\bkmkstart AAAAAAAAPL} {\bkmkend AAAAAAAAPL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i begin} \cell }{index of one of the {\b TrackElement} set. May be modificated. {\b Returns:} the whole interval used by a set of overlaping {\b TrackSegment}.\cell } {\row } } As {\b TrackElement} from a same net can overlap, the interval of one of them do not give the full extend of the {\b Track} occupation at this point. This function looks for all overlaping segments and returns the merged interval. Additionnaly it sets {\f2 begin} to the index of the lowest {\b TrackElement} of the set.\par \par }{ Referenced by Track::expandFreeInterval(), Track::getBeginIndex(), and Track::getOverlapBounds().}\par } {\xe \v expandFreeInterval\:Kite::Track} {\xe \v Kite::Track\:expandFreeInterval} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} expandFreeInterval (size_t & {\i begin}, size_t & {\i end}, unsigned int {\i state}, {\b Net} * {\i net}) const}} \par {\bkmkstart AAAAAAAAPM} {\bkmkend AAAAAAAAPM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i begin} \cell }{the lowest used {\b TrackSegment}. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i end} \cell }{the highest used {\b TrackSegment}. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i state} \cell }{tells how to interpret the {\f2 begin} & {\f2 end} indexes. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i net} \cell }{the for wich we seek place. {\b Returns:} The longuest free interval between {\f2 } ]begin,end[ .\cell } {\row } } Starting from the initial {\f2 [begin,end]} interval, expand the interval to encompass all free space or segments belonging to {\f2 net} . {\f2 state} may be used to compute the interval bounds from {\f2 begin} and {\f2 end} instead of directly using the returned {\f2 interval} .\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Note:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\f2 } ]begin,end[ must define a free interval between two {\b TrackSegment}. \par }}{ Referenced by Track::getFreeInterval().}\par } {\xe \v getBeginIndex\:Kite::Track} {\xe \v Kite::Track\:getBeginIndex} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void getBeginIndex ({\b DbU::Unit} {\i position}, size_t & {\i begin}, unsigned int & {\i state}) const}} \par {\bkmkstart AAAAAAAAPN} {\bkmkend AAAAAAAAPN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i position} \cell }{The position where to search. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i begin} \cell }{Index of the immediatly inferior {\b TrackElement}. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i state} \cell }{how to interpret the returned {\f2 begin} .\cell } {\row } } Return in {\f2 begin} the index of the {\b TrackElement} whose minimum is immediately below the requested {\f2 position} on the {\b Track} axis. The second returned parameter {\f2 state} is a set of flags to tell how the {\f2 begin} index has to be interpreted.\par Flags for the {\f2 state} are:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::BeginIsTrackMin} : (implies {\f2 begin=0} ) there is no {\b TrackElement} {\i before} {\f2 position} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::EndIsSegmentMin} : The {\f2 begin} segment starts {\i before} {\f2 position} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::BeginIsSegmentMin} : The {\f2 begin} segment starts {\i before} {\f2 position} and ends {\i after} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::EndIsSegmentMax} : The {\f2 begin} segment starts {\i before} {\f2 position} and ends {\i after} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::BeginIsSegmentMax} : The {\f2 begin} segment starts and ends {\i before} {\f2 position} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::EndIsNextSegmentMin} : The {\f2 begin} segment starts and ends {\i before} {\f2 position} . So the maximum is given by the {\f2 minimum} of the {\i next} {\b TrackElement}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::EndIsTrackMax} : There is no {\b TrackElement} {\i after} {\f2 position} .\par} Based on the previous flags, we build the {\f2 state} parameter:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::BeforeFirstElement} : the {\f2 position} is before the first {\b TrackElement}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::InsideElement} : the {\f2 position} is inside a {\b TrackElement}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::OutsideElement} : the {\f2 position} is in free zone between two TrackElements.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::AfterLastElement} : the position is after the end of the last element.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::EmptyTrack} : the track is still empty.\par} To separate flags relevant to {\i begin} and {\i end} informations, two masks are provideds:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::BeginMask}\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::EndMask}\par} {\b Reminder for myself:} The {\b Track::getBeginIndex()} function relies on the {\f2 STL} {\f2 lower_bound()} function. {\f2 lower_bound()} finds the {\b TrackElement} immediately {\i superior} to {\f2 position} (shown on Figure {\b 3} by the {\f2 LB} label in white on black).\par The relation between the returned {\f2 begin} index and the position is given through the {\f2 state} parameter. \par }{ Referenced by Track::getFreeInterval(), Track::getOverlapBounds(), and Track::getSegment().}\par } {\xe \v getOverlapBounds\:Kite::Track} {\xe \v Kite::Track\:getOverlapBounds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void getOverlapBounds ({\b Interval} {\i interval}, size_t & {\i begin}, size_t & {\i end}) const}} \par {\bkmkstart AAAAAAAAPO} {\bkmkend AAAAAAAAPO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i interval} \cell }{the overlaping interval. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i begin} \cell }{where to store the starting bound. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i end} \cell }{where to store the ending bound.\cell } {\row } } find the range of {\b TrackSegment} intersecting {\i interval} . Note that when the {\i interval} lower bound crosses a set of overlaping intervals from the same {\f2 Net} , the interval at {\i begin} will crosses the lower bound but some following of the same {\f2 Net} may not. \par }{ Referenced by NegociateWindow::createTrackSegment(), and Track::getOverlapCost().}\par } {\xe \v getOverlapCost\:Kite::Track} {\xe \v Kite::Track\:getOverlapCost} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b TrackCost getOverlapCost ({\b Interval} {\i interval}, {\b Net} * {\i net}, size_t {\i begin}, size_t {\i end}, unsigned int {\i flags}) const}} \par {\bkmkstart AAAAAAAAPP} {\bkmkend AAAAAAAAPP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i interval} \cell }{the overlaping interval. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i net} \cell }{a Net to ignore (null cost). \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i begin} \cell }{the starting bound. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i end} \cell }{the ending bound. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i flags} \cell }{passed to the overlap cost function. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The cost of the overlap.\par }Compute the cost of the overlap of {\i interval} with the range {\f2 } [begin,end] of {\b TrackSegment}. Any {\b TrackSegment} belonging to {\i net} will be ignored. \par }{ Referenced by Track::getOverlapCost().}\par } {\xe \v getOverlapCost\:Kite::Track} {\xe \v Kite::Track\:getOverlapCost} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b TrackCost getOverlapCost ({\b Interval} {\i interval}, {\b Net} * {\i net}, unsigned int {\i flags}) const}} \par {\bkmkstart AAAAAAAAPQ} {\bkmkend AAAAAAAAPQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i interval} \cell }{the overlaping interval. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i net} \cell }{a Net to ignore (null cost). \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i flags} \cell }{passed to the overlap cost function.\cell } {\row } } Compute the overlap cost of {\i interval} with {\b TrackSegment} from the current {\b Track}, ignoring thoses belonging to {\i net} . \par }} {\xe \v getOverlapCost\:Kite::Track} {\xe \v Kite::Track\:getOverlapCost} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b TrackCost getOverlapCost ({\b TrackElement} * {\i segment}, unsigned int {\i flags}) const}} \par {\bkmkstart AAAAAAAAPR} {\bkmkend AAAAAAAAPR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i segment} \cell }{under which to compute overlap cost. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i flags} \cell }{passed to the overlap cost function.\cell } {\row } } Compute the overlap cost of {\f2 segment} with {\b TrackSegment} from the current {\b Track} (interval and net are deduced from {\f2 segment} ). \par }} {\xe \v getTerminalWeight\:Kite::Track} {\xe \v Kite::Track\:getTerminalWeight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void getTerminalWeight ({\b Interval} {\i interval}, {\b Net} * {\i net}, size_t & {\i count}, unsigned int & {\i weight}) const}} \par {\bkmkstart AAAAAAAAPS} {\bkmkend AAAAAAAAPS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i interval} \cell }{under which to compute terminal weight. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i net} \cell }{a net to be ignored. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i count} \cell }{incremented of the number of track markers under the {\f2 interval} . \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i weight} \cell }{incremented of the sum of the weight of the track markers under the {\f2 interval} .\cell } {\row } } Compute and return the sum of the weight of the track markers (see {\b TrackMarker}) under {\f2 interval} ignoring {\f2 net} (that is, {\i for} {\f2 net} ).\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: The referenced variables {\f2 count} and {\f2 weight} are not reset to\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid zero by this function. It is of the caller's responsability. \par }}} {\xe \v getSourcePosition\:Kite::Track} {\xe \v Kite::Track\:getSourcePosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getSourcePosition (size_t {\i index}) const}} \par {\bkmkstart AAAAAAAAPT} {\bkmkend AAAAAAAAPT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The source position of {\b TrackSegment} at index {\i index} . If {\i index} is equal to {\b Track::npos}, returns zero. \par }} {\xe \v check\:Kite::Track} {\xe \v Kite::Track\:check} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool check (unsigned int & {\i overlaps}, const char * {\i message} = {\f2 NULL}) const}} \par {\bkmkstart AAAAAAAAPU} {\bkmkend AAAAAAAAPU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i overlaps} \cell }{The number of overlaping segments. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i message} \cell }{An iformative message, only printed if an error occurs. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b true} if the {\b Track} contains no incoherencies.\par }Perform a complete {\b Track} check. Looks for the following incoherencies :{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b TrackSegment} do not refers this {\b Track}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b TrackSegment} is detached ({\b TrackSegment::getTrack()} is {\f2 NULL} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b TrackSegment} is hollow, this one is very unlikely as hollow {\b TrackSegment} are only created for the {\f2 lower_bound()} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 NULL} pointers (should never occurs, nevertheless...)\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Two consecutive {\b TrackSegment} from different {\f2 Net} must not overlap.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid For {\b TrackSegment} starting from the same position, the longuest must be first. \par} }} {\xe \v invalidate\:Kite::Track} {\xe \v Kite::Track\:invalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void invalidate ()}} \par {\bkmkstart AAAAAAAAPV} {\bkmkend AAAAAAAAPV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Inconditionnaly invalidate the {\b Track}, regardless if it has been modificated. The {\b Track} will be forced to be revalidated on closure of the current session. \par }} {\xe \v insert\:Kite::Track} {\xe \v Kite::Track\:insert} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void insert ({\b TrackElement} * {\i segment})}} \par {\bkmkstart AAAAAAAAPW} {\bkmkend AAAAAAAAPW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Adds {\i segment} to the {\b Track}. Must only be used inside a {\b Session}. They must appears {\i after} {\b Track::doRemoval()} and {\i before} {\b Track::doReorder()}.\par {\b See also:} \~ {\b Kite::Session}. \par }} {\xe \v insert\:Kite::Track} {\xe \v Kite::Track\:insert} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void insert ({\b TrackMarker} * {\i marker})}} \par {\bkmkstart AAAAAAAAPX} {\bkmkend AAAAAAAAPX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Adds {\i marker} to the {\b Track}. Must only be used inside a {\b Session}.\par {\b See also:} \~ {\b Kite::Session}. \par }} {\xe \v setSegment\:Kite::Track} {\xe \v Kite::Track\:setSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setSegment ({\b TrackElement} * {\i element}, size_t {\i index})}} \par {\bkmkstart AAAAAAAAPY} {\bkmkend AAAAAAAAPY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Directly affect the {\b Track} entry at position {\f2 index} to {\f2 element} (use with great care).\par {\b See also:} \~ {\b Kite::Session}. \par }{ Referenced by TrackSegment::swapTrack().}\par } {\xe \v doRemoval\:Kite::Track} {\xe \v Kite::Track\:doRemoval} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t doRemoval ()}} \par {\bkmkstart AAAAAAAAPZ} {\bkmkend AAAAAAAAPZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The number of removeds {\b TrackSegment}.\par Suppress all the {\b TrackSegment} that have been withdraw from the {\b Track}. {\b TrackSegment} must be withdraw trough the {\b TrackSegment::detach()} method which sets their owning {\b Track} to {\f2 NULL} (the removal criterion). It uses the {\f2 STL} {\i remove_if} algorithm that put all the to be removed elements at the end of the vector.\par {\b See also:} \~ {\b Kite::Session}. \par }} {\xe \v doReorder\:Kite::Track} {\xe \v Kite::Track\:doReorder} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void doReorder ()}} \par {\bkmkstart AAAAAAAAQA} {\bkmkend AAAAAAAAQA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid (Re)sort the {\b TrackElement} of the vector. Must be called {\i after:} { \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Track::doRemoval()} so no detached {\b TrackSegment} are presents.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid All calls to {\b Track::insert()}, as the newly inserted elements are put at the back of the vector.\par} {\b See also:} \~ {\b Kite::Session}. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Data Documentation\par \pard\plain {\xe \v npos\:Kite::Track} {\xe \v Kite::Track\:npos} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b npos = (size_t)-1{\f2 [static]}}} \par {\bkmkstart AAAAAAAAQB} {\bkmkend AAAAAAAAQB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A special index value (greatest integer) meaning that an index is invalid. \par }{ Referenced by Track::expandFreeInterval(), Track::find(), Track::getNext(), Track::getOccupiedInterval(), Track::getOverlapBounds(), Track::getOverlapCost(), Track::getPrevious(), Track::getSegment(), and Track::getSourcePosition().}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Track.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Track.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Track.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid TrackElement Class Reference\par \pard\plain {\tc\tcl2 \v TrackElement} {\xe \v TrackElement} {\bkmkstart AAAAAAAAQC} {\bkmkend AAAAAAAAQC} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract Class for all Elements inserted inside a {\b Track}. }}\par Inheritance diagram for TrackElement:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKite_1_1TrackElement__inherit__graph.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par } \par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isFixed} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isHorizontal} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isVertical} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isLocal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isGlobal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isBipoint} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isTerminal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isStrap} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isSlackened} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isDogleg} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isCreated} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isInvalidated} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isBlockage} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isLocked} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isRouted} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b hasSourceDogleg} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b hasTargetDogleg} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b canRipple} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b canDogleg} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b canDogleg} ({\b Interval})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b canDogleg} ({\b Katabatic::GCell} *, unsigned int flags=0)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned long {\b getId} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned int {\b getDirection} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Net} * {\b getNet} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual const {\b Layer} * {\b getLayer} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Track} * {\b getTrack} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getIndex} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned long {\b getFreedomDegree} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual float {\b getMaxUnderDensity} (unsigned int flags=0) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Box} {\b getBoundingBox} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getNext} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getPrevious} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b DbU::Unit} {\b getAxis} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getSourceU} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getTargetU} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getLength} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Interval} {\b getCanonicalInterval} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Interval} {\b getFreeInterval} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Interval} {\b getSourceConstraints} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Interval} {\b getTargetConstraints} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b DataNegociate} * {\b getDataNegociate} (unsigned int flags={\b KtDataSelf}) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getCanonical} ({\b Interval} &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual size_t {\b getGCells} (Katabatic::GCellVector &) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getParent} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned int {\b getDoglegLevel} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getSourceDogleg} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getTargetDogleg} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual TrackElements {\b getPerpandiculars} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setFlags} (unsigned int)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b unsetFlags} (unsigned int)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b setTrack} ({\b Track} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setIndex} (size_t)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateFreedomDegree} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b setDoglegLevel} (unsigned int)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b swapTrack} ({\b TrackElement} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b reschedule} (unsigned int level)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b detach} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b invalidate} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b revalidate} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b incOverlapCost} ({\b Net} *, TrackCost &) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b setAxis} ({\b DbU::Unit}, unsigned int flags=Katabatic::SegAxisSet)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b makeDogleg} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b makeDogleg} ({\b Katabatic::GCell} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b makeDogleg} ({\b Interval}, unsigned int &flags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b _check} () const\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b SegmentOverlapCostCB} * {\b setOverlapCostCB} ({\b SegmentOverlapCostCB} *)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract Class for all Elements inserted inside a {\b Track}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {\bkmkstart AAAAAAAAQD} {\bkmkend AAAAAAAAQD} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid TrackElement Abstract \par} {\tc\tcl2 \v TrackElement Abstract} The {\b TrackElement} class is abstract and is used as base class for any element that can be inserted in a {\b Track}. It represent the footprint of that element inside the {\b Track} (an interval). Additionnaly it keep a pointer to the {\b Track} and it's index inside it ({\b Track} is implemented with a {\f2 vector<>} ).\par 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 {\f2 false} , {\f2 NULL} or {\f2 0} ({\i zero} ) or whatever is appropriated to tell it is not meaningful.\par {\b Design Note} \par {\b TrackElement} has been designed to serve as a base class for {\b TrackSegment} and {\b TrackMarker}. But, in the end, those two classes have been put in separated vectors inside the {\b Track}, thus rendering this design choice less pertinent. We keep it for now because we may introduce other object than {\b TrackSegment} inside a {\b Track}. If the need do not arise, we may merge back {\b TrackElement} and {\b TrackSegment}. \par} }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v setOverlapCostCB\:Kite::TrackElement} {\xe \v Kite::TrackElement\:setOverlapCostCB} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b SegmentOverlapCostCB} * setOverlapCostCB ({\b SegmentOverlapCostCB} * {\i cb}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAQE} {\bkmkend AAAAAAAAQE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i cb} \cell }{the new overlap cost callback. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid the previous overlap cost callback.\par }sets the overlap callback. \par }{ Referenced by NegociateWindow::run().}\par } {\xe \v isFixed\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isFixed} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isFixed () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQF} {\bkmkend AAAAAAAAQF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isFixed()}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQG \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b TrackFixedSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQH \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { 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().}\par } {\xe \v isHorizontal\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isHorizontal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isHorizontal () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAQI} {\bkmkend AAAAAAAAQI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isHorizontal()}. \par }{ Implemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQJ \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b TrackFixedSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQK \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by SegmentFsm::conflictSolveByHistory(), and Manipulator::makeDogleg().}\par } {\xe \v isVertical\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isVertical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isVertical () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAQL} {\bkmkend AAAAAAAAQL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isVertical()}. \par }{ Implemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQM \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b TrackFixedSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQN \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v isLocal\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isLocal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isLocal () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQO} {\bkmkend AAAAAAAAQO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ Katabatic::isLocal(). \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQP \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { 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().}\par } {\xe \v isGlobal\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isGlobal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isGlobal () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQQ} {\bkmkend AAAAAAAAQQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isGlobal()}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQR \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by SegmentFsm::conflictSolveByPlaceds(), Manipulator::insertInTrack(), Manipulator::relax(), Manipulator::repackPerpandiculars(), and SegmentFsm::SegmentFsm().}\par } {\xe \v isBipoint\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isBipoint} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isBipoint () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQS} {\bkmkend AAAAAAAAQS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isBipoint()}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQT \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by SegmentFsm::desaturate().}\par } {\xe \v isTerminal\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isTerminal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isTerminal () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQU} {\bkmkend AAAAAAAAQU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ Katabatic::AutoSegment::isTerminal(). \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQV \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by Manipulator::makeDogleg(), and Manipulator::relax().}\par } {\xe \v isStrap\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isStrap} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isStrap () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQW} {\bkmkend AAAAAAAAQW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isStrap()}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQX \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by Manipulator::insertInTrack(), Manipulator::pivotDown(), Manipulator::pivotUp(), SegmentFsm::SegmentFsm(), and SegmentFsm::slackenTopology().}\par } {\xe \v isSlackened\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isSlackened} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isSlackened () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQY} {\bkmkend AAAAAAAAQY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isSlackened()}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQZ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v isDogleg\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isDogleg () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARA} {\bkmkend AAAAAAAARA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ Katabatic::isDogleg(). \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARB \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v isCreated\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isCreated} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isCreated () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARC} {\bkmkend AAAAAAAARC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isCreated()}. \par }} {\xe \v isInvalidated\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isInvalidated} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isInvalidated () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARD} {\bkmkend AAAAAAAARD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the segment is invalidated (may be different from the supporting AutoSegment status). \par }{ Referenced by SegmentObserver::notify().}\par } {\xe \v isBlockage\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isBlockage} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isBlockage () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARE} {\bkmkend AAAAAAAARE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b true} if the element is a blockage (obstacle). \par }{ Referenced by SegmentFsm::conflictSolveByPlaceds(), NegociateWindow::createTrackSegment(), Manipulator::insertInTrack(), and Manipulator::isCaged().}\par } {\xe \v isLocked\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isLocked} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isLocked () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARF} {\bkmkend AAAAAAAARF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b true} if the element is part of a net, but must not be moved by the router, whatever the reason. \par }} {\xe \v isRouted\:Kite::TrackElement} {\xe \v Kite::TrackElement\:isRouted} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isRouted () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARG} {\bkmkend AAAAAAAARG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b true} if the router has placed it. \par }{ Referenced by TrackSegment::canDogleg().}\par } {\xe \v hasSourceDogleg\:Kite::TrackElement} {\xe \v Kite::TrackElement\:hasSourceDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool hasSourceDogleg () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARH} {\bkmkend AAAAAAAARH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This method purpose has not been reviewed yet. \par }{ Referenced by TrackSegment::canDogleg(), TrackSegment::getSourceDogleg(), and TrackSegment::getTargetDogleg().}\par } {\xe \v hasTargetDogleg\:Kite::TrackElement} {\xe \v Kite::TrackElement\:hasTargetDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool hasTargetDogleg () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARI} {\bkmkend AAAAAAAARI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This method purpose has not been reviewed yet. \par }{ Referenced by TrackSegment::canDogleg().}\par } {\xe \v canRipple\:Kite::TrackElement} {\xe \v Kite::TrackElement\:canRipple} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canRipple () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARJ} {\bkmkend AAAAAAAARJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This method purpose has not been reviewed yet. \par }{ Referenced by Manipulator::ripple().}\par } {\xe \v canDogleg\:Kite::TrackElement} {\xe \v Kite::TrackElement\:canDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canDogleg (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARK} {\bkmkend AAAAAAAARK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b AutoSegment::canDogleg()}. At {\b 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. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARL \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by SegmentFsm::conflictSolveByHistory(), Manipulator::makeDogleg(), and Manipulator::relax().}\par } {\xe \v canDogleg\:Kite::TrackElement} {\xe \v Kite::TrackElement\:canDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canDogleg ({\b Interval} ){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARM} {\bkmkend AAAAAAAARM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b AutoSegment::canDogleg()}. At {\b 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. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARN \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v canDogleg\:Kite::TrackElement} {\xe \v Kite::TrackElement\:canDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canDogleg ({\b Katabatic::GCell} * {\i doglegGCell}, unsigned int {\i flags} = {\f2 0}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARO} {\bkmkend AAAAAAAARO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b AutoSegment::canDogleg()}. At kite level, this variant of the method is mainly targeted to global segment. For local segment it behave like {\b TrackElement::canDogleg(Interval)}. For global segment, make the break in the requested GCell {\f2 doglegGCell} . If it's in the first or last GCell and there is already a dogleg, allow to reuse it if {\f2 flags} contains {\b Kite::KtAllowDoglegReuse}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARP \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getId\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getId} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned long getId () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARQ} {\bkmkend AAAAAAAARQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The {\f2 Id} of the supporting AutoSegment, if there is any. {\i Zero} otherwise. \par }}{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARR \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b TrackFixedSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARS \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by RoutingEvent::process().}\par } {\xe \v getDirection\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getDirection} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDirection () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAART} {\bkmkend AAAAAAAART} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The direction of the supporting element (should match the preferred direction of the {\b Track}). \par }}{ Implemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARU \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b TrackFixedSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARV \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackElement::getBoundingBox(), TrackSegment::getSourceDogleg(), TrackSegment::getTargetDogleg(), Manipulator::makeDogleg(), Manipulator::minimize(), Manipulator::relax(), and Manipulator::ripple().}\par } {\xe \v getNet\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getNet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Net} * getNet () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAARW} {\bkmkend AAAAAAAARW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The Net associated to the element (may be {\f2 NULL} ). \par }{ Implemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARX \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b TrackFixedSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARY \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { 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().}\par } {\xe \v getLayer\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Layer} * getLayer () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAARZ} {\bkmkend AAAAAAAARZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The Layer of the element (should match the one of the {\b Track}). \par }{ Implemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASA \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b TrackFixedSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASB \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by SegmentFsm::conflictSolveByHistory(), SegmentFsm::conflictSolveByPlaceds(), Track::insert(), Manipulator::relax(), RoutingEvent::revalidate(), Manipulator::ripple(), Manipulator::ripupPerpandiculars(), and SegmentFsm::SegmentFsm().}\par } {\xe \v getTrack\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Track} * getTrack () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAASC} {\bkmkend AAAAAAAASC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b Track} into which the element is inserted (may be {\f2 NULL} ). \par }{ Referenced by RoutingEventQueue::add(), SegmentAction::doAction(), TrackFixedSegment::getAxis(), TrackFixedSegment::getDirection(), DataNegociate::getTrack(), Manipulator::isCaged(), TrackFixedSegment::isHorizontal(), TrackFixedSegment::isVertical(), Manipulator::relax(), and TrackSegment::swapTrack().}\par } {\xe \v getIndex\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getIndex} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getIndex () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAASD} {\bkmkend AAAAAAAASD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The index of the element inside the {\b Track}'s vector.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: If the element is not inserted in a Track, it is set to\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Track::npos}, and obviously must not be used. \par }}{ Referenced by TrackSegment::swapTrack().}\par } {\xe \v getFreedomDegree\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getFreedomDegree} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned long getFreedomDegree () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASE} {\bkmkend AAAAAAAASE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The degree of freedom of the element. It is used as a priority value when sorting {\b TrackElement} (in {\b RoutingEvent}).\par {\b Returns:} The degree of freedom of the element. It is used as a priority value when sorting {\b TrackElement} (in {\b RoutingEvent}).\par Currently, it is the {\i slack} of the {\b Katabatic::AutoSegment}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASF \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by RoutingEvent::process().}\par } {\xe \v getMaxUnderDensity\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getMaxUnderDensity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getMaxUnderDensity (unsigned int {\i flags} = {\f2 0}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASG} {\bkmkend AAAAAAAASG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The maximum density of all the GCells under this element. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASH \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getBoundingBox\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getBoundingBox} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Box} getBoundingBox () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAASI} {\bkmkend AAAAAAAASI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The box that this element uses in the {\b Track}. \par }} {\xe \v getNext\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getNext} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getNext () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASJ} {\bkmkend AAAAAAAASJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The next {\b TrackElement}, on the same track and of a {\i different} net. {\b See also:} \~ {\b Track::getNext()}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASK \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b TrackFixedSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASL \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by Manipulator::isCaged().}\par } {\xe \v getPrevious\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getPrevious} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getPrevious () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASM} {\bkmkend AAAAAAAASM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The previous {\b TrackElement}, on the same track and of a {\i different} net. {\b See also:} \~ {\b Track::getPrevious()}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASN \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b TrackFixedSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASO \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by Manipulator::isCaged().}\par } {\xe \v getAxis\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getAxis} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getAxis () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAASP} {\bkmkend AAAAAAAASP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The axis position of the element (must be the same as the {\b Track}). \par }{ Implemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASQ \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b TrackFixedSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASR \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by SegmentFsm::conflictSolveByHistory(), TrackElement::getBoundingBox(), Manipulator::ripple(), and Manipulator::ripupPerpandiculars().}\par } {\xe \v getSourceU\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getSourceU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getSourceU () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAASS} {\bkmkend AAAAAAAASS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The minimun of the interval used by the element (cached in an attribute). \par }{ Referenced by TrackSegment::_check(), SegmentFsm::conflictSolveByHistory(), Track::find(), TrackElement::getBoundingBox(), TrackElement::getCanonicalInterval(), TrackElement::getLength(), Manipulator::insertInTrack(), Manipulator::isCaged(), Manipulator::minimize(), and Manipulator::shrinkToTrack().}\par } {\xe \v getTargetU\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getTargetU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getTargetU () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAST} {\bkmkend AAAAAAAAST} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The maximum of the interval used by the element (cached in an attribute). \par }{ Referenced by TrackSegment::_check(), TrackElement::getBoundingBox(), TrackElement::getCanonicalInterval(), TrackElement::getLength(), Manipulator::insertInTrack(), and Manipulator::isCaged().}\par } {\xe \v getLength\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getLength} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getLength () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAASU} {\bkmkend AAAAAAAASU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The length of the interval used by the element. \par }{ Referenced by NegociateWindow::computeWirelength(), Manipulator::makeDogleg(), Manipulator::moveUp(), and RoutingEvent::revalidate().}\par } {\xe \v getCanonicalInterval\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getCanonicalInterval} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getCanonicalInterval () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAASV} {\bkmkend AAAAAAAASV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The interval span used by the element inside the {\b Track}. \par }{ 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().}\par } {\xe \v getFreeInterval\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getFreeInterval} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getFreeInterval () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASW} {\bkmkend AAAAAAAASW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The greatest free interval enclosing this element. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASX \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b TrackFixedSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASY \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getSourceConstraints\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getSourceConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getSourceConstraints () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASZ} {\bkmkend AAAAAAAASZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::getSourceConstraints()}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getTargetConstraints\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getTargetConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getTargetConstraints () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATB} {\bkmkend AAAAAAAATB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::getTargetConstraints()}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATC \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getDataNegociate\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getDataNegociate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DataNegociate} * getDataNegociate (unsigned int {\i flags} = {\f2 {\b KtDataSelf}}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATD} {\bkmkend AAAAAAAATD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The additional data-structure supplied by the routing algorithm. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATE \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { 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().}\par } {\xe \v getCanonical\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getCanonical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getCanonical ({\b Interval} & {\i i}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATF} {\bkmkend AAAAAAAATF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Inner working still unclear to myself. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by NegociateWindow::createTrackSegment(), and DataNegociate::update().}\par } {\xe \v getGCells\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getGCells} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getGCells (Katabatic::GCellVector & {\i gcells}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATH} {\bkmkend AAAAAAAATH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The table of {\b Katabatic::GCell} underneath the element whole span. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATI \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by Manipulator::makeDogleg(), and Manipulator::relax().}\par } {\xe \v getParent\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getParent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getParent () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATJ} {\bkmkend AAAAAAAATJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b TrackElement} from which the dogleg has been created, if any. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATK \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by RoutingEvent::setAxisHintFromParent().}\par } {\xe \v getDoglegLevel\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getDoglegLevel} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDoglegLevel () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATL} {\bkmkend AAAAAAAATL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The deepness of the dogleg. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATM \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getSourceDogleg\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getSourceDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getSourceDogleg (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATN} {\bkmkend AAAAAAAATN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The source part of the segment from which the dogleg has been created. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATO \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by Manipulator::relax().}\par } {\xe \v getTargetDogleg\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getTargetDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getTargetDogleg (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATP} {\bkmkend AAAAAAAATP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The target part of the segment from which the dogleg has been created. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATQ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by Manipulator::relax().}\par } {\xe \v getPerpandiculars\:Kite::TrackElement} {\xe \v Kite::TrackElement\:getPerpandiculars} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b TrackElements getPerpandiculars (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATR} {\bkmkend AAAAAAAATR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The collection of all element perpandiculars to this one. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATS \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by Manipulator::forceToTrack(), and Manipulator::insertInTrack().}\par } {\xe \v setFlags\:Kite::TrackElement} {\xe \v Kite::TrackElement\:setFlags} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setFlags (unsigned int {\i flags}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAATT} {\bkmkend AAAAAAAATT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set to {\b true} {\f2 flags} in the element state array. \par }{ Referenced by TrackSegment::detach(), TrackSegment::invalidate(), and Manipulator::relax().}\par } {\xe \v unsetFlags\:Kite::TrackElement} {\xe \v Kite::TrackElement\:unsetFlags} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void unsetFlags (unsigned int {\i flags}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAATU} {\bkmkend AAAAAAAATU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Reset to {\b false} {\f2 flags} in the element state array. \par }{ Referenced by TrackSegment::revalidate().}\par } {\xe \v setTrack\:Kite::TrackElement} {\xe \v Kite::TrackElement\:setTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setTrack ({\b Track} * {\i track}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATV} {\bkmkend AAAAAAAATV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Insert the element into {\f2 track} , also used as an insertion marker. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATW \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by Track::insert(), and TrackSegment::setTrack().}\par } {\xe \v setIndex\:Kite::TrackElement} {\xe \v Kite::TrackElement\:setIndex} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setIndex (size_t {\i index}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAATX} {\bkmkend AAAAAAAATX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Cache the element's index in the {\b Track} internal vector. \par }{ Referenced by TrackSegment::detach(), and TrackSegment::swapTrack().}\par } {\xe \v updateFreedomDegree\:Kite::TrackElement} {\xe \v Kite::TrackElement\:updateFreedomDegree} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateFreedomDegree (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATY} {\bkmkend AAAAAAAATY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Update, from the element characteristics, it's degree of freedom. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATZ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v setDoglegLevel\:Kite::TrackElement} {\xe \v Kite::TrackElement\:setDoglegLevel} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setDoglegLevel (unsigned int {\i level}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUA} {\bkmkend AAAAAAAAUA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets the level of dogleg of the element. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUB \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v swapTrack\:Kite::TrackElement} {\xe \v Kite::TrackElement\:swapTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void swapTrack ({\b TrackElement} * {\i other}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUC} {\bkmkend AAAAAAAAUC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Swap the tracks of {\f2 this} and {\f2 other} . \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUD \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v reschedule\:Kite::TrackElement} {\xe \v Kite::TrackElement\:reschedule} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void reschedule (unsigned int {\i level}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUE} {\bkmkend AAAAAAAAUE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid If the {\b TrackElement} has already an event scheduled, change the level of this event, otherwise create a new event.\par {\b See also:} \~ NegotiateWindow::rescheduleEvent(). \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUF \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::_postDoglegs().}\par } {\xe \v detach\:Kite::TrackElement} {\xe \v Kite::TrackElement\:detach} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void detach (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUG} {\bkmkend AAAAAAAAUG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Remove the link from the {\b TrackElement} to it's owning {\b Track}, marking it for removal. The removal from the {\b Track}'s vector is managed by the {\b Track} itself during the {\b Session} revalidation stage. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUH \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v invalidate\:Kite::TrackElement} {\xe \v Kite::TrackElement\:invalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void invalidate (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUI} {\bkmkend AAAAAAAAUI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b AutoSegment::invalidate()}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUJ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by NegociateWindow::createTrackSegment(), and SegmentObserver::notify().}\par } {\xe \v revalidate\:Kite::TrackElement} {\xe \v Kite::TrackElement\:revalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void revalidate (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUK} {\bkmkend AAAAAAAAUK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Actualize the {\b TrackElement} characteristics from the supporting elements (set of AutoSegment).\par Must be completed with the event management \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUL \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v incOverlapCost\:Kite::TrackElement} {\xe \v Kite::TrackElement\:incOverlapCost} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void incOverlapCost ({\b Net} * {\i net}, TrackCost & {\i cost}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUM} {\bkmkend AAAAAAAAUM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ Compute the cost of overlap between this segment and the interval specified in {\f2 cost} . Mainly calls the relevant callback. \par }} {\xe \v setAxis\:Kite::TrackElement} {\xe \v Kite::TrackElement\:setAxis} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setAxis ({\b DbU::Unit} , unsigned int {\i flags} = {\f2 Katabatic::SegAxisSet}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUN} {\bkmkend AAAAAAAAUN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets the axis of the {\b TrackElement}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUO \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by NegociateWindow::createTrackSegment(), SegmentAction::doAction(), Track::insert(), TrackSegment::makeDogleg(), and Manipulator::relax().}\par } {\xe \v makeDogleg\:Kite::TrackElement} {\xe \v Kite::TrackElement\:makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * makeDogleg (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUP} {\bkmkend AAAAAAAAUP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a dogleg on the source end of the {\b TrackSegment}. Put the dogleg axis on the source {\b To be further reviewed} .\par {\b See also:} \~ {\b Dogleg management}.\par Post-processing done by {\b TrackSegment::_postDoglegs()}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUQ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by SegmentFsm::conflictSolveByHistory(), Manipulator::makeDogleg(), TrackElement::makeDogleg(), and Manipulator::relax().}\par } {\xe \v makeDogleg\:Kite::TrackElement} {\xe \v Kite::TrackElement\:makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * makeDogleg ({\b Katabatic::GCell} * {\i gcell}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAUR} {\bkmkend AAAAAAAAUR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b AutoSegment::makeDogleg()}, {\b Dogleg management}.\par Post-processing done by {\b TrackSegment::_postDoglegs()}. \par }} {\xe \v makeDogleg\:Kite::TrackElement} {\xe \v Kite::TrackElement\:makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * makeDogleg ({\b Interval} {\i interval}, unsigned int & {\i flags}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUS} {\bkmkend AAAAAAAAUS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b AutoSegment::makeDogleg()}, {\b Dogleg management}, the return flags from this method are returned through the {\f2 flags} variable.\par Post-processing done by {\b TrackSegment::_postDoglegs()}. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUT \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v _check\:Kite::TrackElement} {\xe \v Kite::TrackElement\:_check} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool _check () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUU} {\bkmkend AAAAAAAAUU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Check the coherency of the element. For a {\b TrackSegment}:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The supporting AutoSegment the canonical one of the set.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The cached {\f2 min} & {\f2 max} values are identical to the computed ones.\par} {\b Returns:} {\b true} on success. \par }{ Reimplemented in {\b TrackSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUV \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackElement.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackElement.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackElement.dox\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackSegment.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid TrackFixedSegment Class Reference\par \pard\plain {\tc\tcl2 \v TrackFixedSegment} {\xe \v TrackFixedSegment} {\bkmkstart AAAAAAAAUW} {\bkmkend AAAAAAAAUW} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Track} elements for fixed wires. }}\par Inheritance diagram for TrackFixedSegment:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKite_1_1TrackFixedSegment__inherit__graph.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par } \par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isHorizontal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isVertical} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isFixed} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned long {\b getId} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned int {\b getDirection} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Net} * {\b getNet} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual const {\b Layer} * {\b getLayer} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getNext} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getPrevious} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b DbU::Unit} {\b getAxis} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Interval} {\b getFreeInterval} () const\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b TrackElement} * {\b create} ({\b Kite::Track} *track, {\b Segment} *segment)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Track} elements for fixed wires. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A {\b TrackFixedSegment} is a segment that cannot be moved from the track. It can be associated to a true blockage Segment (recognised by the fact that their owner net is the {\i blockage} net), or to a segment from an ordinary net but which is locked into position. In the latter case, the owned net may reuse this portion of the track if it needs it.\par In all cases, the blockage ratio of the GCells underneath the segment are updated. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v create\:Kite::TrackFixedSegment} {\xe \v Kite::TrackFixedSegment\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackSegment} * create ({\b Kite::Track} * {\i track}, {\b Segment} * {\i segment}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAUX} {\bkmkend AAAAAAAAUX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i segment} \cell }{The Hurricane Segment (blockage) to take into account. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i track} \cell }{A {\b Track} into which insert the {\b TrackFixedSegment}. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid A {\b TrackFixedSegment} wrapped around a blockage Segment.\par }Public constructor to insert blockage inside a {\b Track}. \par }} {\xe \v isHorizontal\:Kite::TrackFixedSegment} {\xe \v Kite::TrackFixedSegment\:isHorizontal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isHorizontal () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQK} {\bkmkend AAAAAAAAQK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isHorizontal()}. \par }{ Implements {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQI \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v isVertical\:Kite::TrackFixedSegment} {\xe \v Kite::TrackFixedSegment\:isVertical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isVertical () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQN} {\bkmkend AAAAAAAAQN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isVertical()}. \par }{ Implements {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQL \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v isFixed\:Kite::TrackFixedSegment} {\xe \v Kite::TrackFixedSegment\:isFixed} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isFixed () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQH} {\bkmkend AAAAAAAAQH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isFixed()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQF \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getId\:Kite::TrackFixedSegment} {\xe \v Kite::TrackFixedSegment\:getId} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned long getId () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARS} {\bkmkend AAAAAAAARS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The {\f2 Id} of the supporting AutoSegment, if there is any. {\i Zero} otherwise. \par }}{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARQ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getDirection\:Kite::TrackFixedSegment} {\xe \v Kite::TrackFixedSegment\:getDirection} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDirection () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARV} {\bkmkend AAAAAAAARV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The direction of the supporting element (should match the preferred direction of the {\b Track}). \par }}{ Implements {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAART \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getNet\:Kite::TrackFixedSegment} {\xe \v Kite::TrackFixedSegment\:getNet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Net} * getNet () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARY} {\bkmkend AAAAAAAARY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The Net associated to the element (may be {\f2 NULL} ). \par }{ Implements {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARW \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackFixedSegment::getNext(), and TrackFixedSegment::getPrevious().}\par } {\xe \v getLayer\:Kite::TrackFixedSegment} {\xe \v Kite::TrackFixedSegment\:getLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Layer} * getLayer () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASB} {\bkmkend AAAAAAAASB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The Layer of the element (should match the one of the {\b Track}). \par }{ Implements {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARZ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getNext\:Kite::TrackFixedSegment} {\xe \v Kite::TrackFixedSegment\:getNext} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getNext () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASL} {\bkmkend AAAAAAAASL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The next {\b TrackElement}, on the same track and of a {\i different} net. {\b See also:} \~ {\b Track::getNext()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASJ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getPrevious\:Kite::TrackFixedSegment} {\xe \v Kite::TrackFixedSegment\:getPrevious} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getPrevious () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASO} {\bkmkend AAAAAAAASO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The previous {\b TrackElement}, on the same track and of a {\i different} net. {\b See also:} \~ {\b Track::getPrevious()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASM \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getAxis\:Kite::TrackFixedSegment} {\xe \v Kite::TrackFixedSegment\:getAxis} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getAxis () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASR} {\bkmkend AAAAAAAASR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The axis position of the element (must be the same as the {\b Track}). \par }{ Implements {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASP \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getFreeInterval\:Kite::TrackFixedSegment} {\xe \v Kite::TrackFixedSegment\:getFreeInterval} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getFreeInterval () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASY} {\bkmkend AAAAAAAASY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The greatest free interval enclosing this element. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASW \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackFixedSegment.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackFixedSegment.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackFixedSegment.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid TrackMarker Class Reference\par \pard\plain {\tc\tcl2 \v TrackMarker} {\xe \v TrackMarker} {\bkmkstart AAAAAAAAUY} {\bkmkend AAAAAAAAUY} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Tag part of {\b Track} with a weight. }}\par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Net} * {\b getNet} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getSourceU} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b DbU::Unit} {\b getTargetU} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Track} * {\b getTrack} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getWeight} (const {\b Track} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setTrack} ({\b Track} *)\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b TrackMarker} * {\b create} ({\b RoutingPad} *, size_t depth)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Tag part of {\b Track} with a weight. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid TrackMarkers are used to assign a cost on a span of {\b Track} telling how strongly a terminal is dependant on that {\b Track} to be accessed. The more {\b Track} a terminal crosses, the less the weight is.\par The weight is expressed in hundreth (can also be understood as percentage) of dependency over the {\b Track}. As example, if a terminal can only be accessed trough one {\b Track} is weight on it will be {\f2 100} . \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v create\:Kite::TrackMarker} {\xe \v Kite::TrackMarker\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b create ({\b RoutingPad} * {\i rp}, size_t {\i depth}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAUZ} {\bkmkend AAAAAAAAUZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i rp} \cell }{The RoutingPad to be accessed. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i depth} \cell }{Select the layer depth by which we want to access the RoutingPad. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The newly created {\b TrackMarker}.\par }This constructor automatically take care of inserting the {\b TrackMarker} in the relevant Tracks, so it must be called during a {\b Session}. \par }} {\xe \v getNet\:Kite::TrackMarker} {\xe \v Kite::TrackMarker\:getNet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Net} * getNet () const}} \par {\bkmkstart AAAAAAAAVA} {\bkmkend AAAAAAAAVA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The net of the RoutingPad. \par }} {\xe \v getSourceU\:Kite::TrackMarker} {\xe \v Kite::TrackMarker\:getSourceU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getSourceU () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAVB} {\bkmkend AAAAAAAAVB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The span minimum bound. \par }} {\xe \v getTargetU\:Kite::TrackMarker} {\xe \v Kite::TrackMarker\:getTargetU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getTargetU () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAVC} {\bkmkend AAAAAAAAVC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The span maximum bound. \par }} {\xe \v getTrack\:Kite::TrackMarker} {\xe \v Kite::TrackMarker\:getTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Track} * getTrack () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAVD} {\bkmkend AAAAAAAAVD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b Track} into which the marker is inserted. \par }} {\xe \v getWeight\:Kite::TrackMarker} {\xe \v Kite::TrackMarker\:getWeight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getWeight (const {\b Track} * {\i track}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAVE} {\bkmkend AAAAAAAAVE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The associated weight, for now the {\b Track} argument is ignored. \par }} {\xe \v setTrack\:Kite::TrackMarker} {\xe \v Kite::TrackMarker\:setTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setTrack ({\b Track} * {\i track}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAVF} {\bkmkend AAAAAAAAVF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets the owning {\b Track}. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackMarker.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackMarker.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackMarker.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid TrackSegment Class Reference\par \pard\plain {\tc\tcl2 \v TrackSegment} {\xe \v TrackSegment} {\bkmkstart AAAAAAAAVG} {\bkmkend AAAAAAAAVG} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Derived {\b Katabatic::AutoSegment} for the router. }}\par Inheritance diagram for TrackSegment:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKite_1_1TrackSegment__inherit__graph.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par } \par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isFixed} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isHorizontal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isVertical} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isLocal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isGlobal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isBipoint} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isTerminal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isStrap} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isSlackened} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isDogleg} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b canDogleg} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b canDogleg} ({\b Interval})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b canDogleg} ({\b Katabatic::GCell} *, unsigned int flags=0)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual float {\b getMaxUnderDensity} (unsigned int flags) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned long {\b getId} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned int {\b getDirection} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Net} * {\b getNet} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual const {\b Layer} * {\b getLayer} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned long {\b getFreedomDegree} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned int {\b getDoglegLevel} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getNext} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getPrevious} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getParent} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b DbU::Unit} {\b getAxis} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Interval} {\b getFreeInterval} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Interval} {\b getSourceConstraints} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Interval} {\b getTargetConstraints} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b DataNegociate} * {\b getDataNegociate} (unsigned int flags={\b KtDataSelf}) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getCanonical} ({\b Interval} &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual size_t {\b getGCells} (Katabatic::GCellVector &) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getSourceDogleg} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b getTargetDogleg} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual TrackElements {\b getPerpandiculars} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b setTrack} ({\b Track} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateFreedomDegree} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b setDoglegLevel} (unsigned int)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b swapTrack} ({\b TrackElement} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b reschedule} (unsigned int level)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b detach} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b invalidate} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b revalidate} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b setAxis} ({\b DbU::Unit}, unsigned int flags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b makeDogleg} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b TrackElement} * {\b makeDogleg} ({\b Interval}, unsigned int &flags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b _postDoglegs} ({\b TrackElement} *&perpandicular, {\b TrackElement} *¶llel)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b _check} () const\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b TrackElement} * {\b create} ({\b AutoSegment} *, {\b Track} *, bool &created)\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Derived {\b Katabatic::AutoSegment} for the router. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid We create one {\b TrackSegment} per aligned {\b Katabatic::AutoSegment} set, the {\b TrackSegment} is associated to the canonical one of the set.\par To provide some speedup, the full extention of the aligned segment set is computed once and stored in the {\b TrackSegment} itself. The drawback beeing that whenever one segment from the aligned set has it's extention modified, the full extention must be recomputed.\par {\bkmkstart AAAAAAAAVH} {\bkmkend AAAAAAAAVH} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Lazy Revalidate \par} {\tc\tcl2 \v Lazy Revalidate} When the {\b TrackSegment::revalidate()} 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.\par The associated {\b DataNegociate} and {\b RoutingEvent} are {\b not} updated.{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The {\b RoutingEvent} will be updated when it's key is updated, typically during a requeueing operation {\b and} in the {\b SegmentFsm} constructor. This should be optimized in the future.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The {\b DataNegociate} is updated {\i only} in the {\b SegmentFsm} constructor. This is the most costly of the two updates as it perform a perpandicular & parallel connexity exploration.\par} \par} {\bkmkstart AAAAAAAAVI} {\bkmkend AAAAAAAAVI} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Dogleg Management \par} {\tc\tcl2 \v Dogleg Management} The basic {\b AutoSegment::canDogleg()} method is declined in three more dedicated methods in this class:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackSegment::canDogleg()}, for locals only, check if a break is possible, never break a segment more than once (to avoid fragmentation).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackSegment::canDogleg(Katabatic::GCell*,unsigned int flags)} for globals, check that the segment is breakable in the desired GCell. Never break twice in the first/last GCell (fragmentation limitation), but may {\i reuse} an already existing dogleg.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b TrackSegment::canDogleg(Interval)}, for locals only, direct proxy for the AutoSegment method. Never allow more than one break.\par} {\b Relationship between AutoSegment and {\b TrackSegment}} \par Figure 2 below, shows an example of dogleg creation:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid At the Katabatic level, AutoSegment {\f2 id:12} is broken. Thus the creation of AutoSegments {\f2 id:20} and {\f2 id:21} . The orignal {\b TrackSegment} (canonical AutoSegment {\f2 id:10} ) remains on the right side (target) of the break.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid But, because the canonical of the former aligned AutoSegment set {\f2 } (10,11,12,13,14) was on the {\i right} side of the break, the new parallel {\b TrackSegment} will be created on the {\f2 left} side, associated to the newly promoted canonical AutoSegment {\f2 id:12} .\par} The {\b TrackSegment::_postDoglegs()} method called by all flavors of {\b TrackSegment::makeDogleg()} 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.\par {\b This section is not finished.} 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 {\i break} counter separate from deepness.\par} {\bkmkstart AAAAAAAAVJ} {\bkmkend AAAAAAAAVJ} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Global, Weak Global and Local Segments \par} {\tc\tcl2 \v Global, Weak Global and Local Segments} There's a slight semantic change between Katabatic and {\b Kite} about what is local and what is local. This is due to how we consider the intermediate status of {\i WeakGlobal} .\par A {\f2 WeakGlobal} segment is a local segment which is aligned with a global (though a VTee or an HTee contact).\par In Katabatic a local segment is one that is not {\f2 Global} , a local segment can be both {\f2 Local} and {\f2 WeakGlobal} .\par In {\b Kite} a local segment is one that is neither {\f2 Global} or {\f2 WeakGlobal} . The {\f2 WeakGlobal} sides with {\f2 Global} unlike in Katabatic. \par} }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v create\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b static {\b TrackSegment} * create ({\b AutoSegment} * {\i segment}, {\b Track} * {\i track}, bool & {\i created}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAVK} {\bkmkend AAAAAAAAVK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\par {\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Parameters:\par} \pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i segment} \cell }{The Katabatic AutoSegment to decorate. \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i track} \cell }{A {\b Track} into which insert the {\b TrackSegment} (may be {\f2 NULL} ). \cell } {\row } \trowd \trgaph108\trleft426\tblind426\trbrdrt\brdrs\brdrw10\brdrcf15 \trbrdrl\brdrs\brdrw10\brdrcf15 \trbrdrb\brdrs\brdrw10\brdrcf15 \trbrdrr\brdrs\brdrw10\brdrcf15 \trbrdrh\brdrs\brdrw10\brdrcf15 \trbrdrv\brdrs\brdrw10\brdrcf15 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx2187 \clvertalt\clbrdrt\brdrs\brdrw10\brdrcf15 \clbrdrl\brdrs\brdrw10\brdrcf15 \clbrdrb\brdrs\brdrw10\brdrcf15 \clbrdrr \brdrs\brdrw10\brdrcf15 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {{\i created} \cell }{This flag is sets is a new {\b TrackSegment} has be created. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid A {\b TrackSegment} wrapped around an AutoSegment.\par }Constructor mainly used at loading time to decorate the Katabatic data-base with the router attributes. \par }{ Referenced by NegociateWindow::createTrackSegment().}\par } {\xe \v isFixed\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:isFixed} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isFixed () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQG} {\bkmkend AAAAAAAAQG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isFixed()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQF \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::canDogleg().}\par } {\xe \v isHorizontal\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:isHorizontal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isHorizontal () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQJ} {\bkmkend AAAAAAAAQJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isHorizontal()}. \par }{ Implements {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQI \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::getGCells().}\par } {\xe \v isVertical\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:isVertical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isVertical () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQM} {\bkmkend AAAAAAAAQM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isVertical()}. \par }{ Implements {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQL \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v isLocal\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:isLocal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isLocal () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQP} {\bkmkend AAAAAAAAQP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ Katabatic::isLocal(). \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQO \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::_postDoglegs(), and TrackSegment::canDogleg().}\par } {\xe \v isGlobal\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:isGlobal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isGlobal () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQR} {\bkmkend AAAAAAAAQR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isGlobal()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQQ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v isBipoint\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:isBipoint} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isBipoint () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQT} {\bkmkend AAAAAAAAQT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isBipoint()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQS \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v isTerminal\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:isTerminal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isTerminal () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQV} {\bkmkend AAAAAAAAQV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ Katabatic::AutoSegment::isTerminal(). \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQU \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v isStrap\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:isStrap} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isStrap () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQX} {\bkmkend AAAAAAAAQX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isStrap()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQW \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v isSlackened\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:isSlackened} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isSlackened () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQZ} {\bkmkend AAAAAAAAQZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::isSlackened()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQY \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::canDogleg().}\par } {\xe \v isDogleg\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:isDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isDogleg () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARB} {\bkmkend AAAAAAAARB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ Katabatic::isDogleg(). \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v canDogleg\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:canDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canDogleg (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARL} {\bkmkend AAAAAAAARL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b AutoSegment::canDogleg()}. At {\b 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. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARK \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v canDogleg\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:canDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canDogleg ({\b Interval} ){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARN} {\bkmkend AAAAAAAARN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b AutoSegment::canDogleg()}. At {\b 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. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARM \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v canDogleg\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:canDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canDogleg ({\b Katabatic::GCell} * {\i doglegGCell}, unsigned int {\i flags} = {\f2 0}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARP} {\bkmkend AAAAAAAARP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b AutoSegment::canDogleg()}. At kite level, this variant of the method is mainly targeted to global segment. For local segment it behave like {\b TrackElement::canDogleg(Interval)}. For global segment, make the break in the requested GCell {\f2 doglegGCell} . If it's in the first or last GCell and there is already a dogleg, allow to reuse it if {\f2 flags} contains {\b Kite::KtAllowDoglegReuse}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARO \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getMaxUnderDensity\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getMaxUnderDensity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getMaxUnderDensity (unsigned int {\i flags}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASH} {\bkmkend AAAAAAAASH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The maximum density of all the GCells under this element. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getId\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getId} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned long getId () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARR} {\bkmkend AAAAAAAARR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The {\f2 Id} of the supporting AutoSegment, if there is any. {\i Zero} otherwise. \par }}{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARQ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::detach().}\par } {\xe \v getDirection\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getDirection} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDirection () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARU} {\bkmkend AAAAAAAARU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The direction of the supporting element (should match the preferred direction of the {\b Track}). \par }}{ Implements {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAART \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::getSourceDogleg(), and TrackSegment::getTargetDogleg().}\par } {\xe \v getNet\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getNet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Net} * getNet () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAARX} {\bkmkend AAAAAAAARX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The Net associated to the element (may be {\f2 NULL} ). \par }{ Implements {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARW \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::getFreeInterval(), TrackSegment::getNext(), and TrackSegment::getPrevious().}\par } {\xe \v getLayer\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Layer} * getLayer () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASA} {\bkmkend AAAAAAAASA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The Layer of the element (should match the one of the {\b Track}). \par }{ Implements {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAARZ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getFreedomDegree\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getFreedomDegree} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned long getFreedomDegree () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASF} {\bkmkend AAAAAAAASF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The degree of freedom of the element. It is used as a priority value when sorting {\b TrackElement} (in {\b RoutingEvent}).\par {\b Returns:} The degree of freedom of the element. It is used as a priority value when sorting {\b TrackElement} (in {\b RoutingEvent}).\par Currently, it is the {\i slack} of the {\b Katabatic::AutoSegment}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASE \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getDoglegLevel\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getDoglegLevel} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDoglegLevel () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATM} {\bkmkend AAAAAAAATM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The deepness of the dogleg. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATL \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::canDogleg().}\par } {\xe \v getNext\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getNext} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getNext () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASK} {\bkmkend AAAAAAAASK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The next {\b TrackElement}, on the same track and of a {\i different} net. {\b See also:} \~ {\b Track::getNext()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASJ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getPrevious\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getPrevious} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getPrevious () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASN} {\bkmkend AAAAAAAASN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The previous {\b TrackElement}, on the same track and of a {\i different} net. {\b See also:} \~ {\b Track::getPrevious()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASM \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getParent\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getParent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getParent () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATK} {\bkmkend AAAAAAAATK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b TrackElement} from which the dogleg has been created, if any. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATJ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::getDataNegociate().}\par } {\xe \v getAxis\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getAxis} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getAxis () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASQ} {\bkmkend AAAAAAAASQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The axis position of the element (must be the same as the {\b Track}). \par }{ Implements {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASP \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getFreeInterval\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getFreeInterval} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getFreeInterval () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAASX} {\bkmkend AAAAAAAASX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The greatest free interval enclosing this element. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASW \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getSourceConstraints\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getSourceConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getSourceConstraints () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATA} {\bkmkend AAAAAAAATA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::getSourceConstraints()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAASZ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getTargetConstraints\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getTargetConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getTargetConstraints () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATC} {\bkmkend AAAAAAAATC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b Katabatic::AutoSegment::getTargetConstraints()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATB \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getDataNegociate\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getDataNegociate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DataNegociate} * getDataNegociate (unsigned int {\i flags} = {\f2 {\b KtDataSelf}}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATE} {\bkmkend AAAAAAAATE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The additional data-structure supplied by the routing algorithm. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATD \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::_postDoglegs(), and TrackSegment::swapTrack().}\par } {\xe \v getCanonical\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getCanonical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getCanonical ({\b Interval} & {\i i}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATG} {\bkmkend AAAAAAAATG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Inner working still unclear to myself. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATF \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getGCells\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getGCells} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getGCells (Katabatic::GCellVector & {\i gcells}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATI} {\bkmkend AAAAAAAATI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The table of {\b Katabatic::GCell} underneath the element whole span. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATH \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::canDogleg().}\par } {\xe \v getSourceDogleg\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getSourceDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getSourceDogleg (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATO} {\bkmkend AAAAAAAATO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The source part of the segment from which the dogleg has been created. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATN \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getTargetDogleg\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getTargetDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * getTargetDogleg (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATQ} {\bkmkend AAAAAAAATQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The target part of the segment from which the dogleg has been created. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATP \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getPerpandiculars\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:getPerpandiculars} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b TrackElements getPerpandiculars (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATS} {\bkmkend AAAAAAAATS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The collection of all element perpandiculars to this one. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATR \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v setTrack\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:setTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setTrack ({\b Track} * {\i track}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATW} {\bkmkend AAAAAAAATW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Insert the element into {\f2 track} , also used as an insertion marker. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATV \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::detach(), and TrackSegment::swapTrack().}\par } {\xe \v updateFreedomDegree\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:updateFreedomDegree} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateFreedomDegree (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAATZ} {\bkmkend AAAAAAAATZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Update, from the element characteristics, it's degree of freedom. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAATY \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v setDoglegLevel\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:setDoglegLevel} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setDoglegLevel (unsigned int {\i level}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUB} {\bkmkend AAAAAAAAUB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets the level of dogleg of the element. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v swapTrack\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:swapTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void swapTrack ({\b TrackElement} * {\i other}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUD} {\bkmkend AAAAAAAAUD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Swap the tracks of {\f2 this} and {\f2 other} . \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUC \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v reschedule\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:reschedule} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void reschedule (unsigned int {\i level}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUF} {\bkmkend AAAAAAAAUF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid If the {\b TrackElement} has already an event scheduled, change the level of this event, otherwise create a new event.\par {\b See also:} \~ NegotiateWindow::rescheduleEvent(). \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUE \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::_postDoglegs().}\par } {\xe \v detach\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:detach} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void detach (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUH} {\bkmkend AAAAAAAAUH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Remove the link from the {\b TrackElement} to it's owning {\b Track}, marking it for removal. The removal from the {\b Track}'s vector is managed by the {\b Track} itself during the {\b Session} revalidation stage. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v invalidate\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:invalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void invalidate (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUJ} {\bkmkend AAAAAAAAUJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b AutoSegment::invalidate()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUI \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::create(), and TrackSegment::setAxis().}\par } {\xe \v revalidate\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:revalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void revalidate (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUL} {\bkmkend AAAAAAAAUL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Actualize the {\b TrackSegment} characteristics from the supporting elements (set of AutoSegment).\par This method do not update the {\b DataNegociate} or the {\b RoutingEvent}. This is a lazy update delayed until the constructor of {\b SegmentFsm} is called. (see {\b Lazy Revalidate}). \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUK \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v setAxis\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:setAxis} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setAxis ({\b DbU::Unit} , unsigned int {\i flags}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUO} {\bkmkend AAAAAAAAUO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets the axis of the {\b TrackElement}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUN \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v makeDogleg\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * makeDogleg (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUQ} {\bkmkend AAAAAAAAUQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a dogleg on the source end of the {\b TrackSegment}. Put the dogleg axis on the source {\b To be further reviewed} .\par {\b See also:} \~ {\b Dogleg management}.\par Post-processing done by {\b TrackSegment::_postDoglegs()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUP \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v makeDogleg\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackElement} * makeDogleg ({\b Interval} {\i interval}, unsigned int & {\i flags}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUT} {\bkmkend AAAAAAAAUT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b See also:} \~ {\b AutoSegment::makeDogleg()}, {\b Dogleg management}, the return flags from this method are returned through the {\f2 flags} variable.\par Post-processing done by {\b TrackSegment::_postDoglegs()}. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUS \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v _postDoglegs\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:_postDoglegs} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b TrackSegment} * _postDoglegs ({\b TrackElement} *& {\i perpandicular}, {\b TrackElement} *& {\i parallel}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAVL} {\bkmkend AAAAAAAAVL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Post-process to be called inside the various dogleg creation or slacken methods. Iterate through the newly created AutoSegments to create, for the {\i perpandicular} and the {\i new parallel} associateds TrackSegments. Also sets the dogleg levels and flags of the newly created elements.\par The session dogleg reset is called at the end of this method. The {\f2 perpandicular} and {\f2 parallel} references to pointers contains the newly created segments for the {\b last} dogleg. If more than one was created, you cannot access them (the need has not arised yet). \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQC \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by TrackSegment::makeDogleg().}\par } {\xe \v _check\:Kite::TrackSegment} {\xe \v Kite::TrackSegment\:_check} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool _check () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAUV} {\bkmkend AAAAAAAAUV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Check the coherency of the element. For a {\b TrackSegment}:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The supporting AutoSegment the canonical one of the set.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The cached {\f2 min} & {\f2 max} values are identical to the computed ones.\par} {\b Returns:} {\b true} on success. \par }{ Reimplemented from {\b TrackElement} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUU \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackSegment.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackSegment.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid TrackSegment.dox\par }\par \pard\plain \pard\plain \sect\sbkpage \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid \pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid VerticalTrack Class Reference\par \pard\plain {\tc\tcl2 \v VerticalTrack} {\xe \v VerticalTrack} {\bkmkstart AAAAAAAAVM} {\bkmkend AAAAAAAAVM} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Vertical track managment. }}\par Inheritance diagram for VerticalTrack:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKite_1_1VerticalTrack__inherit__graph.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par } \par \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Public Member Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isHorizontal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b isVertical} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned int {\b getDirection} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Point} {\b getPosition} ({\b DbU::Unit} coordinate) const\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Additional Inherited Members\par \pard\plain {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Detailed Description\par \pard\plain { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Vertical track managment. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Function Documentation\par \pard\plain {\xe \v isHorizontal\:Kite::VerticalTrack} {\xe \v Kite::VerticalTrack\:isHorizontal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isHorizontal () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAOK} {\bkmkend AAAAAAAAOK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if the {\b Track} in horizontal direction. \par }{ Implements {\b Track} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAADA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v isVertical\:Kite::VerticalTrack} {\xe \v Kite::VerticalTrack\:isVertical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isVertical () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAOL} {\bkmkend AAAAAAAAOL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b false} .\par {\b Returns:} {\b true} . \par }{ Implements {\b Track} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAADC \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getDirection\:Kite::VerticalTrack} {\xe \v Kite::VerticalTrack\:getDirection} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDirection () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAOP} {\bkmkend AAAAAAAAOP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} Katabatic::KbVertical. \par }{ Implements {\b Track} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAADE \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getPosition\:Kite::VerticalTrack} {\xe \v Kite::VerticalTrack\:getPosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Point} getPosition ({\b DbU::Unit} {\i position}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAPA} {\bkmkend AAAAAAAAPA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the point at {\f2 } ({\b getAxis()},position). \par }{ Implements {\b Track} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAADG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following files:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid VerticalTrack.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid VerticalTrack.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid VerticalTrack.dox\par } \pard\plain \sect\sbkpage \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid \s1\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs36\kerning36\cgrid Index\par \pard\plain {\tc \v Index} {\field\fldedit {\*\fldinst INDEX \\c2 \\*MERGEFORMAT}{\fldrslt INDEX}} }