{\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 Katabatic - Routing Toolbox {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid 1.0 \par }}Katabatic - Routing Toolbox} {\comment Generated byDoxgyen. } {\creatim \yr2020\mo11\dy12\hr13\min59\sec30} }\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 Katabatic - Routing Toolbox}}\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 Thu Nov 12 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 Katabatic Documentation\par \pard\plain {\tc \v Katabatic Documentation} { \pard\plain \s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Additionnal documents:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Synthetic Class Hierarchy} \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 Class Hierarchy\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAA \\*MERGEFORMAT}{\fldrslt pagenum}} \par Global Routing Loading\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAAB \\*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} \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 AAAAAAAABA \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{ChipTools.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABB \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{GCell.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABC \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{KatabaticEngine.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABD \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{LoadGrByNet.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABE \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b anonymous_namespace\{Session.cpp\}} } \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABG \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b Katabatic} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The namespace dedicated to {\b Katabatic} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABH \\*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 AutoContact\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAEA \\*MERGEFORMAT}{\fldrslt pagenum}} { \par \pard\plain \s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid AutoContactHTee\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHV \\*MERGEFORMAT}{\fldrslt pagenum}} \par AutoContactTerminal\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHX \\*MERGEFORMAT}{\fldrslt pagenum}} \par AutoContactTurn\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIA \\*MERGEFORMAT}{\fldrslt pagenum}} \par AutoContactVTee\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIC \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par AutoSegment\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKH \\*MERGEFORMAT}{\fldrslt pagenum}} { \par \pard\plain \s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid AutoHorizontal\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIE \\*MERGEFORMAT}{\fldrslt pagenum}} \par AutoVertical\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQQ \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par BaseGrid::Axis\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAARD \\*MERGEFORMAT}{\fldrslt pagenum}} \par BaseGrid\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQR \\*MERGEFORMAT}{\fldrslt pagenum}} { \par \pard\plain \s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid Grid< GCell >\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAWF \\*MERGEFORMAT}{\fldrslt pagenum}} { \par \pard\plain \s73\li1080\sa21\sb21\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid GCellGrid\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAVJ \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par Grid< GCellT >\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAWF \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par BaseObserver\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAARJ \\*MERGEFORMAT}{\fldrslt pagenum}} { \par \pard\plain \s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid Observer< T >\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAZA \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par ChipTools\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAARL \\*MERGEFORMAT}{\fldrslt pagenum}} \par Collection< Type > {\f2 [external]}{ \par \pard\plain \s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid AutoSegments_Aligneds\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAPP \\*MERGEFORMAT}{\fldrslt pagenum}} \par AutoSegments_AnchorOnGCell\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAPU \\*MERGEFORMAT}{\fldrslt pagenum}} \par AutoSegments_OnContact\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQG \\*MERGEFORMAT}{\fldrslt pagenum}} \par AutoSegments_Perpandiculars\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQL \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par GCell::CompareByDensity\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUQ \\*MERGEFORMAT}{\fldrslt pagenum}} \par GCell::CompareByIndex\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUS \\*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\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAWR \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par }\par Filter< Type > {\f2 [external]}{ \par \pard\plain \s72\li720\sa24\sb24\widctlpar\tqr\tldot\tx8640\adjustright \fs20\cgrid AutoSegments_InDirection\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAPZ \\*MERGEFORMAT}{\fldrslt pagenum}} \par AutoSegments_IsAccountable\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQD \\*MERGEFORMAT}{\fldrslt pagenum}} \par }\par GCell\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAARY \\*MERGEFORMAT}{\fldrslt pagenum}} \par GCellDensitySet\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUY \\*MERGEFORMAT}{\fldrslt pagenum}} \par GCellTopology\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABF \\*MERGEFORMAT}{\fldrslt pagenum}} \par GCell::Key\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUT \\*MERGEFORMAT}{\fldrslt pagenum}} \par LocatorHelper\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAYO \\*MERGEFORMAT}{\fldrslt pagenum}} \par Observable\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAYU \\*MERGEFORMAT}{\fldrslt pagenum}} \par Session\tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAZE \\*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 AutoContact} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract base class for {\b AutoContact} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAEA \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoContactHTee} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} H-Tee (two H, one V) })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHV \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoContactTerminal} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} Terminal (S/T is a Terminal) })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHX \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoContactTurn} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} Turn (one H, one V) })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIA \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoContactVTee} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} V-Tee (one H, two V) })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIC \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoHorizontal} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Concrete Horizontal {\b AutoSegment} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIE \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoSegment} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract base class for {\b AutoSegment} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKH \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoSegments_Aligneds} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All aligned {\b AutoSegment} of a set })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAPP \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoSegments_AnchorOnGCell} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All {\b AutoSegment} Beginning and/or Stopping in a {\b GCell} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAPU \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoSegments_InDirection} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Filter to select {\b AutoSegment} in a given direction })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAPZ \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoSegments_IsAccountable} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Filter to select accoutable {\b AutoSegment} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQD \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoSegments_OnContact} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All {\b AutoSegment} anchored on a Contact })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQG \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoSegments_Perpandiculars} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All perpandicular {\b AutoSegment} to a set of aligneds })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQL \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b AutoVertical} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Concrete Vertical {\b AutoSegment} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQQ \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b BaseGrid::Axis} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Graduations on a {\b BaseGrid} {\b Axis} (H or V) })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAARD \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b BaseGrid} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract Base Class for Irregular {\b Grid} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQR \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b BaseObserver} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Observer} Design Pattern, {\b Observer} part })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAARJ \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b ChipTools} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Utilities for Chip Level Design })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAARL \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b GCell::CompareByDensity} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} Density Comparison Functor })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUQ \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b GCell::CompareByIndex} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} Index Comparison Functor })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUS \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b GCell} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Routing Global Cell })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAARY \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b GCellDensitySet} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} Set, sorted by density })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUY \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b GCellGrid} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} {\b Grid} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAVJ \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b GCellTopology} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Build the wiring for a Net inside a GCell ({\b internal} ) })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAABF \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b Grid< GCellT >} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Template Class for Regular {\b Grid} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAWF \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b KatabaticEngine} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b Katabatic} Tool })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAWR \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b GCell::Key} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} {\b Key} - Density Cache })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAUT \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b LocatorHelper} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Locator Helper Collection's Locators })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAYO \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b Observable} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Observer} Design Pattern, Subject part })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAYU \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b Observer< T >} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Observer} Design Pattern, {\b Observer} part })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAZA \\*MERGEFORMAT}{\fldrslt pagenum}} \par {\b {\b Session} ({\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Modification {\b Session} for {\b Katabatic} })} \tab {\field\fldedit {\*\fldinst PAGEREF AAAAAAAAZE \\*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 Class Hierarchy\par \pard\plain {\tc\tcl2 \v Synthetic Class Hierarchy} {\xe \v Synthetic Class Hierarchy} {\bkmkstart AAAAAAAAAA} {\bkmkend AAAAAAAAAA} \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 Global Routing Loading\par \pard\plain {\tc\tcl2 \v Global Routing Loading} {\xe \v Global Routing Loading} {\bkmkstart AAAAAAAAAB} {\bkmkend AAAAAAAAAB} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Translation rules to build detailed routing from global. }}\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 GCellTopology}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Build the wiring for a Net inside a GCell ({\b internal} ). }\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 LocalFunctionFlag} \{ {\b NoFlags} = 0x00000000 , {\b HAccess} = 0x00000002, {\b VSmall} = 0x00000004, {\b HSmall} = 0x00000008, {\b Punctual} = 0x00000010 , {\b DoSourceContact} = 0x00000100, {\b DoTargetContact} = 0x00000200 \}\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b checkRoutingPadSize} ({\b Component} *anchor)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b doRp_AutoContacts} ({\b GCell} *, {\b Component} *, {\b AutoContact} *&source, {\b AutoContact} *&target, unsigned int flags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b AutoContact} * {\b doRp_Access} ({\b GCell} *, {\b Component} *, unsigned int flags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b AutoContact} * {\b doRp_AccessPad} ({\b RoutingPad} *, unsigned int flags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b doRp_StairCaseH} ({\b GCell} *, {\b Component} *rp1, {\b Component} *rp2)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b doRp_StairCaseV} ({\b GCell} *, {\b Component} *rp1, {\b Component} *rp2)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_xG_1Pad} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_xG} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_1G_1M1} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_1G_xM1} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_xG_1M1_1M2} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_xG_xM1_xM3} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_xG_xM2} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_1G_1M3} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_xG_xM3} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b singleGCell} ({\b KatabaticEngine} *ktbt, {\b Net} *net)\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 {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Translation rules to build detailed routing from global. \par }{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This module documents how the global routing built by {\f2 Knik} is loaded into the {\f2 {\b Katabatic}} data-base. It is intented for developpers only. \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 LocalFunctionFlag\:Global Routing Loading} {\xe \v Global Routing Loading\:LocalFunctionFlag} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b LocalFunctionFlag}}} \par {\bkmkstart AAAAAAAAAC} {\bkmkend AAAAAAAAAC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A set of flags for all functions of the LoadGrByNet module. They can be combined to form the {\i flags} argument of functions. the functions will ignore flags that are not intended to them.\par For {\f2 HSmall} , {\f2 VSmall} & {\f2 Punctual} see {\b checkRoutingPadSize()}. \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 NoFlags\:Global Routing Loading} {\xe \v Global Routing Loading\:NoFlags} {\qr NoFlags{\bkmkstart AAAAAAAAAD} {\bkmkend AAAAAAAAAD} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A simple alias over zero to explicitly tell that no flag at all is passed to the function. \par }\cell }{\row } {\xe \v HAccess\:Global Routing Loading} {\xe \v Global Routing Loading\:HAccess} {\qr HAccess{\bkmkstart AAAAAAAAAE} {\bkmkend AAAAAAAAAE} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The constructed topology will be accessed through an horizontal segment. The absence of this flag tell that the access will be done trough a vertical. \par }\cell }{\row } {\xe \v VSmall\:Global Routing Loading} {\xe \v Global Routing Loading\:VSmall} {\qr VSmall{\bkmkstart AAAAAAAAAF} {\bkmkend AAAAAAAAAF} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The RoutingPad vertically covers a very small number of access points, so it is likely overconstrained for direct horizontal connexion. \par }\cell }{\row } {\xe \v HSmall\:Global Routing Loading} {\xe \v Global Routing Loading\:HSmall} {\qr HSmall{\bkmkstart AAAAAAAAAG} {\bkmkend AAAAAAAAAG} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The RoutingPad horizontally covers a very small number of access points, so it is likely overconstrained for direct vertical connexion. \par }\cell }{\row } {\xe \v Punctual\:Global Routing Loading} {\xe \v Global Routing Loading\:Punctual} {\qr Punctual{\bkmkstart AAAAAAAAAH} {\bkmkend AAAAAAAAAH} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The RoutingPad covers only an access point in either direction. \par }\cell }{\row } {\xe \v DoSourceContact\:Global Routing Loading} {\xe \v Global Routing Loading\:DoSourceContact} {\qr DoSourceContact{\bkmkstart AAAAAAAAAI} {\bkmkend AAAAAAAAAI} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid When creating {\b Katabatic::AutoContactTerminal} on non-punctual RoutingPad, this flag request the creation of a contact {\i on the source point} . \par }\cell }{\row } {\xe \v DoTargetContact\:Global Routing Loading} {\xe \v Global Routing Loading\:DoTargetContact} {\qr DoTargetContact{\bkmkstart AAAAAAAAAJ} {\bkmkend AAAAAAAAAJ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid When creating {\b Katabatic::AutoContactTerminal} on non-punctual RoutingPad, this flag request the creation of a contact {\i on the target point} . \par }\cell }{\row } } } {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Function Documentation\par \pard\plain {\xe \v checkRoutingPadSize\:Global Routing Loading} {\xe \v Global Routing Loading\:checkRoutingPadSize} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int checkRoutingPadSize ({\b Component} * {\i rp})}} \par {\bkmkstart AAAAAAAAAK} {\bkmkend AAAAAAAAAK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Look at the geometrical size of the Component and assess if it's span is too narrow either horizontally or vertically. Return a combination of flags indicating it's state:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid HSmall : less than 3 pitches in horizontal direction.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid VSmall : less than 3 pitches in vertical direction.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Punctual : one pitch in either directions.\par} The component can be a RoutingPad, a Vertical or an Horizontal.\par \par }{ References Component::getLayer(), anonymous_namespace\{LoadGrByNet.cpp\}::HSmall, anonymous_namespace\{LoadGrByNet.cpp\}::Punctual, toLambda(), and anonymous_namespace\{LoadGrByNet.cpp\}::VSmall.}\par { Referenced by GCellTopology::doRp_Access().}\par } {\xe \v doRp_AutoContacts\:Global Routing Loading} {\xe \v Global Routing Loading\:doRp_AutoContacts} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void doRp_AutoContacts ({\b GCell} * {\i gcell}, {\b Component} * {\i rp}, {\b AutoContact} *& {\i source}, {\b AutoContact} *& {\i target}, unsigned int {\i flags}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAAL} {\bkmkend AAAAAAAAAL} { \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 gcell} \cell }{The GCell into which create the AutoContact. \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 rp} \cell }{The Component we want to access. \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 source} \cell }{The AutoContact created on the {\f2 source} ({\i returned} ). \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 target} \cell }{The AutoContact created on the {\f2 target} ({\i returned} ). \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 }{Managed by this function:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid LocalFunctionFlag::DoSourceContact\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid LocalFunctionFlag::DoTargetContact\par} \cell } {\row } } Create the AutoContact directly anchored on the Component (terminal). Three cases are manageds:{ \par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 1.\tab {\b Ordinary (non-punctual) {\f2 METAL1} terminal} : an AutoContactTerminal is anchored on the RoutingPad.\par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 2.\tab {\b Punctual {\f2 METAL1} terminal} , the access must never be blocked by other routing. To ensure it, we create a fixed AutoSegment (anchored on two AutoContactTerminal) to cover it. The {\i normal} AutoContactTerminal is also created.\par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 3.\tab {\b non {\f2 METAL1} terminal} , as for the punctual {\f2 METAL1} , a fixed protection is added over the RoutingPad. If we access horizontally a vertical RoutingPad or vertically an horizontal one, an extra AutoContactTerminal is added (to allow is displacement along the RoutingPad).\par} To avoid creating a fixed protection over a RoutingPad multiple times, the RoutingPad and it's associated protection is stored in a static {\f2 map} : {\f2 __routingPadAutoSegments} .\par Conversely, because an AutoContactTerminal can only be connected to one segment, each time this function is called a new terminal will be created (or maybe two in case of non-punctual terminals). If only one AutoContact is requested, it is created centered on the RoutingPad. The initial position of AutoContact {\i do not prevent them to move afterwards} , even those created on source/target on a non-punctual RoutingPad.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: For clarity we describe the layer management of this function in term\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid of {\f2 METAL} , but it is the RoutingGauge depth which is actually used.\par } \par }{ References Katabatic::CntFixed, AutoContactTerminal::create(), AutoSegment::create(), anonymous_namespace\{LoadGrByNet.cpp\}::DoSourceContact, anonymous_namespace\{LoadGrByNet.cpp\}::DoTargetContact, Session::getContactLayer(), Grid< GCellT >::getGCell(), KatabaticEngine::getGCellGrid(), Session::getKatabatic(), Component::getLayer(), Katabatic::KbHorizontal, Katabatic::SegFixed, and AutoSegment::setFlags().}\par { Referenced by GCellTopology::_do_1G_1M3(), GCellTopology::_do_xG_1M1_1M2(), GCellTopology::_do_xG_xM1_xM3(), GCellTopology::_do_xG_xM2(), GCellTopology::_do_xG_xM3(), GCellTopology::doRp_Access(), GCellTopology::doRp_StairCaseH(), GCellTopology::doRp_StairCaseV(), and anonymous_namespace\{LoadGrByNet.cpp\}::singleGCell().}\par } {\xe \v doRp_Access\:Global Routing Loading} {\xe \v Global Routing Loading\:doRp_Access} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoContact} * doRp_Access ({\b GCell} * {\i gcell}, {\b Component} * {\i rp}, unsigned int {\i flags}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAAM} {\bkmkend AAAAAAAAAM} { \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 gcell} \cell }{The GCell into which create the AutoContact. \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 rp} \cell }{The Component onto which anchor the access contact. \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 }{Relevant flags are:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid HAccess, the terminal is to be accessed through an horizontal segment.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid VSmall, force the terminal to be considered as small in the vertical direction.\par} \cell } {\row } } If {\f2 HAccess} is set, the Component is to be accessed trough an horizontal segment. If unset, the access is done vertically.\par Create an AutoContact to access a Component (terminal). If the Component is not to be accessed through an horizontal segment, and do not cover a large span in the horizontal direction (flag {\f2 VSmall} ), a local horizontal AutoSegment is added to slacken the vertical constraints.\par \par }{ References anonymous_namespace\{LoadGrByNet.cpp\}::checkRoutingPadSize(), AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_AutoContacts(), Session::getContactLayer(), Component::getNet(), anonymous_namespace\{LoadGrByNet.cpp\}::HAccess, anonymous_namespace\{LoadGrByNet.cpp\}::HSmall, Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace\{LoadGrByNet.cpp\}::VSmall.}\par { Referenced by GCellTopology::_do_1G_1M1(), GCellTopology::_do_1G_xM1(), GCellTopology::_do_xG_xM1_xM3(), GCellTopology::_do_xG_xM2(), and GCellTopology::_do_xG_xM3().}\par } {\xe \v doRp_AccessPad\:Global Routing Loading} {\xe \v Global Routing Loading\:doRp_AccessPad} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoContact} * doRp_AccessPad ({\b RoutingPad} * {\i rp}, unsigned int {\i flags}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAAN} {\bkmkend AAAAAAAAAN} { \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 Component onto which anchor the access contact. \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 }{Relevant flags are:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid HAccess, the terminal is to be accessed through an horizontal segment.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid VSmall, force the terminal to be considered as small in the vertical direction. \par} \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 Katabatic::AutoContactTerminal} .\par }The Component {\f2 rp} is a RoutingPad which belongs to a pad cell. This case occurs when we are routing a complete chip. This method build, from the {\f2 rp} a stack of articulated punctual segments and contacts to reach the default H/V routing layers (usually {\f2 METAL2} & {\f2 METAL3} ). This may be needed when the pad terminal is in {\f2 METAL5} , for instance.\par The returned AutoContactTerminal is anchored on the last punctual segment build.\par The GCell into which the AutoContactTerminal is created may be under the pads area. However, it will be right on the border of the GCell. The global router vertexes of GCell under the pad area are marked as blocked so will never be used for routing.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: The segments and contacts added to ensure the layer connexity are not\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid put into the {\b Katabatic} database. They are plain Hurricane objects, invisibles from it. \par }}{ References Contact::create(), Horizontal::create(), Vertical::create(), AutoContactTerminal::create(), Hook::detach(), Component::getBodyHook(), RoutingPad::getBoundingBox(), RoutingPad::getCenter(), Session::getContactLayer(), Grid< GCellT >::getGCell(), KatabaticEngine::getGCellGrid(), Box::getHeight(), Session::getKatabatic(), RoutingPad::getLayer(), Component::getNet(), RoutingPad::getOccurrence(), Transformation::getOrientation(), Occurrence::getPath(), Session::getRoutingLayer(), Path::getTransformation(), Box::getWidth(), Box::getXMax(), Box::getXMin(), Box::getYMax(), Box::getYMin(), anonymous_namespace\{LoadGrByNet.cpp\}::HAccess, Katabatic::KbHorizontal, Point::setX(), and Point::setY().}\par { Referenced by GCellTopology::_do_xG_1Pad().}\par } {\xe \v doRp_StairCaseH\:Global Routing Loading} {\xe \v Global Routing Loading\:doRp_StairCaseH} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void doRp_StairCaseH ({\b GCell} * {\i gcell}, {\b Component} * {\i rp1}, {\b Component} * {\i rp2}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAAO} {\bkmkend AAAAAAAAAO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Build the wiring to connect to horizontal Component. Two cases:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The Component are aligneds, then only a straight wire is created.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid They are {\i not} aligned, then a complete dogleg is created.\par} \par }{ References AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_AutoContacts(), anonymous_namespace\{LoadGrByNet.cpp\}::DoSourceContact, anonymous_namespace\{LoadGrByNet.cpp\}::DoTargetContact, Session::getContactLayer(), Component::getLayer(), Component::getNet(), Component::getX(), AutoContact::getY(), Katabatic::KbHorizontal, and Katabatic::KbVertical.}\par { Referenced by GCellTopology::_do_xG_xM2().}\par } {\xe \v doRp_StairCaseV\:Global Routing Loading} {\xe \v Global Routing Loading\:doRp_StairCaseV} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void doRp_StairCaseV ({\b GCell} * {\i gcell}, {\b Component} * {\i rp1}, {\b Component} * {\i rp2}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAAP} {\bkmkend AAAAAAAAAP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Build the wiring to connect to vertical Components. Two cases:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The Components are aligneds, then only a straight wire is created.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid They are {\i not} aligned, then a complete dogleg is created.\par} \par }{ References AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_AutoContacts(), anonymous_namespace\{LoadGrByNet.cpp\}::DoSourceContact, anonymous_namespace\{LoadGrByNet.cpp\}::DoTargetContact, Session::getContactLayer(), Component::getLayer(), Component::getNet(), AutoContact::getX(), Component::getY(), Katabatic::KbHorizontal, and Katabatic::KbVertical.}\par { Referenced by GCellTopology::_do_xG_xM3().}\par } {\xe \v _do_xG_1Pad\:Global Routing Loading} {\xe \v Global Routing Loading\:_do_xG_1Pad} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _do_xG_1Pad (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAQ} {\bkmkend AAAAAAAAAQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Construct the topology, when there is only global wires and one local terminal, but coming from a Pad. As thoses connectors will always be on one border of the GCell they can be considered as a kind of global.\par So this method mostly calls {\b GCellTopology::doRp_AccessPad()} to create the AutoContactTerminal, then calls {\b GCellTopology::_do_xG()}, except for straight lines which are managed directly. \par }{ References GCellTopology::_do_xG(), AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_AccessPad(), AutoContact::getBodyHook(), Session::getContactLayer(), anonymous_namespace\{LoadGrByNet.cpp\}::HAccess, Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace\{LoadGrByNet.cpp\}::NoFlags.}\par } {\xe \v _do_xG\:Global Routing Loading} {\xe \v Global Routing Loading\:_do_xG} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _do_xG (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAR} {\bkmkend AAAAAAAAAR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Construct the topology, when there is only global wires (no local terminals).\par Some topology are not handled because they must not be managed by this function: { \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid One global: nonsensical because there also must be a terminal. \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Two aligned globals: in that case we do a straight wire without any AutoContact (handled by the source/target of the wire). \par} \par }{ References AutoContactVTee::create(), AutoContactTurn::create(), AutoContactHTee::create(), AutoSegment::create(), Session::getContactLayer(), Katabatic::KbHorizontal, and Katabatic::KbVertical.}\par { Referenced by GCellTopology::_do_xG_1Pad().}\par } {\xe \v _do_1G_1M1\:Global Routing Loading} {\xe \v Global Routing Loading\:_do_1G_1M1} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _do_1G_1M1 (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAS} {\bkmkend AAAAAAAAAS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Construct a topology where there is {\i one} global and one RoutingPad in {\f2 METAL1} . The {\f2 METAL1} is assumed to be vertical.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: When accessing the RoutingPad through an horizontal global segment\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid and the vertical extension of the segment is small, the global is still directly attached to the terminal, inducing a high constraint on it. We left to job of slackening it to the router.\par } \par }{ References GCellTopology::doRp_Access(), anonymous_namespace\{LoadGrByNet.cpp\}::HAccess, anonymous_namespace\{LoadGrByNet.cpp\}::NoFlags, and anonymous_namespace\{LoadGrByNet.cpp\}::VSmall.}\par } {\xe \v _do_1G_xM1\:Global Routing Loading} {\xe \v Global Routing Loading\:_do_1G_xM1} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _do_1G_xM1 (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAT} {\bkmkend AAAAAAAAAT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Construct a topology where there is {\i one} global and any number of RoutingPad in {\f2 METAL1} . The {\f2 METAL1} is assumed to be vertical.\par The RoutingPads are linked together two by two. If the horizontal segments are not aligned by the router, part of the routage will be done through the RoutingPad itself. The global incoming segment will connected to the leftmost, rightmost or centermost RoutingPad according from wich side it comes from.\par \par }{ References AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_Access(), Component::getBoundingBox(), Session::getContactLayer(), Box::getHeight(), anonymous_namespace\{LoadGrByNet.cpp\}::HAccess, Katabatic::KbHorizontal, and anonymous_namespace\{LoadGrByNet.cpp\}::NoFlags.}\par } {\xe \v _do_xG_1M1_1M2\:Global Routing Loading} {\xe \v Global Routing Loading\:_do_xG_1M1_1M2} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _do_xG_1M1_1M2 (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAU} {\bkmkend AAAAAAAAAU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Construct a topology where there is at least one global (and up to 4), one {\f2 METAL1} RoutingPad (assumed V) and one {\f2 METAL2} RoutingPad (assumed H).\par In this topology, we want to try to reuse the {\f2 METAL2} RoutingPad as a feedtrough in the horizontal routage. Thus:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The {\f2 METAL1} and {\f2 METAL2} RoutingPad are connected through a separate wiring.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The south & west global wiring is attached to the leftmost contact of the {\f2 METAL2} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The north & east global wiring is attached to the rightmost contact of the {\f2 METAL2} .\par} South/west and north/south can be build independantly. Depending on the number of globals, they can consist of:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Nothing (no south nor west).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid An AutoContact (west present).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid An horizontal plus a turn (south present).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid An horizontal plus a HTee (south & west present).\par} {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: Not all configurations are represented below.\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par } \par }{ References AutoContactTurn::create(), AutoContactHTee::create(), AutoSegment::create(), GCellTopology::doRp_AutoContacts(), anonymous_namespace\{LoadGrByNet.cpp\}::DoSourceContact, anonymous_namespace\{LoadGrByNet.cpp\}::DoTargetContact, Session::getContactLayer(), Session::getRoutingLayer(), Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace\{LoadGrByNet.cpp\}::NoFlags.}\par } {\xe \v _do_xG_xM1_xM3\:Global Routing Loading} {\xe \v Global Routing Loading\:_do_xG_xM1_xM3} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _do_xG_xM1_xM3 (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAV} {\bkmkend AAAAAAAAAV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Construct a topology where there is at least one global (and up to 4), at least one {\f2 METAL1} RoutingPad (assumed V) and at least one {\f2 METAL3} RoutingPad (assumed V).\par In this topology, we want to try to reuse the {\f2 METAL3} RoutingPad as a feedtrough in the vertical routage. Thus:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The {\f2 METAL1} and {\f2 METAL3} RoutingPad are connected through a separate wiring made of separate horizontals.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The south-west global wiring is attached to the leftmost RoutingPad if there isn't south or to the first {\f2 METAL3} otherwise.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The north-east global wiring is attached to the rightmost RoutingPad if there isn't north or to the first {\f2 METAL3} otherwise.\par} South/west and north/south can be build independantly. Depending on the number of globals, they can consist of:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Nothing (no south nor west).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid An AutoContact on the leftmost RoutingPad (west present).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid An AutoContact on the first {\f2 METAL3} (only south present).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid An AutoContact plus a vertical plus a VTee (south & west present).\par} \par }{ References AutoContactVTee::create(), AutoContactTurn::create(), AutoContactHTee::create(), AutoSegment::create(), GCellTopology::doRp_Access(), GCellTopology::doRp_AutoContacts(), anonymous_namespace\{LoadGrByNet.cpp\}::DoSourceContact, anonymous_namespace\{LoadGrByNet.cpp\}::DoTargetContact, Component::getBoundingBox(), Session::getContactLayer(), Box::getHeight(), Session::getRoutingLayer(), anonymous_namespace\{LoadGrByNet.cpp\}::HAccess, Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace\{LoadGrByNet.cpp\}::NoFlags.}\par } {\xe \v _do_xG_xM2\:Global Routing Loading} {\xe \v Global Routing Loading\:_do_xG_xM2} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _do_xG_xM2 (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAW} {\bkmkend AAAAAAAAAW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Construct a topology where there is at least one global (and up to 4), and any number of {\f2 METAL2} RoutingPads (assumeds H).\par In this topology, we want to try to reuse the {\f2 METAL2} RoutingPad as a feedtrough in the horizontal routage. Thus:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The RoutingPad are connecteds trough a separate staircase (or straight wire if aligneds).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The south-west global wiring is attached to the leftmost RoutingPad if there isn't south or to the biggest horizontal RoutingPad otherwise.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The north-east global wiring is attached to the rightmost RoutingPad if there isn't south or to the biggest horizontal RoutingPad otherwise.\par} \par }{ References AutoContactVTee::create(), AutoSegment::create(), GCellTopology::doRp_Access(), GCellTopology::doRp_AutoContacts(), GCellTopology::doRp_StairCaseH(), anonymous_namespace\{LoadGrByNet.cpp\}::DoSourceContact, Component::getBoundingBox(), Session::getContactLayer(), Box::getWidth(), Katabatic::KbVertical, and anonymous_namespace\{LoadGrByNet.cpp\}::NoFlags.}\par } {\xe \v _do_1G_1M3\:Global Routing Loading} {\xe \v Global Routing Loading\:_do_1G_1M3} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _do_1G_1M3 (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAX} {\bkmkend AAAAAAAAAX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Construct a topology where there is one global and one {\f2 METAL3} RoutingPad (assumeds V).\par In this topology, we reuse the {\f2 METAL3} RoutingPad as a feedtrough in the vertical routage. Thus:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid If the global is either north or south, we directly connect to the north end or south end of the RoutingPad. The vertical global will have no slack at all we assume that METAL3 terminals are only from blocks and are aligneds vertically.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid If the global is east or west {\i and} the RoutingPad is sufficiently extended in the vertical direction, we connect an horizontal in the normal way.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid If the global is not sufficiently extended, we add a turn to give some slack to the global.\par} \par }{ References AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_AutoContacts(), anonymous_namespace\{LoadGrByNet.cpp\}::DoSourceContact, anonymous_namespace\{LoadGrByNet.cpp\}::DoTargetContact, Session::getContactLayer(), AutoContact::getX(), anonymous_namespace\{LoadGrByNet.cpp\}::HAccess, Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace\{LoadGrByNet.cpp\}::NoFlags.}\par } {\xe \v _do_xG_xM3\:Global Routing Loading} {\xe \v Global Routing Loading\:_do_xG_xM3} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _do_xG_xM3 (){\f2 [private]}}} \par {\bkmkstart AAAAAAAAAY} {\bkmkend AAAAAAAAAY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Construct a topology where there at least one global and two {\f2 METAL3} RoutingPad (assumed V).\par In this topology, we reuse the {\f2 METAL3} RoutingPad as a feedtrough in the vertical routage. We assume that the most likely relative position of the RoutingPads is to be aligned vertically. Thus:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid All RoutingPads are linked two by two trough vertical staircases.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The south-west global wiring is attached to the bottommost RoutingPad (without vertical slack). If a misalignment is detected, then a dogleg is added.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The north-east global wiring is attached to the topmost RoutingPad (without vertical slack).\par} South/west and north/south can be build independantly. Depending on the number of globals, they can consist of:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Nothing (no south nor west).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid An sliding AutoContact on the bottommost RoutingPad (west present).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid An fixed AutoContact on the bottommost RoutingPad (only south present).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid An fixed AutoContact plus a vertical plus a VTee (south & west present).\par} \par }{ References AutoContactVTee::create(), AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_Access(), GCellTopology::doRp_AutoContacts(), GCellTopology::doRp_StairCaseV(), anonymous_namespace\{LoadGrByNet.cpp\}::DoSourceContact, anonymous_namespace\{LoadGrByNet.cpp\}::DoTargetContact, Session::getContactLayer(), DbU::getValueString(), AutoContact::getX(), anonymous_namespace\{LoadGrByNet.cpp\}::HAccess, Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace\{LoadGrByNet.cpp\}::NoFlags.}\par } {\xe \v singleGCell\:Global Routing Loading} {\xe \v Global Routing Loading\:singleGCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void singleGCell ({\b KatabaticEngine} * {\i ktbt}, {\b Net} * {\i net})}} \par {\bkmkstart AAAAAAAAAZ} {\bkmkend AAAAAAAAAZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All the RoutingPads of the net are concentrated under a single GCell. This function assumes that all the terminals are in {\f2 METAL1} (vertical), and link them two by two by horizontal wires. \par }{ References AutoContactTurn::create(), AutoSegment::create(), GCellTopology::doRp_AutoContacts(), anonymous_namespace\{LoadGrByNet.cpp\}::DoSourceContact, Session::getContactLayer(), Grid< GCellT >::getGCell(), KatabaticEngine::getGCellGrid(), RoutingGauge::getLayerDepth(), Session::getRoutingGauge(), Net::getRoutingPads(), Katabatic::KbHorizontal, Katabatic::KbVertical, and anonymous_namespace\{LoadGrByNet.cpp\}::NoFlags.}\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 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 anonymous_namespace\{ChipTools.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{ChipTools.cpp\}} {\xe \v anonymous_namespace\{ChipTools.cpp\}} {\bkmkstart AAAAAAAABB} {\bkmkend AAAAAAAABB} \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 AAAAAAAABC} {\bkmkend AAAAAAAABC} \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 AAAAAAAABD} {\bkmkend AAAAAAAABD} \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 AAAAAAAABE} {\bkmkend AAAAAAAABE} \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 { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Build the wiring for a Net inside a GCell ({\b internal} ). }\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 LocalFunctionFlag} \{ {\b NoFlags} = 0x00000000 , {\b HAccess} = 0x00000002, {\b VSmall} = 0x00000004, {\b HSmall} = 0x00000008, {\b Punctual} = 0x00000010 , {\b DoSourceContact} = 0x00000100, {\b DoTargetContact} = 0x00000200 \}\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Functions\par \pard\plain { \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b checkRoutingPadSize} ({\b Component} *anchor)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b singleGCell} ({\b KatabaticEngine} *ktbt, {\b Net} *net)\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\{Session.cpp\} Namespace Reference\par \pard\plain {\tc\tcl2 \v anonymous_namespace\{Session.cpp\}} {\xe \v anonymous_namespace\{Session.cpp\}} {\bkmkstart AAAAAAAABG} {\bkmkend AAAAAAAABG} \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 Katabatic Namespace Reference\par \pard\plain {\tc\tcl2 \v Katabatic} {\xe \v Katabatic} {\bkmkstart AAAAAAAABH} {\bkmkend AAAAAAAABH} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The namespace dedicated to {\b Katabatic}. }}\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 AutoContact}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract base class for {\b AutoContact}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoContactHTee}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} H-Tee (two H, one V) }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoContactTerminal}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} Terminal (S/T is a Terminal) }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoContactTurn}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} Turn (one H, one V) }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoContactVTee}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} V-Tee (one H, two V) }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoHorizontal}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Concrete Horizontal {\b AutoSegment}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoSegment}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract base class for {\b AutoSegment}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoSegments_Aligneds}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All aligned {\b AutoSegment} of a set. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoSegments_AnchorOnGCell}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All {\b AutoSegment} Beginning and/or Stopping in a {\b GCell}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoSegments_InDirection}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Filter to select {\b AutoSegment} in a given direction. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoSegments_IsAccountable}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Filter to select accoutable {\b AutoSegment}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoSegments_OnContact}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All {\b AutoSegment} anchored on a Contact. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoSegments_Perpandiculars}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All perpandicular {\b AutoSegment} to a set of aligneds. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b AutoVertical}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Concrete Vertical {\b AutoSegment}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b BaseGrid}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract Base Class for Irregular {\b Grid}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b BaseObserver}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Observer} Design Pattern, {\b Observer} part. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b ChipTools}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Utilities for Chip Level Design. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b GCell}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Routing Global Cell. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b GCellDensitySet}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} Set, sorted by density. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b GCellGrid}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} {\b Grid}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b Grid}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Template Class for Regular {\b Grid}. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b KatabaticEngine}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b Katabatic} Tool. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b LocatorHelper}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Locator Helper Collection's Locators. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b Observable}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Observer} Design Pattern, Subject part. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b Observer}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Observer} Design Pattern, {\b Observer} part. }\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 Modification {\b Session} for {\b Katabatic}. }\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 {\b Hurricane::Filter}< {\b AutoSegment} * > {\b AutoSegmentHF}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef {\b Hurricane::Locator}< {\b AutoSegment} * > {\b AutoSegmentHL}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef {\b Hurricane::Collection}< {\b AutoSegment} * > {\b AutoSegmentHC}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef {\b GenericCollection}< {\b AutoSegment} * > {\b AutoSegments}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef {\b GenericLocator}< {\b AutoSegment} * > {\b AutoSegmentLocator}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef {\b GenericFilter}< {\b AutoSegment} * > {\b AutoSegmentFilter}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef {\b GenericCollection}< {\b GCell} * > {\b GCells}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef {\b GenericLocator}< {\b GCell} * > {\b GCellLocator}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid typedef {\b GenericFilter}< {\b GCell} * > {\b GCellFilter}\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 FunctionFlag} \{ , {\b KbOpenSession} = 0x00000001, {\b KbRealignate} = 0x00000002, {\b KbNativeConstraints} = 0x00000004, {\b KbForceMove} = 0x00000008, {\b KbHorizontal} = 0x00000010, {\b KbVertical} = 0x00000020, {\b KbWithPerpands} = 0x00000040, {\b KbSource} = 0x00000080, {\b KbTarget} = 0x00000100, {\b KbWarnOnError} = 0x00000200 , {\b KbPropagate} = 0x00008000 , {\b KbUseAboveLayer} = 0x00020000, {\b KbUseBelowLayer} = 0x00040000, {\b KbDoglegOnLeft} = 0x00080000, {\b KbDoglegOnRight} = 0x00100000 , {\b KbHalfSlacken} = 0x00800000 \}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid enum {\b EngineState} \{ {\b EngineCreation} = 1, {\b EngineGlobalLoaded} = 2, {\b EngineActive} = 3, {\b EngineDriving} = 4, {\b EnginePreDestroying} = 5, {\b EngineGutted} = 6 \}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid enum {\b AutoContactFlag} \{ {\b CntFixed} = 0x00000001, {\b CntTerminal} = 0x00000002, {\b CntTurn} = 0x00000004, {\b CntHTee} = 0x00000008, {\b CntVTee} = 0x00000010, {\b CntInvalidated} = 0x00000020, {\b CntInvalidatedCache} = 0x00000040, {\b CntInCreationStage} = 0x00000080, {\b CntBadTopology} = 0x00000100 \}\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid enum {\b AutoSegmentFlag} \{ , {\b SegHorizontal} = (1<< 0), {\b SegFixed} = (1<< 1), {\b SegGlobal} = (1<< 2), {\b SegWeakGlobal} = (1<< 3), {\b SegCanonical} = (1<< 4), {\b SegBipoint} = (1<< 5), {\b SegDogleg} = (1<< 6), {\b SegStrap} = (1<< 7), {\b SegSourceTop} = (1<< 8), {\b SegSourceBottom} = (1<< 9), {\b SegTargetTop} = (1<<10), {\b SegTargetBottom} = (1<<11), {\b SegIsReduced} = (1<<12), {\b SegLayerChange} = (1<<13) , {\b SegStrongTerminal} = SegSourceTerminal|SegTargetTerminal, {\b SegWeakTerminal1} = (1<<16), {\b SegWeakTerminal2} = (1<<17), {\b SegNotSourceAligned} = (1<<18), {\b SegNotTargetAligned} = (1<<19) , {\b SegSlackened} = (1<<22), {\b SegAxisSet} = (1<<23), {\b SegInvalidated} = (1<<24) , {\b SegInvalidatedLayer} = (1<<27), {\b SegCreated} = (1<<28) , {\b SegWeakTerminal} = SegStrongTerminal|SegWeakTerminal1|SegWeakTerminal2, {\b SegNotAligned} = SegNotSourceAligned|SegNotTargetAligned \}\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 Katabatic}. \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 AutoSegmentHF\:Katabatic} {\xe \v Katabatic\:AutoSegmentHF} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef {\b Hurricane::Filter}< {\b AutoSegment} * > {\b AutoSegmentHF}}} \par {\bkmkstart AAAAAAAABI} {\bkmkend AAAAAAAABI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Shorthand for {\b AutoSegment} Hurricane Filter. \par }} {\xe \v AutoSegmentHL\:Katabatic} {\xe \v Katabatic\:AutoSegmentHL} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef {\b Hurricane::Locator}< {\b AutoSegment} * > {\b AutoSegmentHL}}} \par {\bkmkstart AAAAAAAABJ} {\bkmkend AAAAAAAABJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Shorthand for {\b AutoSegment} Hurricane Locator. \par }} {\xe \v AutoSegmentHC\:Katabatic} {\xe \v Katabatic\:AutoSegmentHC} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef {\b Hurricane::Collection}< {\b AutoSegment} * > {\b AutoSegmentHC}}} \par {\bkmkstart AAAAAAAABK} {\bkmkend AAAAAAAABK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Shorthand for {\b AutoSegment} Hurricane Collection. \par }} {\xe \v AutoSegments\:Katabatic} {\xe \v Katabatic\:AutoSegments} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef {\b GenericCollection}< {\b AutoSegment} * > {\b AutoSegments}}} \par {\bkmkstart AAAAAAAABL} {\bkmkend AAAAAAAABL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Shorthand for {\b AutoSegment} Hurricane Generic Collection (collection with {\f2 unique_ptr<>} like support). \par }} {\xe \v AutoSegmentLocator\:Katabatic} {\xe \v Katabatic\:AutoSegmentLocator} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef {\b GenericLocator}< {\b AutoSegment} * > {\b AutoSegmentLocator}}} \par {\bkmkstart AAAAAAAABM} {\bkmkend AAAAAAAABM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Shorthand for {\b AutoSegment} Hurricane Generic Locator (locator with {\f2 unique_ptr<>} like support). \par }} {\xe \v AutoSegmentFilter\:Katabatic} {\xe \v Katabatic\:AutoSegmentFilter} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef {\b GenericFilter}< {\b AutoSegment} * > {\b AutoSegmentFilter}}} \par {\bkmkstart AAAAAAAABN} {\bkmkend AAAAAAAABN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Shorthand for {\b AutoSegment} Hurricane Generic Filter (filter with {\f2 unique_ptr<>} like support). \par }} {\xe \v GCells\:Katabatic} {\xe \v Katabatic\:GCells} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef {\b GenericCollection}< {\b GCell} * > {\b GCells}}} \par {\bkmkstart AAAAAAAABO} {\bkmkend AAAAAAAABO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} Collection with auto-pointer like support. \par }} {\xe \v GCellLocator\:Katabatic} {\xe \v Katabatic\:GCellLocator} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef {\b GenericLocator}< {\b GCell} * > {\b GCellLocator}}} \par {\bkmkstart AAAAAAAABP} {\bkmkend AAAAAAAABP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} Locator with auto-pointer like support. \par }} {\xe \v GCellFilter\:Katabatic} {\xe \v Katabatic\:GCellFilter} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef {\b GenericFilter}< {\b GCell} * > {\b GCellFilter}}} \par {\bkmkstart AAAAAAAABQ} {\bkmkend AAAAAAAABQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} Filter with auto-pointer like support. \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 FunctionFlag\:Katabatic} {\xe \v Katabatic\:FunctionFlag} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b FunctionFlag}}} \par {\bkmkstart AAAAAAAABR} {\bkmkend AAAAAAAABR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A set of flags to that can be passed to functions/methods througout all {\b Katabatic}. \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 KbOpenSession\:Katabatic} {\xe \v Katabatic\:KbOpenSession} {\qr KbOpenSession{\bkmkstart AAAAAAAABS} {\bkmkend AAAAAAAABS} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Tells the function to open it's own {\b Session}, otherwise use the one that should already have been opened. \par }\cell }{\row } {\xe \v KbRealignate\:Katabatic} {\xe \v Katabatic\:KbRealignate} {\qr KbRealignate{\bkmkstart AAAAAAAABT} {\bkmkend AAAAAAAABT} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid On {\b AutoSegment} axis manipulation, force the realignment of all the segment on an aligned set, even is the axis of the canonical is already at the right coordinate. \par }\cell }{\row } {\xe \v KbNativeConstraints\:Katabatic} {\xe \v Katabatic\:KbNativeConstraints} {\qr KbNativeConstraints{\bkmkstart AAAAAAAABU} {\bkmkend AAAAAAAABU} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Ignore user-defined constraints or terminal induced ones (for AutoContacts anchored on terminals) and return the owning {\b GCell} alone. \par }\cell }{\row } {\xe \v KbForceMove\:Katabatic} {\xe \v Katabatic\:KbForceMove} {\qr KbForceMove{\bkmkstart AAAAAAAABV} {\bkmkend AAAAAAAABV} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Tells the function to force move, even if it is not needed. \par }\cell }{\row } {\xe \v KbHorizontal\:Katabatic} {\xe \v Katabatic\:KbHorizontal} {\qr KbHorizontal{\bkmkstart AAAAAAAABW} {\bkmkend AAAAAAAABW} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Request some action to be done in the horizontal direction. \par }\cell }{\row } {\xe \v KbVertical\:Katabatic} {\xe \v Katabatic\:KbVertical} {\qr KbVertical{\bkmkstart AAAAAAAABX} {\bkmkend AAAAAAAABX} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Request some action to be done in the vertical direction. \par }\cell }{\row } {\xe \v KbWithPerpands\:Katabatic} {\xe \v Katabatic\:KbWithPerpands} {\qr KbWithPerpands{\bkmkstart AAAAAAAABY} {\bkmkend AAAAAAAABY} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Request that AutoSegments in perpandicular direction should be includeds. \par }\cell }{\row } {\xe \v KbSource\:Katabatic} {\xe \v Katabatic\:KbSource} {\qr KbSource{\bkmkstart AAAAAAAABZ} {\bkmkend AAAAAAAABZ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Request AutoSegments anchored by their source anchor or that some operation has to be performed on the source. \par }\cell }{\row } {\xe \v KbTarget\:Katabatic} {\xe \v Katabatic\:KbTarget} {\qr KbTarget{\bkmkstart AAAAAAAACA} {\bkmkend AAAAAAAACA} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Request AutoSegments anchored by their target anchor or that some operation has to be performed on the target. \par }\cell }{\row } {\xe \v KbWarnOnError\:Katabatic} {\xe \v Katabatic\:KbWarnOnError} {\qr KbWarnOnError{\bkmkstart AAAAAAAACB} {\bkmkend AAAAAAAACB} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Display a warning if something has gone wrong. \par }\cell }{\row } {\xe \v KbPropagate\:Katabatic} {\xe \v Katabatic\:KbPropagate} {\qr KbPropagate{\bkmkstart AAAAAAAACC} {\bkmkend AAAAAAAACC} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The action will affect all the segments on an aligned set. \par }\cell }{\row } {\xe \v KbUseAboveLayer\:Katabatic} {\xe \v Katabatic\:KbUseAboveLayer} {\qr KbUseAboveLayer{\bkmkstart AAAAAAAACD} {\bkmkend AAAAAAAACD} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Request/tell the a above layer has been used. \par }\cell }{\row } {\xe \v KbUseBelowLayer\:Katabatic} {\xe \v Katabatic\:KbUseBelowLayer} {\qr KbUseBelowLayer{\bkmkstart AAAAAAAACE} {\bkmkend AAAAAAAACE} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Request/tell the a below layer has been used. \par }\cell }{\row } {\xe \v KbDoglegOnLeft\:Katabatic} {\xe \v Katabatic\:KbDoglegOnLeft} {\qr KbDoglegOnLeft{\bkmkstart AAAAAAAACF} {\bkmkend AAAAAAAACF} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The dogleg has occured on the left {\i of something} \par }\cell }{\row } {\xe \v KbDoglegOnRight\:Katabatic} {\xe \v Katabatic\:KbDoglegOnRight} {\qr KbDoglegOnRight{\bkmkstart AAAAAAAACG} {\bkmkend AAAAAAAACG} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The dogleg has occured on the right {\i of something} \par }\cell }{\row } {\xe \v KbHalfSlacken\:Katabatic} {\xe \v Katabatic\:KbHalfSlacken} {\qr KbHalfSlacken{\bkmkstart AAAAAAAACH} {\bkmkend AAAAAAAACH} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid For {\b AutoSegment::slacken()}, change the overconstrained limit from 10 tracks down to 3 (hard-wired). \par }\cell }{\row } } } {\xe \v EngineState\:Katabatic} {\xe \v Katabatic\:EngineState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b EngineState}}} \par {\bkmkstart AAAAAAAACI} {\bkmkend AAAAAAAACI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Describe the current state of the {\b KatabaticEngine}. \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 EngineCreation\:Katabatic} {\xe \v Katabatic\:EngineCreation} {\qr EngineCreation{\bkmkstart AAAAAAAACJ} {\bkmkend AAAAAAAACJ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The tool is created, but still in the {\f2 _postCreate} stage. \par }\cell }{\row } {\xe \v EngineGlobalLoaded\:Katabatic} {\xe \v Katabatic\:EngineGlobalLoaded} {\qr EngineGlobalLoaded{\bkmkstart AAAAAAAACK} {\bkmkend AAAAAAAACK} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The global routing has been loaded from Knik. \par }\cell }{\row } {\xe \v EngineActive\:Katabatic} {\xe \v Katabatic\:EngineActive} {\qr EngineActive{\bkmkstart AAAAAAAACL} {\bkmkend AAAAAAAACL} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The Engine is in normal running mode (routing ordinary wires). \par }\cell }{\row } {\xe \v EngineDriving\:Katabatic} {\xe \v Katabatic\:EngineDriving} {\qr EngineDriving{\bkmkstart AAAAAAAACM} {\bkmkend AAAAAAAACM} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The Engine is transforming the AutoContact/AutoSegment into normal Contact/Segment (prior to tool deletion). \par }\cell }{\row } {\xe \v EnginePreDestroying\:Katabatic} {\xe \v Katabatic\:EnginePreDestroying} {\qr EnginePreDestroying{\bkmkstart AAAAAAAACN} {\bkmkend AAAAAAAACN} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This state is used whenever the tool is destroyed without passing through the EngineDriving state. \par }\cell }{\row } {\xe \v EngineGutted\:Katabatic} {\xe \v Katabatic\:EngineGutted} {\qr EngineGutted{\bkmkstart AAAAAAAACO} {\bkmkend AAAAAAAACO} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid After the EngineDriving state, all the working structures are removed and the tool can no longer be used. It only awaits clean destruction. \par }\cell }{\row } } } {\xe \v AutoContactFlag\:Katabatic} {\xe \v Katabatic\:AutoContactFlag} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b AutoContactFlag}}} \par {\bkmkstart AAAAAAAACP} {\bkmkend AAAAAAAACP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set of flags to describe the internal state of an {\b AutoContact}. \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 CntFixed\:Katabatic} {\xe \v Katabatic\:CntFixed} {\qr CntFixed{\bkmkstart AAAAAAAACQ} {\bkmkend AAAAAAAACQ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This contact cannot be moved. \par }\cell }{\row } {\xe \v CntTerminal\:Katabatic} {\xe \v Katabatic\:CntTerminal} {\qr CntTerminal{\bkmkstart AAAAAAAACR} {\bkmkend AAAAAAAACR} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This contact is anchored on a terminal ({\b AutoContactTerminal}), {\b must not be changed} . \par }\cell }{\row } {\xe \v CntTurn\:Katabatic} {\xe \v Katabatic\:CntTurn} {\qr CntTurn{\bkmkstart AAAAAAAACS} {\bkmkend AAAAAAAACS} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The object true class is {\b AutoContactTurn}, {\b must not be changed} . \par }\cell }{\row } {\xe \v CntHTee\:Katabatic} {\xe \v Katabatic\:CntHTee} {\qr CntHTee{\bkmkstart AAAAAAAACT} {\bkmkend AAAAAAAACT} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The object true class is {\b AutoContactHTee}, {\b must not be changed} . \par }\cell }{\row } {\xe \v CntVTee\:Katabatic} {\xe \v Katabatic\:CntVTee} {\qr CntVTee{\bkmkstart AAAAAAAACU} {\bkmkend AAAAAAAACU} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The object true class is {\b AutoContactVTee}, {\b must not be changed} . \par }\cell }{\row } {\xe \v CntInvalidated\:Katabatic} {\xe \v Katabatic\:CntInvalidated} {\qr CntInvalidated{\bkmkstart AAAAAAAACV} {\bkmkend AAAAAAAACV} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid At least one {\b AutoSegment} of this contact has been moved, the contact position must be recomputed (in the {\b Session} revalidation). \par }\cell }{\row } {\xe \v CntInvalidatedCache\:Katabatic} {\xe \v Katabatic\:CntInvalidatedCache} {\qr CntInvalidatedCache{\bkmkstart AAAAAAAACW} {\bkmkend AAAAAAAACW} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid At least one {\b AutoSegment} has been broken or moved up, the connexity must be checked and possibly corrected (in {\b Session} revalidation). \par }\cell }{\row } {\xe \v CntInCreationStage\:Katabatic} {\xe \v Katabatic\:CntInCreationStage} {\qr CntInCreationStage{\bkmkstart AAAAAAAACX} {\bkmkend AAAAAAAACX} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets only during the initial creation process. \par }\cell }{\row } {\xe \v CntBadTopology\:Katabatic} {\xe \v Katabatic\:CntBadTopology} {\qr CntBadTopology{\bkmkstart AAAAAAAACY} {\bkmkend AAAAAAAACY} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Something wrong has happened and the connexity of the {\b AutoContact} is no longer ensured (too much or too less AutoSegments, too wide span of {\b AutoSegment} layers). \par }\cell }{\row } } } {\xe \v AutoSegmentFlag\:Katabatic} {\xe \v Katabatic\:AutoSegmentFlag} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b AutoSegmentFlag}}} \par {\bkmkstart AAAAAAAACZ} {\bkmkend AAAAAAAACZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set of flags to describe the internal state of an {\b AutoSegment}. \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 SegHorizontal\:Katabatic} {\xe \v Katabatic\:SegHorizontal} {\qr SegHorizontal{\bkmkstart AAAAAAAADA} {\bkmkend AAAAAAAADA} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This {\b AutoSegment} is associated to a {\b Hurricane::Horizontal}, if not set, it is associated to a {\b Hurricane::Vertical}. Set when the object is constructed. \par }\cell }{\row } {\xe \v SegFixed\:Katabatic} {\xe \v Katabatic\:SegFixed} {\qr SegFixed{\bkmkstart AAAAAAAADB} {\bkmkend AAAAAAAADB} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b Hurricane::Segment} associated must/cannot be moved. \par }\cell }{\row } {\xe \v SegGlobal\:Katabatic} {\xe \v Katabatic\:SegGlobal} {\qr SegGlobal{\bkmkstart AAAAAAAADC} {\bkmkend AAAAAAAADC} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b AutoSegment} span between at least two GCells (i.e. not fully enclosed in one). \par }\cell }{\row } {\xe \v SegWeakGlobal\:Katabatic} {\xe \v Katabatic\:SegWeakGlobal} {\qr SegWeakGlobal{\bkmkstart AAAAAAAADD} {\bkmkend AAAAAAAADD} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b AutoSegment} is part of an aligned set which contains at least a global. The global segment is itself tagged as weak global. \par }\cell }{\row } {\xe \v SegCanonical\:Katabatic} {\xe \v Katabatic\:SegCanonical} {\qr SegCanonical{\bkmkstart AAAAAAAADE} {\bkmkend AAAAAAAADE} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This {\b AutoSegment} is the designated representant of a set of aligned {\b AutoSegment}. \par }\cell }{\row } {\xe \v SegBipoint\:Katabatic} {\xe \v Katabatic\:SegBipoint} {\qr SegBipoint{\bkmkstart AAAAAAAADF} {\bkmkend AAAAAAAADF} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This {\b AutoSegment} is a straight wire between two terminal {\b AutoContact}. \par }\cell }{\row } {\xe \v SegDogleg\:Katabatic} {\xe \v Katabatic\:SegDogleg} {\qr SegDogleg{\bkmkstart AAAAAAAADG} {\bkmkend AAAAAAAADG} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This {\b AutoSegment} has been created as the perpandicular part of a dogleg. \par }\cell }{\row } {\xe \v SegStrap\:Katabatic} {\xe \v Katabatic\:SegStrap} {\qr SegStrap{\bkmkstart AAAAAAAADH} {\bkmkend AAAAAAAADH} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This {\b AutoSegment} has been created to to reconnect parts of an {\b AutoSegment} after slackening. \par }\cell }{\row } {\xe \v SegSourceTop\:Katabatic} {\xe \v Katabatic\:SegSourceTop} {\qr SegSourceTop{\bkmkstart AAAAAAAADI} {\bkmkend AAAAAAAADI} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The source contact of this segment is connected to the {\i top} layer. \par }\cell }{\row } {\xe \v SegSourceBottom\:Katabatic} {\xe \v Katabatic\:SegSourceBottom} {\qr SegSourceBottom{\bkmkstart AAAAAAAADJ} {\bkmkend AAAAAAAADJ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The source contact of this segment is connected to the {\i bottom} layer. \par }\cell }{\row } {\xe \v SegTargetTop\:Katabatic} {\xe \v Katabatic\:SegTargetTop} {\qr SegTargetTop{\bkmkstart AAAAAAAADK} {\bkmkend AAAAAAAADK} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The target contact of this segment is connected to the {\i top} layer. \par }\cell }{\row } {\xe \v SegTargetBottom\:Katabatic} {\xe \v Katabatic\:SegTargetBottom} {\qr SegTargetBottom{\bkmkstart AAAAAAAADL} {\bkmkend AAAAAAAADL} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The target contact of this segment is connected to the {\i bottom} layer. \par }\cell }{\row } {\xe \v SegIsReduced\:Katabatic} {\xe \v Katabatic\:SegIsReduced} {\qr SegIsReduced{\bkmkstart AAAAAAAADM} {\bkmkend AAAAAAAADM} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This segment is the perpandicular part of a dogleg which will use the {\i same} layer as the parallels. \par }\cell }{\row } {\xe \v SegLayerChange\:Katabatic} {\xe \v Katabatic\:SegLayerChange} {\qr SegLayerChange{\bkmkstart AAAAAAAADN} {\bkmkend AAAAAAAADN} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This {\b AutoSegment} has been created to to reconnect parts of an {\b AutoSegment} after a layer change. \par }\cell }{\row } {\xe \v SegStrongTerminal\:Katabatic} {\xe \v Katabatic\:SegStrongTerminal} {\qr SegStrongTerminal{\bkmkstart AAAAAAAADO} {\bkmkend AAAAAAAADO} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This {\b AutoSegment} directly connected to a terminal. \par }\cell }{\row } {\xe \v SegWeakTerminal1\:Katabatic} {\xe \v Katabatic\:SegWeakTerminal1} {\qr SegWeakTerminal1{\bkmkstart AAAAAAAADP} {\bkmkend AAAAAAAADP} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This {\b AutoSegment} indirectly connected to a terminal with medium strength. \par }\cell }{\row } {\xe \v SegWeakTerminal2\:Katabatic} {\xe \v Katabatic\:SegWeakTerminal2} {\qr SegWeakTerminal2{\bkmkstart AAAAAAAADQ} {\bkmkend AAAAAAAADQ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This {\b AutoSegment} indirectly connected to a terminal with weak strength. \par }\cell }{\row } {\xe \v SegNotSourceAligned\:Katabatic} {\xe \v Katabatic\:SegNotSourceAligned} {\qr SegNotSourceAligned{\bkmkstart AAAAAAAADR} {\bkmkend AAAAAAAADR} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This source contact of the segment is not the aligned part of a tee ({\f2 h1} or {\f2 h2} for a {\f2 HTee} , {\f2 v1} or {\f2 v2} for a {\f2 VTee} ).\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid AutoSegmentFlag::SegNotAligned \par }}\cell }{\row } {\xe \v SegNotTargetAligned\:Katabatic} {\xe \v Katabatic\:SegNotTargetAligned} {\qr SegNotTargetAligned{\bkmkstart AAAAAAAADS} {\bkmkend AAAAAAAADS} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This target contact of the segment is not the aligned part of a tee ({\f2 h1} or {\f2 h2} for a {\f2 HTee} , {\f2 v1} or {\f2 v2} for a {\f2 VTee} ).\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid AutoSegmentFlag::SegNotAligned \par }}\cell }{\row } {\xe \v SegSlackened\:Katabatic} {\xe \v Katabatic\:SegSlackened} {\qr SegSlackened{\bkmkstart AAAAAAAADT} {\bkmkend AAAAAAAADT} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This {\b AutoSegment} has been slackened, that is freed from any constraints from source or target through the insertion of straps. \par }\cell }{\row } {\xe \v SegAxisSet\:Katabatic} {\xe \v Katabatic\:SegAxisSet} {\qr SegAxisSet{\bkmkstart AAAAAAAADU} {\bkmkend AAAAAAAADU} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This {\b AutoSegment} has been explicitly positionned at least once. \par }\cell }{\row } {\xe \v SegInvalidated\:Katabatic} {\xe \v Katabatic\:SegInvalidated} {\qr SegInvalidated{\bkmkstart AAAAAAAADV} {\bkmkend AAAAAAAADV} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This position or topology of this {\b AutoSegment} has been changed, needing a revalidation. \par }\cell }{\row } {\xe \v SegInvalidatedLayer\:Katabatic} {\xe \v Katabatic\:SegInvalidatedLayer} {\qr SegInvalidatedLayer{\bkmkstart AAAAAAAADW} {\bkmkend AAAAAAAADW} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The segment has been chenged of layer, but the source & target {\b AutoContact} have not been topologicaly checked yet. This flag {\b must} be used in whith AutoSegmentFlag::SegInvalidated. \par }\cell }{\row } {\xe \v SegCreated\:Katabatic} {\xe \v Katabatic\:SegCreated} {\qr SegCreated{\bkmkstart AAAAAAAADX} {\bkmkend AAAAAAAADX} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b AutoSegment} has just been created. This flag is set only from the contruction of the object until is {\i first} revalidation. Used to disable some tests that cannot be satisfied initially. \par }\cell }{\row } {\xe \v SegWeakTerminal\:Katabatic} {\xe \v Katabatic\:SegWeakTerminal} {\qr SegWeakTerminal{\bkmkstart AAAAAAAADY} {\bkmkend AAAAAAAADY} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A mask composed of:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Katabatic::SegStrongTerminal}\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Katabatic::SegWeakTerminal1}\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Katabatic::SegWeakTerminal2} \par} }\cell }{\row } {\xe \v SegNotAligned\:Katabatic} {\xe \v Katabatic\:SegNotAligned} {\qr SegNotAligned{\bkmkstart AAAAAAAADZ} {\bkmkend AAAAAAAADZ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A mask composed of:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Katabatic::SegNotSourceAligned}\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Katabatic::SegNotTargetAligned}\par} This mask is a quick way to know if a segment is {\b not} part of an aligned set. It means that the segment is, on both ends, either connected to a terminal, a turn {\i or the stem part of a tee} . \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 AutoContact Class Reference\par \pard\plain {\tc\tcl2 \v AutoContact} {\xe \v AutoContact} {\bkmkstart AAAAAAAAEA} {\bkmkend AAAAAAAAEA} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract base class for {\b AutoContact}. }}\par Inheritance diagram for AutoContact:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoContact__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 Hook} * {\b getBodyHook} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Hook} * {\b getAnchorHook} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Component} * {\b getAnchor} () 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 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 {\b DbU::Unit} {\b getX} () 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 getY} () 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 getDx} () 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 getDy} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Point} {\b getCenter} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Point} {\b getPosition} () 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 getWidth} () 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 getHalfWidth} () 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 getHeight} () 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 getHalfHeight} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Components} {\b getSlaveComponents} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setLayer} (const {\b Layer} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setWidth} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setHeight} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setSizes} ({\b DbU::Unit} width, {\b DbU::Unit} height)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setX} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setY} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setPosition} ({\b DbU::Unit} width, {\b DbU::Unit} height)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setPosition} (const {\b Point} &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setDx} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setDy} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setOffset} ({\b DbU::Unit} dx, {\b DbU::Unit} dy)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b translate} (const {\b DbU::Unit} &tx, const {\b DbU::Unit} &ty)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isInCreationStage} () 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 isInvalidatedCache} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isTurn} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isTee} (unsigned int direction) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isHTee} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isVTee} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isFixed} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b hasBadTopology} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b canDestroy} (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 canMoveUp} (const {\b AutoSegment} *moved) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Contact} * {\b base} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual const {\b Name} & {\b getName} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getId} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\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 {\b GCell} * {\b getGCell} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegment} * {\b getOpposite} (const {\b AutoSegment} *) const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegment} * {\b getPerpandicular} (const {\b AutoSegment} *) const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegment} * {\b getSegment} (unsigned int) const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getMinDepth} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getMaxDepth} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b getLengths} ({\b DbU::Unit} *lengths, AutoSegment::DepthLengthSet &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Box} {\b getNativeConstraintBox} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Interval} {\b getUConstraints} (unsigned int direction) 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 getCBXMin} () 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 getCBXMax} () 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 getCBYMin} () 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 getCBYMax} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Box} {\b getConstraintBox} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Box} & {\b intersectConstraintBox} ({\b Box} &box) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b invalidate} (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 void {\b updateGeometry} ()=0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateTopology} ()=0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b showTopologyError} (const std::string &, 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 void {\b checkTopology} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setGCell} ({\b GCell} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setCBXMin} ({\b DbU::Unit} xMin)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setCBXMax} ({\b DbU::Unit} xMax)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setCBYMin} ({\b DbU::Unit} yMin)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setCBYMax} ({\b DbU::Unit} yMax)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setConstraintBox} (const {\b Box} &box)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b restrictConstraintBox} ({\b DbU::Unit} constraintMin, {\b DbU::Unit} constraintMax, unsigned int flags={\b KbWarnOnError})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b migrateConstraintBox} ({\b AutoContact} *other)\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 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 const {\b Name} & {\b getStaticName} ()\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Protected 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 void {\b _getTopology} ({\b Contact} *, {\b Component} *&anchor, {\b Horizontal} **&, {\b Vertical} **&, size_t)\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 base class for {\b AutoContact}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {\bkmkstart AAAAAAAAEB} {\bkmkend AAAAAAAAEB} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Caching Mechanism \par} {\tc\tcl2 \v Caching Mechanism} To bypass the Ring/Hook mechanism {\i and} the subsequent Session::Lookup() call, the AutoSegments anchored on an {\b AutoContact} are cached in the {\b AutoContact} itself. They can be accessed through {\f2 getHorizontalN()} and getVerticalN() accessors {\f2 N} depending on the subtype of {\b AutoContact}.\par Cached AutoSegments are updated in the {\b AutoContact::updateTopology()} function only.\par} {\bkmkstart AAAAAAAAEC} {\bkmkend AAAAAAAAEC} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Invalidate on AutoContacts \par} {\tc\tcl2 \v Invalidate on AutoContacts} The invalidation of an {\b AutoContact} invalidate all the segments that are anchored on it.\par {\b Special Case of HTee & VTee} \par When invalidating an HTee or VTee, two out of the three anchored segments are parallels. The {\i aligned} constraint is passed on those two. By default, when we invalidate an {\b AutoSegment}, the invalidation is applied to the whole aligned set through the {\b AutoSegment::getAligneds()} collection. So if one of the parallel is invalidated and the other not, it should only be because we are already in {\f2 getAligneds()} , then we do not want to invalidate again the whole aligned set. In that case, we perform an atomic only invalidation (reset {\b Katabatic::KbPropagate}).\par For the complete invalidation/revalidation mechanism see {\b Session Algorithm}.\par} {\bkmkstart AAAAAAAAED} {\bkmkend AAAAAAAAED} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Notes - Differences from Katabatic 2 \par} {\tc\tcl2 \v Notes - Differences from Katabatic 2} From the previous version of {\b Katabatic}, {\b AutoContact} have been greatly stripped down (again). They are now always punctual objetcs with stricly fixed topologies: { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoContactTerminal} to connect to a terminal (one segment). \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoContactTurn} to make a turn: two perpandiculars segments. \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoContactHTee} an horizontal tee: two {\i aligned} horizonals and one vertical. \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoContactVTee} an horizontal tee: two {\i aligned} verticals and one horizontal. \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 getBodyHook\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getBodyHook} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Hook} * getBodyHook (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEE} {\bkmkend AAAAAAAAEE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Component::getBodyHook().}\par { Referenced by GCellTopology::_do_xG_1Pad(), and AutoSegment::create().}\par } {\xe \v getAnchorHook\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getAnchorHook} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Hook} * getAnchorHook (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEF} {\bkmkend AAAAAAAAEF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::getAnchorHook().}\par } {\xe \v getAnchor\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getAnchor} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Component} * getAnchor () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEG} {\bkmkend AAAAAAAAEG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::getAnchor().}\par { Referenced by AutoContactTerminal::getNativeConstraintBox(), and AutoContactTerminal::updateTopology().}\par } {\xe \v getNet\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getNet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Net} * getNet () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEH} {\bkmkend AAAAAAAAEH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Component::getNet().}\par { Referenced by AutoContactVTee::updateGeometry(), AutoContactTurn::updateGeometry(), AutoContactHTee::updateGeometry(), AutoContactTerminal::updateGeometry(), AutoContactVTee::updateTopology(), AutoContactTurn::updateTopology(), AutoContactHTee::updateTopology(), and AutoContactTerminal::updateTopology().}\par } {\xe \v getLayer\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Layer} * getLayer () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEI} {\bkmkend AAAAAAAAEI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Component::getLayer().}\par { Referenced by AutoSegment::makeDogleg(), AutoSegment::revalidate(), AutoContactVTee::updateTopology(), AutoContactTurn::updateTopology(), AutoContactHTee::updateTopology(), and AutoContactTerminal::updateTopology().}\par } {\xe \v getX\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getX} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getX () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEJ} {\bkmkend AAAAAAAAEJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Component::getX().}\par { Referenced by GCellTopology::_do_1G_1M3(), GCellTopology::_do_xG_xM3(), AutoSegment::create(), GCellTopology::doRp_StairCaseV(), AutoSegment::makeDogleg(), AutoContactVTee::updateGeometry(), AutoContactTurn::updateGeometry(), and AutoContactHTee::updateGeometry().}\par } {\xe \v getY\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getY} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getY () 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 {\i Base class method proxy.} \par }{ References Component::getY().}\par { Referenced by AutoSegment::create(), GCellTopology::doRp_StairCaseH(), AutoSegment::makeDogleg(), AutoContactVTee::updateGeometry(), AutoContactTurn::updateGeometry(), and AutoContactHTee::updateGeometry().}\par } {\xe \v getDx\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getDx} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getDx () 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 {\i Base class method proxy.} \par }{ References Contact::getDx().}\par } {\xe \v getDy\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getDy} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getDy () 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 {\i Base class method proxy.} \par }{ References Contact::getDy().}\par } {\xe \v getCenter\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getCenter} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Point} getCenter () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEN} {\bkmkend AAAAAAAAEN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }} {\xe \v getPosition\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getPosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Point} getPosition () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEO} {\bkmkend AAAAAAAAEO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Component::getPosition().}\par } {\xe \v getWidth\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getWidth} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getWidth () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEP} {\bkmkend AAAAAAAAEP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::getWidth().}\par } {\xe \v getHalfWidth\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getHalfWidth} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getHalfWidth () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEQ} {\bkmkend AAAAAAAAEQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::getHalfWidth().}\par } {\xe \v getHeight\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getHeight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getHeight () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAER} {\bkmkend AAAAAAAAER} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::getHeight().}\par } {\xe \v getHalfHeight\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getHalfHeight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getHalfHeight () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAES} {\bkmkend AAAAAAAAES} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::getHalfHeight().}\par } {\xe \v getSlaveComponents\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getSlaveComponents} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Components} getSlaveComponents () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAET} {\bkmkend AAAAAAAAET} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Component::getSlaveComponents().}\par } {\xe \v setLayer\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setLayer (const {\b Layer} * {\i layer}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEU} {\bkmkend AAAAAAAAEU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::setLayer().}\par { Referenced by AutoSegment::reduceDoglegLayer(), AutoContactVTee::updateTopology(), AutoContactTurn::updateTopology(), AutoContactHTee::updateTopology(), and AutoContactTerminal::updateTopology().}\par } {\xe \v setWidth\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setWidth} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setWidth ({\b DbU::Unit} {\i w}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEV} {\bkmkend AAAAAAAAEV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::setWidth().}\par } {\xe \v setHeight\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setHeight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setHeight ({\b DbU::Unit} {\i h}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEW} {\bkmkend AAAAAAAAEW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::setHeight().}\par } {\xe \v setSizes\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setSizes} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setSizes ({\b DbU::Unit} {\i w}, {\b DbU::Unit} {\i h}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEX} {\bkmkend AAAAAAAAEX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::setSizes().}\par } {\xe \v setX\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setX} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setX ({\b DbU::Unit} {\i x}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEY} {\bkmkend AAAAAAAAEY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::setX().}\par { Referenced by AutoVertical::_postCreate(), AutoContactVTee::updateGeometry(), AutoContactTurn::updateGeometry(), AutoContactHTee::updateGeometry(), and AutoContactTerminal::updateGeometry().}\par } {\xe \v setY\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setY} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setY ({\b DbU::Unit} {\i y}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAEZ} {\bkmkend AAAAAAAAEZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::setY().}\par { Referenced by AutoHorizontal::_postCreate(), AutoContactVTee::updateGeometry(), AutoContactTurn::updateGeometry(), AutoContactHTee::updateGeometry(), and AutoContactTerminal::updateGeometry().}\par } {\xe \v setPosition\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setPosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setPosition ({\b DbU::Unit} {\i w}, {\b DbU::Unit} {\i h}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFA} {\bkmkend AAAAAAAAFA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::setPosition().}\par } {\xe \v setPosition\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setPosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setPosition (const {\b Point} & {\i p}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFB} {\bkmkend AAAAAAAAFB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::setPosition().}\par } {\xe \v setDx\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setDx} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setDx ({\b DbU::Unit} {\i dx}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFC} {\bkmkend AAAAAAAAFC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::setDx().}\par } {\xe \v setDy\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setDy} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setDy ({\b DbU::Unit} {\i dy}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFD} {\bkmkend AAAAAAAAFD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::setDy().}\par } {\xe \v setOffset\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setOffset} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setOffset ({\b DbU::Unit} {\i w}, {\b DbU::Unit} {\i h}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFE} {\bkmkend AAAAAAAAFE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }{ References Contact::setOffset().}\par } {\xe \v translate\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:translate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void translate (const {\b DbU::Unit} & {\i dx}, const {\b DbU::Unit} & {\i dy}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAFF} {\bkmkend AAAAAAAAFF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\i Base class method proxy.} \par }} {\xe \v isInCreationStage\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:isInCreationStage} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isInCreationStage () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFG} {\bkmkend AAAAAAAAFG} { \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 AutoContact} is still in it's initial creation stage. \par }{ References Katabatic::CntInCreationStage.}\par } {\xe \v isInvalidated\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:isInvalidated} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isInvalidated () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFH} {\bkmkend AAAAAAAAFH} { \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 some {\b AutoSegment} has changed and the {\b AutoContact} needs to be repositionned (through a call to {\b AutoContact::updateGeometry()}). \par }{ References Katabatic::CntInvalidated.}\par } {\xe \v isInvalidatedCache\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:isInvalidatedCache} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isInvalidatedCache () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFI} {\bkmkend AAAAAAAAFI} { \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 some {\b AutoSegment} has changed and the {\b AutoContact} topology needs to be restored, as a gap may have appeared (through a call to AutoSegment::updateTopology()). \par }{ References Katabatic::CntInvalidatedCache.}\par { Referenced by AutoContactVTee::updateGeometry(), AutoContactTurn::updateGeometry(), AutoContactHTee::updateGeometry(), AutoContactTerminal::updateGeometry(), AutoContactVTee::updateTopology(), AutoContactTurn::updateTopology(), AutoContactHTee::updateTopology(), and AutoContactTerminal::updateTopology().}\par } {\xe \v isTurn\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:isTurn} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isTurn () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFJ} {\bkmkend AAAAAAAAFJ} { \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 dynamic type of the {\b AutoContact} is of type Turn. \par }{ References Katabatic::CntTurn.}\par { Referenced by AutoSegment::canReduce(), and AutoSegment::revalidate().}\par } {\xe \v isTee\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:isTee} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isTee (unsigned int {\i direction}) const}} \par {\bkmkstart AAAAAAAAFK} {\bkmkend AAAAAAAAFK} { \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 dynamic type of the {\b AutoContact} is either of type {\b AutoContactHTee} or {\b AutoContactVTee}, according to {\f2 direction} . \par }{ References Katabatic::KbHorizontal, and Katabatic::KbVertical.}\par } {\xe \v isHTee\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:isHTee} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isHTee () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFL} {\bkmkend AAAAAAAAFL} { \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 dynamic type of the {\b AutoContact} is of type {\b AutoContactHTee}. \par }{ References Katabatic::CntHTee.}\par } {\xe \v isVTee\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:isVTee} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isVTee () 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 dynamic type of the {\b AutoContact} is of type {\b AutoContactHTee}. \par }{ References Katabatic::CntVTee.}\par } {\xe \v isFixed\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:isFixed} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isFixed () 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:} {\b true} if the {\b AutoContact} cannot be moved. \par }{ References Katabatic::CntFixed.}\par { Referenced by AutoSegment::create(), AutoContact::getCBXMax(), AutoContact::getCBXMin(), AutoContact::getCBYMax(), and AutoContact::getCBYMin().}\par } {\xe \v hasBadTopology\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:hasBadTopology} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool hasBadTopology () const{\f2 [inline]}}} \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:} {\b true} if the {\b AutoContact} topology has been broken and a gap has appeared. (sould not happen...) \par }{ References Katabatic::CntBadTopology.}\par { Referenced by AutoContactVTee::updateGeometry(), AutoContactTurn::updateGeometry(), AutoContactHTee::updateGeometry(), AutoContactTerminal::updateGeometry(), AutoContactVTee::updateTopology(), AutoContactTurn::updateTopology(), and AutoContactHTee::updateTopology().}\par } {\xe \v canDestroy\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:canDestroy} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canDestroy (unsigned int {\i flags} = {\f2 0}) const}} \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:} {\b true} if the {\b AutoContact} could be destroyed, that is, no segments remains anchored on it. If {\f2 flags} contains {\b Katabatic::KbWarnOnError}, issue an error message. \par }{ References Katabatic::KbWarnOnError.}\par } {\xe \v canMoveUp\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:canMoveUp} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canMoveUp (const {\b AutoSegment} * {\i moved}) const}} \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:} {\b true} if {\f2 segment} can be moved up without triggering a topological modification. It meaans that:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Without {\f2 moved} , the {\b AutoContact} needs only one layer.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 moved} go from {\i below} the {\b AutoContact} to {\i above} . \par} }{ References Component::getLayer(), AutoSegment::getLayer(), and RoutingGauge::getLayerDepth().}\par } {\xe \v base\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:base} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Contact} * base () const{\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 Hurricane::Contact} which is decorated. \par }{ Referenced by AutoVertical::_makeDogleg(), AutoSegment::create(), AutoSegment::getOppositeAnchor(), GCell::removeContact(), AutoContactVTee::updateGeometry(), AutoContactTurn::updateGeometry(), AutoContactHTee::updateGeometry(), and AutoContactTerminal::updateGeometry().}\par } {\xe \v getAllocateds\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getAllocateds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getAllocateds (){\f2 [static]}}} \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 total number of {\b AutoContact} currently allocateds. \par }} {\xe \v getStaticName\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getStaticName} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Name} & getStaticName (){\f2 [static]}}} \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 name of the Hurricane::ExtensionGo slice. \par }} {\xe \v getName\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getName} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Name} & getName () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAFU} {\bkmkend AAAAAAAAFU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The name of the Hurricane::ExtensionGo slice. \par }} {\xe \v getId\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getId} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Name} & getId () const{\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 {\b Returns:} The unique {\f2 identifer} of the {\b AutoSegment}. \par }} {\xe \v getBoundingBox\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getBoundingBox} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Box} getBoundingBox () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAFW} {\bkmkend AAAAAAAAFW} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Contact::getBoundingBox()}. \par }}} {\xe \v getGCell\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getGCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GCell} * getGCell () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAFX} {\bkmkend AAAAAAAAFX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b GCell} into which the {\b AutoContact} is located. \par }{ Referenced by AutoHorizontal::_canSlacken(), AutoVertical::_canSlacken(), AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoHorizontal::_postCreate(), AutoVertical::_postCreate(), AutoHorizontal::_preDestroy(), AutoVertical::_preDestroy(), AutoSegment::AutoSegment(), AutoHorizontal::canMoveULeft(), AutoVertical::canMoveULeft(), AutoHorizontal::canMoveURight(), AutoVertical::canMoveURight(), AutoHorizontal::getGCells(), AutoVertical::getGCells(), AutoSegment::makeDogleg(), AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), AutoVertical::moveURight(), and AutoSegment::toConstraintAxis().}\par } {\xe \v getOpposite\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getOpposite} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getOpposite (const {\b AutoSegment} * {\i reference}) const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAFY} {\bkmkend AAAAAAAAFY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The other {\b AutoSegment} the {\i same} direction as {\f2 reference} , this is only meaningful on {\b AutoContactHTee} or {\b AutoContactVTee}. If there is no opposite, {\f2 NULL} is returned. \par }{ Implemented in {\b AutoContactTerminal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAFZ \\*MERGEFORMAT}{\fldrslt pagenum}}}), {\b AutoContactHTee} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGA \\*MERGEFORMAT}{\fldrslt pagenum}}}), {\b AutoContactTurn} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGB \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoContactVTee} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGC \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getPerpandicular\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getPerpandicular} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getPerpandicular (const {\b AutoSegment} * {\i reference}) const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAGD} {\bkmkend AAAAAAAAGD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} in the {\i perpandicular} direction to {\f2 reference} , this is only meaningful on AutoContacTurn. It there is no unique perpandicular, {\f2 NULL} is returned. \par }{ Implemented in {\b AutoContactTerminal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGE \\*MERGEFORMAT}{\fldrslt pagenum}}}), {\b AutoContactHTee} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGF \\*MERGEFORMAT}{\fldrslt pagenum}}}), {\b AutoContactTurn} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGG \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoContactVTee} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGH \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoSegment::raise(), AutoSegment::reduce(), and AutoSegment::revalidate().}\par } {\xe \v getSegment\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getSegment (unsigned int {\i index}) const{\f2 [pure virtual]}}} \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 nth anchored {\b AutoSegment}. The index is significant:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 0} : first horizontal ({\b h1} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 1} : second horizontal ({\b h2} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 2} : first vertical ({\b b1} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 3} : second vertical ({\b b2} ).\par} Not all the indexes are filled for every {\b AutoContact}. For example {\f2 Turn} have {\b h1} and {\b b1} , and {\f2 HTee} have {\b h1} , {\b h2} and {\b v1} . \par }{ Implemented in {\b AutoContactTerminal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGJ \\*MERGEFORMAT}{\fldrslt pagenum}}}), {\b AutoContactHTee} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGK \\*MERGEFORMAT}{\fldrslt pagenum}}}), {\b AutoContactTurn} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGL \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoContactVTee} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGM \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoHorizontal::canMoveULeft(), AutoVertical::canMoveULeft(), AutoHorizontal::canMoveURight(), AutoVertical::canMoveURight(), LocatorHelper::getSegment(), LocatorHelper::LocatorHelper(), AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), AutoVertical::moveURight(), and LocatorHelper::progress().}\par } {\xe \v getMinDepth\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getMinDepth} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getMinDepth () const}} \par {\bkmkstart AAAAAAAAGN} {\bkmkend AAAAAAAAGN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The layer depth of the bottom layer of the {\b AutoContact}. \par }{ References Component::getLayer().}\par { Referenced by AutoSegment::canPivotUp().}\par } {\xe \v getMaxDepth\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getMaxDepth} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getMaxDepth () 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 {\b Returns:} The layer depth of the top layer of the {\b AutoContact}. \par }{ References Component::getLayer().}\par { Referenced by AutoSegment::canPivotDown().}\par } {\xe \v getLengths\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getLengths} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void getLengths ({\b DbU::Unit} * {\i lengths}, AutoSegment::DepthLengthSet & {\i processeds})}} \par {\bkmkstart AAAAAAAAGP} {\bkmkend AAAAAAAAGP} { \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 lengths} \cell }{A table of {\b DbU::Unit}, the size of all routing layers used. \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 processeds} \cell }{An {\b AutoSegment} sorted set holding all the already processeds AutoSegments.\cell } {\row } } Compute the lengths over the owning {\b GCell} of all the AutoSegments anchored on this {\b AutoContact}. The lengths are added to the total length table {\f2 lengths} . To avoid double accounting of the local AutoSegments that have both source & target in the same {\b GCell}, we keep a set of already processeds AutoSegments in {\f2 processeds} . \par }{ References Katabatic::KbHorizontal, Katabatic::KbVertical, and toLambda().}\par } {\xe \v getNativeConstraintBox\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getNativeConstraintBox} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Box} getNativeConstraintBox () const{\f2 [virtual]}}} \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:} The native constraint box (that is, whithout any user constraints applied). For {\b AutoContactTerminal}, this is the Box of the supporting external component, and for all others the bounding box of the owning {\b GCell}. \par }{ Reimplemented in {\b AutoContactTerminal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGR \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getUConstraints\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getUConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getUConstraints (unsigned int {\i direction}) 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:} The constraint interval in {\f2 direction} (that is, the relevant side of the constraint box). \par }{ References Interval::inflate(), and Katabatic::KbHorizontal.}\par { Referenced by AutoContactTerminal::updateGeometry().}\par } {\xe \v getCBXMin\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getCBXMin} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getCBXMin () 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:} The X coordinate of the bottom left corner of the constraint box. \par }{ References DbU::fromLambda(), Component::getX(), GCell::getX(), and AutoContact::isFixed().}\par { Referenced by AutoContact::getConstraintBox(), and AutoVertical::getConstraints().}\par } {\xe \v getCBXMax\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getCBXMax} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getCBXMax () 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:} The X coordinate of the top right corner of the constraint box. \par }{ References DbU::fromLambda(), Component::getX(), GCell::getX(), and AutoContact::isFixed().}\par { Referenced by AutoContact::getConstraintBox(), and AutoVertical::getConstraints().}\par } {\xe \v getCBYMin\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getCBYMin} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getCBYMin () 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:} The Y coordinate of the bottom left corner of the constraint box. \par }{ References DbU::fromLambda(), Component::getY(), GCell::getY(), and AutoContact::isFixed().}\par { Referenced by AutoContact::getConstraintBox(), and AutoHorizontal::getConstraints().}\par } {\xe \v getCBYMax\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getCBYMax} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getCBYMax () 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:} The Y coordinate of the top right corner of the constraint box. \par }{ References DbU::fromLambda(), Component::getY(), GCell::getY(), and AutoContact::isFixed().}\par { Referenced by AutoContact::getConstraintBox(), and AutoHorizontal::getConstraints().}\par } {\xe \v getConstraintBox\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:getConstraintBox} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Box} getConstraintBox () 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 current constraint box: the native constraint box with all the user's contraints applieds. \par }{ References AutoContact::getCBXMax(), AutoContact::getCBXMin(), AutoContact::getCBYMax(), and AutoContact::getCBYMin().}\par { Referenced by AutoSegment::computeOptimal(), and AutoContact::migrateConstraintBox().}\par } {\xe \v intersectConstraintBox\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:intersectConstraintBox} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Box} & intersectConstraintBox ({\b Box} & {\i box}) const}} \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:} The intersection between {\f2 box} and the constraint box. The result is stored into {\f2 box} and a reference to it is returned. \par }{ References Box::getIntersection().}\par } {\xe \v invalidate\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:invalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void invalidate (unsigned int {\i flags} = {\f2 0})}} \par {\bkmkstart AAAAAAAAGZ} {\bkmkend AAAAAAAAGZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Invalidate the {\b AutoContact}, schedule it for revalidation in the {\b Session}. If flag containt Katabatic::CntInvalidTopology, the topology of the {\b AutoContact} will also be checked and possible gap closeds.\par The revalidations methods associated are:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoSegment::updateGeometry(), recompute the punctual contact position.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoSegment::updateTopology(), restore the connexity. \par} }{ References Katabatic::CntInvalidated, and Katabatic::CntInvalidatedCache.}\par { Referenced by AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), and AutoSegment::AutoSegment().}\par } {\xe \v updateGeometry\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:updateGeometry} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateGeometry (){\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAHA} {\bkmkend AAAAAAAAHA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Compute the new position of the {\b AutoContact} based on the {\b AutoSegment} positions. The {\b Session} mechanism ensure that all {\b AutoSegment} are set into their final positions before calling this updator. \par }{ Implemented in {\b AutoContactTerminal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHB \\*MERGEFORMAT}{\fldrslt pagenum}}}), {\b AutoContactHTee} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHC \\*MERGEFORMAT}{\fldrslt pagenum}}}), {\b AutoContactTurn} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHD \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoContactVTee} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHE \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v updateTopology\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:updateTopology} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateTopology (){\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAHF} {\bkmkend AAAAAAAAHF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Modificate the {\b AutoContact} topology to close any gap. This could be by changing layer or creating a new dogleg on an incident {\b AutoSegment}. \par }{ Implemented in {\b AutoContactTerminal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHG \\*MERGEFORMAT}{\fldrslt pagenum}}}), {\b AutoContactHTee} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHH \\*MERGEFORMAT}{\fldrslt pagenum}}}), {\b AutoContactTurn} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHI \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoContactVTee} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHJ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v showTopologyError\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:showTopologyError} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void showTopologyError (const std::string & {\i message}, unsigned int {\i flags} = {\f2 0})}} \par {\bkmkstart AAAAAAAAHK} {\bkmkend AAAAAAAAHK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Comprensive display of the topology of the {\b AutoContact} to ease the debug work. Prepend with the error message {\f2 message} . Do no throw an error. \par }{ References AutoSegment::isGlobal().}\par { Referenced by AutoContactTerminal::updateGeometry(), AutoContactVTee::updateTopology(), AutoContactTurn::updateTopology(), AutoContactHTee::updateTopology(), and AutoContactTerminal::updateTopology().}\par } {\xe \v checkTopology\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:checkTopology} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void checkTopology (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAHL} {\bkmkend AAAAAAAAHL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Check for topology correctness (no gaps), display an error message if needed. \par }} {\xe \v setGCell\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setGCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setGCell ({\b GCell} * {\i gcell})}} \par {\bkmkstart AAAAAAAAHM} {\bkmkend AAAAAAAAHM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the owning {\b GCell}. \par }{ References GCell::addContact(), and toLambda().}\par { Referenced by AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), and AutoVertical::moveURight().}\par } {\xe \v setCBXMin\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setCBXMin} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setCBXMin ({\b DbU::Unit} {\i xMin}){\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 Set the lower left X coordinate of the constraint box.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: It cannot go outside the GCell bounding box. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}{ References GCell::getX().}\par } {\xe \v setCBXMax\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setCBXMax} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setCBXMax ({\b DbU::Unit} {\i xMax}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHO} {\bkmkend AAAAAAAAHO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the upper right X coordinate of the constraint box.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: It cannot go outside the GCell bounding box. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}{ References GCell::getX(), and GCell::getXMax().}\par } {\xe \v setCBYMin\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setCBYMin} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setCBYMin ({\b DbU::Unit} {\i yMin}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHP} {\bkmkend AAAAAAAAHP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the lower left Y coordinate of the constraint box.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: It cannot go outside the GCell bounding box. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}{ References GCell::getY().}\par } {\xe \v setCBYMax\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setCBYMax} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setCBYMax ({\b DbU::Unit} {\i yMax}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAHQ} {\bkmkend AAAAAAAAHQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the upper right Y coordinate of the constraint box.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: It cannot go outside the GCell bounding box. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}{ References GCell::getY(), and GCell::getYMax().}\par } {\xe \v setConstraintBox\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:setConstraintBox} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setConstraintBox (const {\b Box} & {\i box})}} \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 constraint box.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: It cannot go outside the GCell bounding box. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}{ References Box::getXMax(), Box::getXMin(), Box::getYMax(), and Box::getYMin().}\par } {\xe \v restrictConstraintBox\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:restrictConstraintBox} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool restrictConstraintBox ({\b DbU::Unit} {\i min}, {\b DbU::Unit} {\i max}, unsigned int {\i flags} = {\f2 {\b KbWarnOnError}})}} \par {\bkmkstart AAAAAAAAHS} {\bkmkend AAAAAAAAHS} { \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 min} \cell }{The minimum of the restriction 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 max} \cell }{The maximum of the restriction 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 flags} \cell }{Gives the direction of the restriction. \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 restriction was actually applied.\par }Restrict the current constraint box but check if the restriction will not lead to an empty interval, in that case, do nothing and return {\b false} . \par }{ References Katabatic::KbHorizontal, Katabatic::KbVertical, Katabatic::KbWarnOnError, and toLambda().}\par } {\xe \v migrateConstraintBox\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:migrateConstraintBox} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void migrateConstraintBox ({\b AutoContact} * {\i other})}} \par {\bkmkstart AAAAAAAAHT} {\bkmkend AAAAAAAAHT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Transfer the user constraint box from {\f2 other} to the current object {\f2 this} . The constraints of {\f2 other} are restored to their native values. The two contacts must belong to the same {\b GCell} for this method to take effect. \par }{ References AutoContact::getConstraintBox().}\par { Referenced by AutoHorizontal::_makeDogleg(), and AutoVertical::_makeDogleg().}\par } {\xe \v _getTopology\:Katabatic::AutoContact} {\xe \v Katabatic::AutoContact\:_getTopology} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _getTopology ({\b Contact} * {\i support}, {\b Component} *& {\i anchor}, {\b Horizontal} **& {\i horizontals}, {\b Vertical} **& {\i verticals}, size_t {\i size}){\f2 [static]}, {\f2 [protected]}}} \par {\bkmkstart AAAAAAAAHU} {\bkmkend AAAAAAAAHU} { \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 anchor} \cell }{The anchor, if any. \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 hs} \cell }{The {\b Hurricane::Horizontal} anchored. \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 vs} \cell }{The {\b Hurricane::Vertical} anchored. \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 sz} \cell }{The size of boths {\f2 hs} & {\f2 vs} table passed as arguments.\cell } {\row } } Fill {\f2 anchor} , {\f2 hs} and {\f2 vs} with the components anchored on this {\b AutoContact}. \par }{ References Contact::getAnchor(), and Component::getSlaveComponents().}\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 AutoContact.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoContact.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoContact.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 AutoContactHTee Class Reference\par \pard\plain {\tc\tcl2 \v AutoContactHTee} {\xe \v AutoContactHTee} {\bkmkstart AAAAAAAAHV} {\bkmkend AAAAAAAAHV} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} H-Tee (two H, one V) }}\par Inheritance diagram for AutoContactHTee:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoContactHTee__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 {\b AutoSegment} * {\b getOpposite} (const {\b AutoSegment} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegment} * {\b getPerpandicular} (const {\b AutoSegment} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegment} * {\b getSegment} (unsigned int) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateGeometry} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateTopology} ()\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 AutoContactHTee} * {\b create} ({\b GCell} *, {\b Net} *, const {\b Layer} *)\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 {\b AutoContact} H-Tee (two H, one V) \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} to build an horizontal tee (two H, one V). \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\:Katabatic::AutoContactHTee} {\xe \v Katabatic::AutoContactHTee\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoContactHTee} * create ({\b GCell} * {\i gcell}, {\b Net} * {\i net}, const {\b Layer} * {\i layer}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAHW} {\bkmkend AAAAAAAAHW} { \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 gcell} \cell }{The {\b GCell} into which create the {\b AutoContact}. \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 Net to which this {\b AutoContact} belongs. \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 layer} \cell }{The Layer of the {\b AutoContact}. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The created {\b AutoContactHTee}.\par }Create a new {\b AutoContactHTee}. \par }{ References Katabatic::CntInCreationStage, and Contact::create().}\par { Referenced by GCellTopology::_do_xG(), GCellTopology::_do_xG_1M1_1M2(), and GCellTopology::_do_xG_xM1_xM3().}\par } {\xe \v getOpposite\:Katabatic::AutoContactHTee} {\xe \v Katabatic::AutoContactHTee\:getOpposite} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getOpposite (const {\b AutoSegment} * {\i reference}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAGA} {\bkmkend AAAAAAAAGA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The other {\b AutoSegment} the {\i same} direction as {\f2 reference} , this is only meaningful on {\b AutoContactHTee} or {\b AutoContactVTee}. If there is no opposite, {\f2 NULL} is returned. \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAFY \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getPerpandicular\:Katabatic::AutoContactHTee} {\xe \v Katabatic::AutoContactHTee\:getPerpandicular} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getPerpandicular (const {\b AutoSegment} * {\i reference}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAGF} {\bkmkend AAAAAAAAGF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} in the {\i perpandicular} direction to {\f2 reference} , this is only meaningful on AutoContacTurn. It there is no unique perpandicular, {\f2 NULL} is returned. \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGD \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getSegment\:Katabatic::AutoContactHTee} {\xe \v Katabatic::AutoContactHTee\:getSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getSegment (unsigned int {\i index}) const{\f2 [virtual]}}} \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 nth anchored {\b AutoSegment}. The index is significant:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 0} : first horizontal ({\b h1} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 1} : second horizontal ({\b h2} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 2} : first vertical ({\b b1} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 3} : second vertical ({\b b2} ).\par} Not all the indexes are filled for every {\b AutoContact}. For example {\f2 Turn} have {\b h1} and {\b b1} , and {\f2 HTee} have {\b h1} , {\b h2} and {\b v1} . \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGI \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v updateGeometry\:Katabatic::AutoContactHTee} {\xe \v Katabatic::AutoContactHTee\:updateGeometry} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateGeometry (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAHC} {\bkmkend AAAAAAAAHC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Compute the new position of the {\b AutoContact} based on the {\b AutoSegment} positions. The {\b Session} mechanism ensure that all {\b AutoSegment} are set into their final positions before calling this updator. \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoContact::base(), DebugSession::close(), Katabatic::CntInvalidated, AutoContact::getNet(), AutoContact::getX(), AutoContact::getY(), AutoContact::hasBadTopology(), Go::invalidate(), AutoContact::isInvalidatedCache(), DebugSession::open(), AutoContact::setX(), and AutoContact::setY().}\par } {\xe \v updateTopology\:Katabatic::AutoContactHTee} {\xe \v Katabatic::AutoContactHTee\:updateTopology} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateTopology (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAHH} {\bkmkend AAAAAAAAHH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Restore the topology (i.e. connexity) of the contact after any number of connected segments has changed layer (at least one, up to three).\par For any configuration, the connexity can be restored by making only one dogleg.\par We distinguish two kind of layer changes:{ \par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 1.\tab The two horizontals ({\f2 h1} and {\f2 h2} ) are still on the same layer (either they both moved or the vertical only has moved, see figures 2 & 4). In that case, the dogleg is made on the vertical.\par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 2.\tab The two horizontals no longer are on the same layer (figures 1 & 3). In that case, the dogleg is made on the horizontal which is at the greater distance (in a layer sense) from the vertical.\par} \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHF \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References DebugSession::close(), Katabatic::CntBadTopology, RoutingGauge::getContactLayer(), AutoContact::getLayer(), RoutingGauge::getLayerDepth(), AutoContact::getNet(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoContact::hasBadTopology(), AutoContact::isInvalidatedCache(), DebugSession::open(), AutoContact::setLayer(), and AutoContact::showTopologyError().}\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 AutoContactHTee.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoContactHTee.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoContactHTee.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 AutoContactTerminal Class Reference\par \pard\plain {\tc\tcl2 \v AutoContactTerminal} {\xe \v AutoContactTerminal} {\bkmkstart AAAAAAAAHX} {\bkmkend AAAAAAAAHX} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} Terminal (S/T is a Terminal) }}\par Inheritance diagram for AutoContactTerminal:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoContactTerminal__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 {\b Box} {\b getNativeConstraintBox} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegment} * {\b getSegment} (unsigned int) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegment} * {\b getOpposite} (const {\b AutoSegment} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegment} * {\b getPerpandicular} (const {\b AutoSegment} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateGeometry} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateTopology} ()\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 AutoContactTerminal} * {\b create} ({\b GCell} *gcell, {\b Component} *anchor, const {\b Layer} *layer, {\b Point} point, {\b DbU::Unit} width, {\b DbU::Unit} height)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b AutoContactTerminal} * {\b create} ({\b GCell} *gcell, {\b Component} *anchor, const {\b Layer} *layer, const {\b DbU::Unit} dx, const {\b DbU::Unit} dy, const {\b DbU::Unit} width, const {\b DbU::Unit} height)\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 {\b AutoContact} Terminal (S/T is a Terminal) \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} that are directly attached by either source or target or both to a terminal. \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\:Katabatic::AutoContactTerminal} {\xe \v Katabatic::AutoContactTerminal\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoContactTerminal} * create ({\b GCell} * {\i gcell}, {\b Component} * {\i rp}, const {\b Layer} * {\i layer}, {\b Point} {\i point}, {\b DbU::Unit} {\i width}, {\b DbU::Unit} {\i height}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAHY} {\bkmkend AAAAAAAAHY} { \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 gcell} \cell }{The {\b GCell} into which create the {\b AutoContact}. \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 rp} \cell }{The RoutingPad on which to anchor the {\b AutoContact}. \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 layer} \cell }{The Layer of the {\b AutoContact}. \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 point} \cell }{The absolute position. \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 width} \cell }{The width of the {\b AutoContact}. \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 height} \cell }{The height of the {\b AutoContact}. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The created {\b AutoContact}.\par }Create a new {\b AutoContactTerminal} anchored on {\f2 rp} . {\f2 point} gives the {\i absolute} position. \par }{ References Hook::detach(), and Component::getBodyHook().}\par { Referenced by GCellTopology::doRp_AccessPad(), and GCellTopology::doRp_AutoContacts().}\par } {\xe \v create\:Katabatic::AutoContactTerminal} {\xe \v Katabatic::AutoContactTerminal\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoContactTerminal} * create ({\b GCell} * {\i gcell}, {\b Component} * {\i rp}, const {\b Layer} * {\i layer}, const {\b DbU::Unit} {\i x}, const {\b DbU::Unit} {\i y}, const {\b DbU::Unit} {\i width}, const {\b DbU::Unit} {\i height}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAHZ} {\bkmkend AAAAAAAAHZ} { \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 gcell} \cell }{The {\b GCell} into which create the {\b AutoContact}. \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 rp} \cell }{The Component on which to anchor the {\b AutoContact}. \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 layer} \cell }{The Layer of the {\b AutoContact}. \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 x} \cell }{The absolute X position. \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 y} \cell }{The absolute Y position. \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 width} \cell }{The width of the {\b AutoContact}. \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 height} \cell }{The height of the {\b AutoContact}. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The created {\b AutoContact}.\par }Create a new {\b AutoContactTerminal} anchored on {\f2 rp} . {\f2 (x,y)} gives the {\i absolute} position.\par The anchor component {\f2 rp} is most often a {\b Hurricane::RoutingPad} (occurrencing a {\b Hurricane::Segment}) or directly a {\b Hurricane::Segment}, in case of RoutingPad layer promotion. \par }{ References Katabatic::CntInCreationStage, Contact::create(), Component::getPosition(), and DbU::getValueString().}\par } {\xe \v getNativeConstraintBox\:Katabatic::AutoContactTerminal} {\xe \v Katabatic::AutoContactTerminal\:getNativeConstraintBox} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Box} getNativeConstraintBox () const{\f2 [virtual]}}} \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:} The native constraint box (that is, whithout any user constraints applied). For {\b AutoContactTerminal}, this is the Box of the supporting external component, and for all others the bounding box of the owning {\b GCell}. \par }{ Reimplemented from {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGQ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoContact::getAnchor(), GCell::getBoundingBox(), Occurrence::getEntity(), RoutingPad::getOccurrence(), Transformation::getOrientation(), Occurrence::getPath(), Component::getPosition(), RoutingPad::getSourcePosition(), Segment::getSourcePosition(), RoutingPad::getTargetPosition(), Segment::getTargetPosition(), Path::getTransformation(), and DbU::getValueString().}\par } {\xe \v getSegment\:Katabatic::AutoContactTerminal} {\xe \v Katabatic::AutoContactTerminal\:getSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getSegment (unsigned int {\i index}) const{\f2 [virtual]}}} \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 nth anchored {\b AutoSegment}. The index is significant:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 0} : first horizontal ({\b h1} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 1} : second horizontal ({\b h2} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 2} : first vertical ({\b b1} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 3} : second vertical ({\b b2} ).\par} Not all the indexes are filled for every {\b AutoContact}. For example {\f2 Turn} have {\b h1} and {\b b1} , and {\f2 HTee} have {\b h1} , {\b h2} and {\b v1} . \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGI \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::isHorizontal(), and AutoSegment::isVertical().}\par } {\xe \v getOpposite\:Katabatic::AutoContactTerminal} {\xe \v Katabatic::AutoContactTerminal\:getOpposite} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getOpposite (const {\b AutoSegment} * {\i reference}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAFZ} {\bkmkend AAAAAAAAFZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The other {\b AutoSegment} the {\i same} direction as {\f2 reference} , this is only meaningful on {\b AutoContactHTee} or {\b AutoContactVTee}. If there is no opposite, {\f2 NULL} is returned. \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAFY \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getPerpandicular\:Katabatic::AutoContactTerminal} {\xe \v Katabatic::AutoContactTerminal\:getPerpandicular} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getPerpandicular (const {\b AutoSegment} * {\i reference}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAGE} {\bkmkend AAAAAAAAGE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} in the {\i perpandicular} direction to {\f2 reference} , this is only meaningful on AutoContacTurn. It there is no unique perpandicular, {\f2 NULL} is returned. \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGD \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v updateGeometry\:Katabatic::AutoContactTerminal} {\xe \v Katabatic::AutoContactTerminal\:updateGeometry} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateGeometry (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAHB} {\bkmkend AAAAAAAAHB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Compute the new position of the {\b AutoContact} based on the {\b AutoSegment} positions. The {\b Session} mechanism ensure that all {\b AutoSegment} are set into their final positions before calling this updator. \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoContact::base(), DebugSession::close(), Katabatic::CntInvalidated, Interval::contains(), AutoContact::getNet(), AutoContact::getUConstraints(), DbU::getValueString(), AutoSegment::getX(), AutoSegment::getY(), AutoContact::hasBadTopology(), Go::invalidate(), AutoSegment::isCreated(), AutoSegment::isHorizontal(), AutoContact::isInvalidatedCache(), Katabatic::KbHorizontal, Katabatic::KbVertical, DebugSession::open(), AutoContact::setX(), AutoContact::setY(), and AutoContact::showTopologyError().}\par } {\xe \v updateTopology\:Katabatic::AutoContactTerminal} {\xe \v Katabatic::AutoContactTerminal\:updateTopology} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateTopology (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAHG} {\bkmkend AAAAAAAAHG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Restore the topology (i.e. connexity) of the contact after the incident segment has changed layer.\par Based on the layer depth delta between the terminal and the segment three case can occurs:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The delta is {\b zero} , then just sets the layer of the contact to the common metal layer.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The delta is {\b one} , then sets the contact layer to VIA connecting the two layers.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The delta is {\b two} , then create a dogleg to restore the connexity. Depending on whether the terminal was attached to the source or target, sets the layer of the segments.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid A delta of more than {\b two} is an error, and must never occurs.\par} As, by default, the perpandicular is set in the layer above the parallel, it may be necessary to adjust his layer as well (to the one below).\par \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHF \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References DebugSession::close(), Katabatic::CntBadTopology, AutoContact::getAnchor(), RoutingGauge::getContactLayer(), AutoContact::getLayer(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), AutoContact::getNet(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoSegment::invalidate(), AutoContact::isInvalidatedCache(), AutoSegment::makeDogleg(), DebugSession::open(), AutoContact::setLayer(), and AutoContact::showTopologyError().}\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 AutoContactTerminal.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoContactTerminal.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoContactTerminal.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 AutoContactTurn Class Reference\par \pard\plain {\tc\tcl2 \v AutoContactTurn} {\xe \v AutoContactTurn} {\bkmkstart AAAAAAAAIA} {\bkmkend AAAAAAAAIA} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} Turn (one H, one V) }}\par Inheritance diagram for AutoContactTurn:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoContactTurn__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 {\b AutoSegment} * {\b getOpposite} (const {\b AutoSegment} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegment} * {\b getPerpandicular} (const {\b AutoSegment} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegment} * {\b getSegment} (unsigned int) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateGeometry} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateTopology} ()\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 AutoContactTurn} * {\b create} ({\b GCell} *, {\b Net} *, const {\b Layer} *)\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 {\b AutoContact} Turn (one H, one V) \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} to make a turn (one H, one V). \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\:Katabatic::AutoContactTurn} {\xe \v Katabatic::AutoContactTurn\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoContactTurn} * create ({\b GCell} * {\i gcell}, {\b Net} * {\i net}, const {\b Layer} * {\i layer}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAIB} {\bkmkend AAAAAAAAIB} { \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 gcell} \cell }{The {\b GCell} into which create the {\b AutoContact}. \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 Net to which this {\b AutoContact} belongs. \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 layer} \cell }{The Layer of the {\b AutoContact}. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The created {\b AutoContactTurn}.\par }Create a new {\b AutoContactTurn}. \par }{ References Katabatic::CntInCreationStage, and Contact::create().}\par { Referenced by GCellTopology::_do_1G_1M3(), GCellTopology::_do_1G_xM1(), GCellTopology::_do_xG(), GCellTopology::_do_xG_1M1_1M2(), GCellTopology::_do_xG_1Pad(), GCellTopology::_do_xG_xM1_xM3(), GCellTopology::_do_xG_xM3(), AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), GCellTopology::doRp_Access(), GCellTopology::doRp_StairCaseH(), GCellTopology::doRp_StairCaseV(), and anonymous_namespace\{LoadGrByNet.cpp\}::singleGCell().}\par } {\xe \v getOpposite\:Katabatic::AutoContactTurn} {\xe \v Katabatic::AutoContactTurn\:getOpposite} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getOpposite (const {\b AutoSegment} * {\i reference}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAGB} {\bkmkend AAAAAAAAGB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The other {\b AutoSegment} the {\i same} direction as {\f2 reference} , this is only meaningful on {\b AutoContactHTee} or {\b AutoContactVTee}. If there is no opposite, {\f2 NULL} is returned. \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAFY \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getPerpandicular\:Katabatic::AutoContactTurn} {\xe \v Katabatic::AutoContactTurn\:getPerpandicular} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getPerpandicular (const {\b AutoSegment} * {\i reference}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAGG} {\bkmkend AAAAAAAAGG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} in the {\i perpandicular} direction to {\f2 reference} , this is only meaningful on AutoContacTurn. It there is no unique perpandicular, {\f2 NULL} is returned. \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGD \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getSegment\:Katabatic::AutoContactTurn} {\xe \v Katabatic::AutoContactTurn\:getSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getSegment (unsigned int {\i index}) const{\f2 [virtual]}}} \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:} The nth anchored {\b AutoSegment}. The index is significant:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 0} : first horizontal ({\b h1} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 1} : second horizontal ({\b h2} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 2} : first vertical ({\b b1} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 3} : second vertical ({\b b2} ).\par} Not all the indexes are filled for every {\b AutoContact}. For example {\f2 Turn} have {\b h1} and {\b b1} , and {\f2 HTee} have {\b h1} , {\b h2} and {\b v1} . \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGI \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v updateGeometry\:Katabatic::AutoContactTurn} {\xe \v Katabatic::AutoContactTurn\:updateGeometry} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateGeometry (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAHD} {\bkmkend AAAAAAAAHD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Compute the new position of the {\b AutoContact} based on the {\b AutoSegment} positions. The {\b Session} mechanism ensure that all {\b AutoSegment} are set into their final positions before calling this updator. \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoContact::base(), DebugSession::close(), Katabatic::CntInvalidated, AutoContact::getNet(), AutoContact::getX(), AutoContact::getY(), AutoContact::hasBadTopology(), Go::invalidate(), AutoContact::isInvalidatedCache(), DebugSession::open(), AutoContact::setX(), and AutoContact::setY().}\par } {\xe \v updateTopology\:Katabatic::AutoContactTurn} {\xe \v Katabatic::AutoContactTurn\:updateTopology} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateTopology (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAHI} {\bkmkend AAAAAAAAHI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Restore the topology (i.e. connexity) of the contact after one or both connected segments has changed layer.\par Based on the layer depth delta between the two perpandiculars segments. Three case can occurs:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The delta is {\b zero} , then just sets the layer of the contact to the common metal layer (turn in same layer).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The delta is {\b one} , then sets the contact layer to VIA connecting the two layers.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The delta {\b cannot be equal to two} , due to the alternatives routing directions, it would mean a {\i turn} connecting two {\i horizontals} (or verticals) in different layers.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The delta is {\b three} , then create a dogleg to restore the connexity. The dogleg will be created on the connected segment which as been {\i layer invalidated} . If both of them have been invalidated, the horizontal one is preferred.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid A delta of more than {\b three} is an error, and must never occurs.\par} \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHF \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References DebugSession::close(), Katabatic::CntBadTopology, RoutingGauge::getContactLayer(), AutoContact::getLayer(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), AutoContact::getNet(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoContact::hasBadTopology(), AutoSegment::invalidate(), AutoContact::isInvalidatedCache(), AutoSegment::isInvalidatedLayer(), AutoSegment::makeDogleg(), DebugSession::open(), AutoContact::setLayer(), and AutoContact::showTopologyError().}\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 AutoContactTurn.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoContactTurn.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoContactTurn.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 AutoContactVTee Class Reference\par \pard\plain {\tc\tcl2 \v AutoContactVTee} {\xe \v AutoContactVTee} {\bkmkstart AAAAAAAAIC} {\bkmkend AAAAAAAAIC} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} V-Tee (one H, two V) }}\par Inheritance diagram for AutoContactVTee:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoContactVTee__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 {\b AutoSegment} * {\b getOpposite} (const {\b AutoSegment} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegment} * {\b getPerpandicular} (const {\b AutoSegment} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegment} * {\b getSegment} (unsigned int) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateGeometry} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateTopology} ()\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 AutoContactVTee} * {\b create} ({\b GCell} *, {\b Net} *, const {\b Layer} *)\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 {\b AutoContact} V-Tee (one H, two V) \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoContact} to build a vertical tee (two V, one H). \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\:Katabatic::AutoContactVTee} {\xe \v Katabatic::AutoContactVTee\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoContactVTee} * create ({\b GCell} * {\i gcell}, {\b Net} * {\i net}, const {\b Layer} * {\i layer}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAID} {\bkmkend AAAAAAAAID} { \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 gcell} \cell }{The {\b GCell} into which create the {\b AutoContact}. \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 Net to which this {\b AutoContact} belongs. \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 layer} \cell }{The Layer of the {\b AutoContact}. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The created {\b AutoContactVTee}.\par }Create a new {\b AutoContactVTee}. \par }{ References Katabatic::CntInCreationStage, and Contact::create().}\par { Referenced by GCellTopology::_do_xG(), GCellTopology::_do_xG_xM1_xM3(), GCellTopology::_do_xG_xM2(), and GCellTopology::_do_xG_xM3().}\par } {\xe \v getOpposite\:Katabatic::AutoContactVTee} {\xe \v Katabatic::AutoContactVTee\:getOpposite} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getOpposite (const {\b AutoSegment} * {\i reference}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAGC} {\bkmkend AAAAAAAAGC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The other {\b AutoSegment} the {\i same} direction as {\f2 reference} , this is only meaningful on {\b AutoContactHTee} or {\b AutoContactVTee}. If there is no opposite, {\f2 NULL} is returned. \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAFY \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getPerpandicular\:Katabatic::AutoContactVTee} {\xe \v Katabatic::AutoContactVTee\:getPerpandicular} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getPerpandicular (const {\b AutoSegment} * {\i reference}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAGH} {\bkmkend AAAAAAAAGH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} in the {\i perpandicular} direction to {\f2 reference} , this is only meaningful on AutoContacTurn. It there is no unique perpandicular, {\f2 NULL} is returned. \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGD \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getSegment\:Katabatic::AutoContactVTee} {\xe \v Katabatic::AutoContactVTee\:getSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getSegment (unsigned int {\i index}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAGM} {\bkmkend AAAAAAAAGM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The nth anchored {\b AutoSegment}. The index is significant:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 0} : first horizontal ({\b h1} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 1} : second horizontal ({\b h2} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 2} : first vertical ({\b b1} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b 3} : second vertical ({\b b2} ).\par} Not all the indexes are filled for every {\b AutoContact}. For example {\f2 Turn} have {\b h1} and {\b b1} , and {\f2 HTee} have {\b h1} , {\b h2} and {\b v1} . \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAGI \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v updateGeometry\:Katabatic::AutoContactVTee} {\xe \v Katabatic::AutoContactVTee\:updateGeometry} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateGeometry (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAHE} {\bkmkend AAAAAAAAHE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Compute the new position of the {\b AutoContact} based on the {\b AutoSegment} positions. The {\b Session} mechanism ensure that all {\b AutoSegment} are set into their final positions before calling this updator. \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoContact::base(), DebugSession::close(), Katabatic::CntInvalidated, AutoContact::getNet(), AutoContact::getX(), AutoContact::getY(), AutoContact::hasBadTopology(), Go::invalidate(), AutoContact::isInvalidatedCache(), DebugSession::open(), AutoContact::setX(), and AutoContact::setY().}\par } {\xe \v updateTopology\:Katabatic::AutoContactVTee} {\xe \v Katabatic::AutoContactVTee\:updateTopology} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateTopology (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAHJ} {\bkmkend AAAAAAAAHJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Restore the topology (i.e. connexity) of the contact after any number of connected segments has changed layer (at least one, up to three).\par For a detailed explanation, see {\b AutoContactHTee::updateTopology()} and sawp horizontal & vertical... \par }{ Implements {\b AutoContact} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAHF \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References DebugSession::close(), Katabatic::CntBadTopology, RoutingGauge::getContactLayer(), AutoContact::getLayer(), RoutingGauge::getLayerDepth(), AutoContact::getNet(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoContact::hasBadTopology(), AutoSegment::invalidate(), AutoContact::isInvalidatedCache(), DebugSession::open(), AutoContact::setLayer(), and AutoContact::showTopologyError().}\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 AutoContactVTee.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoContactVTee.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoContactVTee.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 AutoHorizontal Class Reference\par \pard\plain {\tc\tcl2 \v AutoHorizontal} {\xe \v AutoHorizontal} {\bkmkstart AAAAAAAAIE} {\bkmkend AAAAAAAAIE} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Concrete Horizontal {\b AutoSegment}. }}\par Inheritance diagram for AutoHorizontal:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoHorizontal__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 _canSlacken} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b canMoveULeft} (float reserve=0.0) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b canMoveURight} (float reserve=0.0) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Segment} * {\b base} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Segment} * {\b base} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Horizontal} * {\b getHorizontal} ()\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 getSourceU} () 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 getTargetU} () 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 getDuSource} () 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 getDuTarget} () 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 getSpanU} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b getConstraints} ({\b DbU::Unit} &min, {\b DbU::Unit} &max) 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} (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 virtual {\b Interval} {\b getTargetConstraints} (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 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 size_t {\b getGCells} (vector< {\b GCell} *> &) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b setDuSource} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b setDuTarget} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateOrient} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updatePositions} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b checkPositions} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b checkConstraints} () 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 _makeDogleg} ({\b GCell} *, 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 moveULeft} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b moveURight} ()\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Protected 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 _postCreate} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b _preDestroy} ()\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 Concrete Horizontal {\b 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 _canSlacken\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:_canSlacken} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool _canSlacken () const{\f2 [virtual]}}} \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:} {\b true} if the segment can be slackened. That is, source or target constraints are less than three pitches. \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Interval::contains(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), GCell::getSide(), Interval::getSize(), DbU::getValueString(), Interval::inflate(), and Katabatic::KbVertical.}\par } {\xe \v canMoveULeft\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:canMoveULeft} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canMoveULeft (float {\i reserve} = {\f2 0.0}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAIH} {\bkmkend AAAAAAAAIH} { \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 {\b true} if the {\i global} segment can be moved on the left {\b GCell} (for a vertical) or down (for an horizontal). The move is accepted only if it do not change the amount of global wiring. Thus the following conditions:{ \par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The segment mustn't be on the leftmost {\b GCell} (obvious...).\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The segment must be global.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The source and target contacts must be AutoContactTurn(s).\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid At least one of the perpandicular must be global {\b and} connected through the {\i target} . That is, it's a global which extends toward left.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The {\b GCell} of maximum density on the left must remains below the current {\b GCell} of maximum density, with a margin of {\f2 reserve} (expressed in total saturation percentage). \par} }}{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAII \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), GCell::getDown(), AutoContact::getGCell(), AutoSegment::getGCell(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), GCell::getRight(), Session::getRoutingGauge(), AutoContact::getSegment(), GCell::getWDensity(), and AutoSegment::isGlobal().}\par } {\xe \v canMoveURight\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:canMoveURight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canMoveURight (float {\i reserve} = {\f2 0.0}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAIJ} {\bkmkend AAAAAAAAIJ} { \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 {\b true} if the {\i global} segment can be moved on the right {\b GCell} (for a vertical) or up (for an horizontal). The move is accepted only if it do not change the amount of global wiring. Thus the following conditions:{ \par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The segment mustn't be on the leftmost {\b GCell} (obvious...).\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The segment must be global.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The source and target contacts must be AutoContactTurn(s).\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid At least one of the perpandicular must be global {\b and} connected through the {\i source} . That is, it's a global which extends toward right.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The {\b GCell} of maximum density on the left must remains below the current {\b GCell} of maximum density, with a margin of {\f2 reserve} (expressed in total saturation percentage). \par} }}{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIK \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), GCell::getRight(), Session::getRoutingGauge(), AutoContact::getSegment(), GCell::getUp(), GCell::getWDensity(), and AutoSegment::isGlobal().}\par } {\xe \v base\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:base} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Segment} * base (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAIL} {\bkmkend AAAAAAAAIL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the decorated {\b Hurricane::Segment}. \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIM \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v base\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:base} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Segment} * base () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAIN} {\bkmkend AAAAAAAAIN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the decorated {\b Hurricane::Segment} (const flavor). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIO \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getHorizontal\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:getHorizontal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Horizontal} * getHorizontal (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAIP} {\bkmkend AAAAAAAAIP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} If the decorated segment is a {\b Hurricane::Horizontal}, return it. {\f2 NULL} otherwise. \par }{ Reimplemented from {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIQ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getSourceU\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:getSourceU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getSourceU () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAIR} {\bkmkend AAAAAAAAIR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} {\i uniform} source position. (X for an horizontal and Y for a Vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIS \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Segment::getSourceX().}\par } {\xe \v getTargetU\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:getTargetU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getTargetU () const{\f2 [virtual]}}} \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:} The {\b AutoSegment} {\i uniform} target position. (X for an horizontal and Y for a Vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIU \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Segment::getTargetX().}\par } {\xe \v getDuSource\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:getDuSource} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getDuSource () const{\f2 [virtual]}}} \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 {\b AutoSegment} {\i uniform} delta from source. (dX for an horizontal and dY for a Vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIW \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Horizontal::getDxSource().}\par } {\xe \v getDuTarget\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:getDuTarget} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getDuTarget () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAIX} {\bkmkend AAAAAAAAIX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} {\i uniform} delta from source. (dX for an horizontal and dY for a Vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIY \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Horizontal::getDxTarget().}\par } {\xe \v getSpanU\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:getSpanU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getSpanU () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAIZ} {\bkmkend AAAAAAAAIZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} {\i uniform} occupying interval (on X for horizontal and on Y for vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Segment::getSourceX(), and Segment::getTargetX().}\par } {\xe \v getConstraints\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:getConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool getConstraints ({\b DbU::Unit} & {\i min}, {\b DbU::Unit} & {\i max}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAJB} {\bkmkend AAAAAAAAJB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} in {\f2 min} & {\f2 max} the allowed range for the segment axis. \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJC \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getCBYMax(), AutoContact::getCBYMin(), AutoSegment::getUserConstraints(), and DbU::getValueString().}\par } {\xe \v getSourceConstraints\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:getSourceConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getSourceConstraints (unsigned int {\i flags} = {\f2 0}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAJD} {\bkmkend AAAAAAAAJD} { \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 Interval into witch the source {\b AutoContact} can vary. By default all deduced constraints and user constraints are took into account. If {\f2 flags} contains {\f2 KbNativeConstraints} the constraint returned is only the enclosing {\b GCell}. \par }}{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJE \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoSource(), Box::getYMax(), Box::getYMin(), and Katabatic::KbNativeConstraints.}\par } {\xe \v getTargetConstraints\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:getTargetConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getTargetConstraints (unsigned int {\i flags} = {\f2 0}) const{\f2 [virtual]}}} \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 Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The Interval into witch the target {\b AutoContact} can vary. By default all deduced constraints and user constraints are took into account. If {\f2 flags} contains {\f2 KbNativeConstraints} the constraint returned is only the enclosing {\b GCell}. \par }}{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoTarget(), Box::getYMax(), Box::getYMin(), and Katabatic::KbNativeConstraints.}\par } {\xe \v getDirection\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:getDirection} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDirection () const{\f2 [virtual]}}} \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 Katabatic::KbHorizontal} or {\b Katabatic::KbVertical} according to the decorated segment. \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJI \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Katabatic::KbHorizontal.}\par } {\xe \v getGCells\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:getGCells} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getGCells (vector< {\b GCell} *> & {\i gcells}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAJJ} {\bkmkend AAAAAAAAJJ} { \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 gcells} \cell }{A vector that will be filled by all the GCells that the segment overlap. In increasing order, from source to target. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The vector's size. \par }}{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJK \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), and GCell::getRight().}\par } {\xe \v setDuSource\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:setDuSource} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setDuSource ({\b DbU::Unit} {\i du}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAJL} {\bkmkend AAAAAAAAJL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the {\i uniform} {\f2 dU} from source anchor (dX for Horizontal, dY for Vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJM \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v setDuTarget\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:setDuTarget} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setDuTarget ({\b DbU::Unit} {\i du}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAJN} {\bkmkend AAAAAAAAJN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the {\i uniform} {\f2 dU} from target anchor (dX for Horizontal, dY for Vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJO \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v updateOrient\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:updateOrient} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateOrient (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAJP} {\bkmkend AAAAAAAAJP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Ensure that source is lower than target. Swap them if needed. Swap never occurs on global segment because their source and target anchors are from different {\b GCell}, which are already ordered. \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJQ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Segment::getSourceX(), Segment::getTargetX(), Segment::invert(), Katabatic::SegSourceBottom, Katabatic::SegSourceTop, Katabatic::SegStrongTerminal, Katabatic::SegTargetBottom, Katabatic::SegTargetTop, AutoSegment::setFlags(), and AutoSegment::unsetFlags().}\par } {\xe \v updatePositions\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:updatePositions} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updatePositions (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAJR} {\bkmkend AAAAAAAAJR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Update the segment begenning and ending positions. The positions takes into account the extension caps and reflect the real space used by the segment under it's long axis. \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJS \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Session::getExtensionCap(), AutoSegment::getLayer(), Segment::getSourceX(), and Segment::getTargetX().}\par } {\xe \v checkPositions\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:checkPositions} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool checkPositions () const{\f2 [virtual]}}} \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:} {\b true} if the relative positions of source & target are coherent. (source <= target). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJU \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Session::getExtensionCap(), AutoSegment::getLayer(), Segment::getSourceX(), Segment::getTargetX(), and DbU::getValueString().}\par } {\xe \v checkConstraints\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:checkConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool checkConstraints () const{\f2 [virtual]}}} \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:} {\b true} if the constraint intervel is coherent (non-empty or punctual in the worst case). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJW \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), and Interval::intersect().}\par } {\xe \v _makeDogleg\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:_makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int _makeDogleg ({\b GCell} * {\i doglegGCell}, unsigned int {\i flags}){\f2 [virtual]}}} \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 This method is the workhorse for the various dogleg and topology restauration methods.} It is the atomic method that actually make the dogleg on {\b this} segment.\par {\b Returns:} {\b Katabatic::KbUseAboveLayer} if the dogleg is using the {\i above} layer ({\b Katabatic::KbUseBelowLayer} for the below layer).\par Break the current segment in two (a.k.a. making a dogleg).{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The segment is broken inside {\f2 doglegGCell} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Two new segments are createds, one perpandicular and one parallel.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The original segment is always kept attached to the {\i source} . (the new parallel fragment is attached to the {\i target} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The perpandicular segment is in the layer {\i above} by default. If we are already on the topmost routing layer, the {\i below} layer is used.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid If the segment pass through the breaking {\b GCell}, it's axis is set into the center. If the segment is local, the axis is the middle of the segment.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The Local/Global kind of the original segment is updated. The local/global status is computed by the constructor of the {\b AutoSegment} for the perpandicular and the new parallel.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The terminal state is updated. If the segment is a strong terminal the part that is no longer directly connected to the terminal is demoted to {\b Katabatic::SegWeakTerminal1}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The perpandicular is obviously a canonical. If the broken segment is canonical, the original {\b is} left canonical and only the new parallel is re-canonized. Otherwise, we re-canonise both sets of aligned segments (the one on the source and the one on the target).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The three segments are added to the session dogleg stack.\par} After this method call the net topology is guarantee to be valid.\par \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJY \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::canonize(), DebugSession::close(), AutoContactTurn::create(), AutoSegment::create(), Session::dogleg(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), Session::getConfiguration(), RoutingGauge::getContactLayer(), AutoContact::getGCell(), Component::getLayer(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), Component::getNet(), AutoSegment::getNet(), GCell::getRight(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoSegment::getSourceX(), AutoSegment::getTargetX(), GCell::getX(), GCell::getXMax(), AutoSegment::getY(), AutoContact::invalidate(), AutoSegment::invalidate(), AutoSegment::isCanonical(), AutoSegment::isLocal(), AutoSegment::isSlackened(), AutoSegment::isWeakTerminal(), Katabatic::KbHorizontal, Katabatic::KbUseAboveLayer, Katabatic::KbUseBelowLayer, Katabatic::KbVertical, AutoContact::migrateConstraintBox(), DebugSession::open(), GCell::removeHSegment(), Katabatic::SegCanonical, Katabatic::SegDogleg, Katabatic::SegGlobal, Katabatic::SegNotAligned, Katabatic::SegSlackened, Katabatic::SegWeakTerminal1, AutoSegment::setFlags(), AutoSegment::setLayer(), and AutoSegment::unsetFlags().}\par } {\xe \v moveULeft\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:moveULeft} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool moveULeft (){\f2 [virtual]}}} \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 This function do not manage an aligned set. It applies on {\f2 this} segment only.} \par Displace an Horizontal or Vertical segment to the {\b GCell} below (a.k.a. lower or inferior). Rules for displacement:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The segment must be connected at both end to a turn contact (we do not want to manage more complex cases for the time beeing).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid And, of course, the segment must not already by on the bottomost {\b GCell}...\par} The displacement take care of:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Managing the status of the various perpandiculars. The stretched one are made global if needed. The shrinked one made local, if needed.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The supporting {\b AutoContact} (source & target) are changed of {\b GCell}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid If the segment is global, the go-through GCells are updateds.\par} {\b Returns:} {\b true} if the move has succeeded.\par \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References GCell::addVSegment(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), GCell::getDown(), AutoContact::getGCell(), AutoSegment::getGCell(), GCell::getRight(), AutoContact::getSegment(), GCell::getSide(), Interval::getVMax(), AutoSegment::isLocal(), Katabatic::KbVertical, GCell::removeVSegment(), Katabatic::SegGlobal, AutoSegment::setAxis(), AutoSegment::setFlags(), AutoContact::setGCell(), and AutoSegment::unsetFlags().}\par } {\xe \v moveURight\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:moveURight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool moveURight (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAKB} {\bkmkend AAAAAAAAKB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b This function do not manage an aligned set. It applies on {\f2 this} segment only.} \par Displace an Horizontal or Vertical segment to the {\b GCell} above (a.k.a. upper or superior). Rules for displacement:\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b AutoSegment::moveULeft()} for a complete description. \par }}{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKC \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References GCell::addVSegment(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), GCell::getRight(), AutoContact::getSegment(), GCell::getSide(), GCell::getUp(), Interval::getVMin(), AutoSegment::isLocal(), Katabatic::KbVertical, GCell::removeVSegment(), Katabatic::SegGlobal, AutoSegment::setAxis(), AutoSegment::setFlags(), AutoContact::setGCell(), and AutoSegment::unsetFlags().}\par } {\xe \v _postCreate\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:_postCreate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _postCreate (){\f2 [protected]}, {\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAKD} {\bkmkend AAAAAAAAKD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid In addition to {\b AutoSegment::_postCreate()}, detect whether the segment is global or local and register it in the relevant GCells (if needed).\par If the segment is anchored directly on a terminal, adjust the axis so it's connected. \par }{ Reimplemented from {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKE \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::_postCreate(), GCell::addHSegment(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), GCell::getRight(), GCell::getX(), Component::getY(), Katabatic::SegGlobal, AutoSegment::setFlags(), and AutoContact::setY().}\par } {\xe \v _preDestroy\:Katabatic::AutoHorizontal} {\xe \v Katabatic::AutoHorizontal\:_preDestroy} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _preDestroy (){\f2 [protected]}, {\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAKF} {\bkmkend AAAAAAAAKF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform operations that must be done before the actual destructor is called. Merely whidrawn the {\b AutoSegment} from the lookup/Session mechanism. \par }{ Reimplemented from {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::_preDestroy(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getId(), GCell::getRight(), GCell::getX(), and GCell::removeHSegment().}\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 AutoHorizontal.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoHorizontal.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoHorizontal.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 AutoSegment Class Reference\par \pard\plain {\tc\tcl2 \v AutoSegment} {\xe \v AutoSegment} {\bkmkstart AAAAAAAAKH} {\bkmkend AAAAAAAAKH} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract base class for {\b AutoSegment}. }}\par Inheritance diagram for AutoSegment:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoSegment__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 {\b Segment} * {\b base} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Segment} * {\b base} ()=0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Horizontal} * {\b getHorizontal} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Vertical} * {\b getVertical} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Cell} * {\b getCell} () 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 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 {\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 {\b Hook} * {\b getSourceHook} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Hook} * {\b getTargetHook} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Contact} * {\b getSource} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Contact} * {\b getTarget} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Component} * {\b getOppositeAnchor} ({\b Component} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Components} {\b getAnchors} () 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 getX} () 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 getY} () 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 getWidth} () 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 DbU::Unit} {\b getSourcePosition} () 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 getTargetPosition} () 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 getSourceX} () 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 getSourceY} () 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 getTargetX} () 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 getTargetY} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b invert} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setLayer} (const {\b Layer} *)\par \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 bool {\b isGlobal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isLocal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isFixed} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isBipoint} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isWeakTerminal} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isStrongTerminal} (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 isLayerChange} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isSpinTop} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isSpinBottom} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isSpinTopOrBottom} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isReduced} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isStrap} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 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 isInvalidated} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isInvalidatedLayer} () 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 isCanonical} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isUnsetAxis} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 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 _canSlacken} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b canReduce} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b mustRaise} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\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 canMoveULeft} (float reserve=0.0) 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 canMoveURight} (float reserve=0.0) const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b canMoveUp} (float reserve=0.0, 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 canPivotUp} (float reserve=0.0, 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 canPivotDown} (float reserve=0.0, 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 canSlacken} (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 virtual bool {\b checkPositions} () 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 checkConstraints} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 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 {\b GCell} * {\b getGCell} () const\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} (vector< {\b GCell} *> &) const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoContact} * {\b getAutoSource} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoContact} * {\b getAutoTarget} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoContact} * {\b getOppositeAnchor} ({\b AutoContact} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getPerpandicularsBound} (set< {\b AutoSegment} *> &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegment} * {\b getParent} () 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 virtual {\b DbU::Unit} {\b getSourceU} () const =0\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 getTargetU} () const =0\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 getDuSource} () const =0\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 getDuTarget} () 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 getOrigin} () 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 getExtremity} () 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 getSpanU} () const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Interval} {\b getMinSpanU} () 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} (unsigned int flags=0) const =0\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} (unsigned int flags=0) 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 getConstraints} ({\b DbU::Unit} &min, {\b DbU::Unit} &max) const =0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b getConstraints} ({\b Interval} &i) 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 getUserConstraints} () 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 getSlack} () 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 getOptimalMin} () 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 getOptimalMax} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Interval} & {\b getOptimal} ({\b Interval} &i) 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 getCost} ({\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 virtual {\b AutoSegment} * {\b getCanonical} ({\b DbU::Unit} &min, {\b DbU::Unit} &max)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegment} * {\b getCanonical} ({\b Interval} &i)\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 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 virtual void {\b setDuSource} ({\b DbU::Unit} du)=0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b setDuTarget} ({\b DbU::Unit} du)=0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b computeTerminal} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateOrient} ()=0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updatePositions} ()=0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b mergeUserConstraints} (const {\b Interval} &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b resetUserConstraints} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setOptimalMin} ({\b DbU::Unit} min)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setOptimalMax} ({\b DbU::Unit} max)\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 {\b AutoSegment} * {\b makeDogleg} ({\b AutoContact} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b makeDogleg} ({\b Interval}, unsigned int flags=KbNoFlags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b makeDogleg} ({\b GCell} *, unsigned int flags=KbNoFlags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual unsigned int {\b _makeDogleg} ({\b 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 bool {\b moveULeft} ()=0\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b moveURight} ()=0\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)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b reduceDoglegLayer} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b reduce} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b raise} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegment} * {\b canonize} (unsigned int flags=KbNoFlags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b invalidate} (unsigned int flags={\b KbPropagate})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b computeOptimal} (set< {\b AutoSegment} *> &processeds)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setAxis} ({\b DbU::Unit}, 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 toConstraintAxis} (unsigned int flags={\b KbRealignate})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b toOptimalAxis} (unsigned int flags={\b KbRealignate})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments} {\b getOnSourceContact} (unsigned int direction)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments} {\b getOnTargetContact} (unsigned int direction)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments} {\b getAligneds} (unsigned int flags=KbNoFlags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments} {\b getPerpandiculars} ()\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 AutoSegment} * {\b create} ({\b AutoContact} *source, {\b AutoContact} *target, {\b Segment} *hurricaneSegment)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b AutoSegment} * {\b create} ({\b AutoContact} *source, {\b AutoContact} *target, unsigned int dir, size_t depth=RoutingGauge::nlayerdepth)\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Protected 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 AutoSegment} ({\b Segment} *segment)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b ~AutoSegment} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b _postCreate} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b _preDestroy} ()\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 unsigned int {\b _getFlags} () const\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Protected 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 void {\b _preCreate} ({\b AutoContact} *source, {\b AutoContact} *target)\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 base class for {\b AutoSegment}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {\bkmkstart AAAAAAAAKI} {\bkmkend AAAAAAAAKI} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Creating AutoHorizontal & AutoVertical \par} {\tc\tcl2 \v Creating AutoHorizontal & AutoVertical} {\b AutoSegment} is the abstract base class for {\b AutoHorizontal} and {\b AutoVertical}. They are must be created only through the factory method: {\b AutoSegment::create()}.\par} {\bkmkstart AAAAAAAAKJ} {\bkmkend AAAAAAAAKJ} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Characteristics of AutoSegments \par} {\tc\tcl2 \v Characteristics of AutoSegments} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Unique ID: to ease the enforcing of a deterministic behavior and to gain some independance from the pointers, each {\b AutoSegment} is associated with an unique identifier. {\b IDs} are now directly taken from the {\b Hurricane::Segment}. \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Source contact is always lesser than Target contact {\f2 (Xs,Ys) < (Xt,Yt)} . \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid When assembled through {\b AutoContactVTee} or {\b AutoContactHTee}, AutoSegments became (i.e. must be kept) aligneds. Among a set of aligned AutoSegments, we distinguish a representative trough which we can manipulate the whole set. This representative is called the {\i canonical} {\b AutoSegment} and is the one with the lowest {\f2 id} ). \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid When an aligned set contains at least one global, all the segments of the set are tagged {\b Katabatic::SegWeakGlobal}. This is especially useful on local ones to know if they are part of a much longer wire.\par Conversely, a set of aligned may contains only local segments and thus will not have the flag set. \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid To allow some optimization, the {\b Katabatic::SegNotAligned} tells if a segment is part of an aligned set. It is deduced from the type of both source and target contact: not on the parallel branch of a tee. \par} {\b The Ever Fragmenting Data Structure} \par All the transformations applied to the database, after it's initial building, can be reduced to making new doglegs (and layer changes). Another way to put it, is that no Tee is ever created after the initial stage. The consequence is that the segments are only fragmenting more and more (up to a certain limit). The aligneds sets are progessively broken apart as needed, and until there remains only one tee per set (the two segments on the aligned branch).\par} {\bkmkstart AAAAAAAAKK} {\bkmkend AAAAAAAAKK} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Operations on AutoSegments \par} {\tc\tcl2 \v Operations on AutoSegments} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Slackening.} Constraints transmited through either source or target {\b AutoContact} are too tight (tighter than the {\b GCell}), by adding straps in the perpandicular direction, the full slack of the segment is restored. \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Layer Change.} One or two layers above or below the current layer. One up/down may means into the perpandicular routing direction. \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Dogleg Creation.} Mean breaking the segment in two. This operation is used to slacken the constraints on a segment or restore connexity on source/target contact after a layer change. The new segment is always created on the source. \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Reduction/Raising.} When a segment is a short dogleg, no greater than one picth, it can use the layer of the perpandiculars. \par} \par} {\bkmkstart AAAAAAAAKL} {\bkmkend AAAAAAAAKL} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Invalidate on AutoSegments \par} {\tc\tcl2 \v Invalidate on AutoSegments} The simple invalidation of an {\b AutoSegment} {\b do not} invalidate it's source & target contact.\par An axis position change or a layer change both invalidate the {\b AutoSegment} {\b and} it's source & target contacts.\par For the complete invalidation/revalidation mechanism see {\b Session Algorithm}.\par} {\bkmkstart AAAAAAAAKM} {\bkmkend AAAAAAAAKM} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Main Attributes of AutoSegments \par} {\tc\tcl2 \v Main Attributes of AutoSegments} {\b AutoSegment} retains all attributes from Segment. The Segment itself beeing accessible through the {\b base()} methods. { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid An unique {\f2 Id} (for determinism). \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The {\b GCell} from wich it starts from. It is the {\b GCell} of the source {\b AutoContact}. \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid A state, combination of flags from {\b Katabatic::AutoSegmentFlag}. \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid An interval for the optimal range of the {\b AutoSegment} axis. \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid An interval for user's defined constraint on the axis. \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The interval giving the complete length of the {\b AutoSegment}, that is, with all extentions cap taken into account. This interval is refered as the {\i span} . \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid A small counter, of the number of reduced neighbors (never exceed two). \par} \par} {\bkmkstart AAAAAAAAKN} {\bkmkend AAAAAAAAKN} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Implementation Details \par} {\tc\tcl2 \v Implementation Details} {\b AutoSegment} / {\b AutoHorizontal} & {\b AutoVertical} are kind of decorators of {\b Hurricane::Segment} (they do not scrictly respect the pattern).\par Canonical {\b AutoSegment} can should be considered as a kind of Composite.\par Thoses objects are created using a Factory method.\par} {\bkmkstart AAAAAAAAKO} {\bkmkend AAAAAAAAKO} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Methods Classification \par} {\tc\tcl2 \v Methods Classification} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\i Wrapper methods} on the underlying {\b Hurricane::Segment}. \par} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\i Atomic methods} on {\b AutoSegment}, that is, which applies exactly on the current {\b AutoSegment}. \par} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\i Canonical methods} that applies on the set of aligned AutoSegments. There are two kind of those, the methods part of the API, and the ones that make the link with the atomic methods. Those intermediate methods hide some cumbersome {\b AutoSegment} list parameters. { \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b AutoSegment::invalidate()} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b AutoSegment::computeOptimal()} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b AutoSegment::setAxis()} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b AutoSegment::toConstraintAxis()} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b AutoSegment::toOptimalAxis()} \par} \par} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\i Uniform access} , to simplify the managment of {\b AutoHorizontal} and {\b AutoVertical} through {\b AutoSegment}, a set of uniformized methods is introduced. For instance, to avoid to check the dynamic type to choose to call {\b getSourceX()} or {\b getSourceY()}, we may call {\b getSourceU()}. Uniform methods are named by replacing {\f2 X/Y} with {\f2 U} . { \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b AutoSegment::getSourceU()} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b AutoSegment::getTargetU()} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b AutoSegment::getDuSource()} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b AutoSegment::getDuTarget()} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b AutoSegment::getSpanU()} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b AutoSegment::setDuSource()} \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b AutoSegment::setDuTarget()} \par} \par} \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 AutoSegment\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:AutoSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} ({\b Segment} * {\i segment}){\f2 [protected]}}} \par {\bkmkstart AAAAAAAAKP} {\bkmkend AAAAAAAAKP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoSegment} constructor. It is not directly accessible, instead use one flavor of the {\b AutoSegment::create()}. \par }{ References GCell::getBoundingBox(), AutoContact::getGCell(), Segment::getSource(), Segment::getTarget(), Box::getXMax(), Box::getYMax(), AutoContact::invalidate(), AutoSegment::isGlobal(), AutoSegment::isHorizontal(), Session::lookup(), Katabatic::SegCreated, Katabatic::SegHorizontal, AutoSegment::setFlags(), and AutoSegment::setOptimalMax().}\par } {\xe \v ~AutoSegment\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:~AutoSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b ~{\b AutoSegment} (){\f2 [protected]}, {\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAKQ} {\bkmkend AAAAAAAAKQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b AutoSegment} destructor. It is not directly accessible, instead use one flavor of the {\b AutoSegment::create()}. \par }{ References AutoSegment::isGlobal().}\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\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * create ({\b AutoContact} * {\i source}, {\b AutoContact} * {\i target}, {\b Segment} * {\i hurricaneSegment}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAKR} {\bkmkend AAAAAAAAKR} { \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 source} \cell }{The source {\b AutoContact}. \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 target} \cell }{The target {\b AutoContact}. \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 hurricaneSegment} \cell }{The {\b Hurricane::Segment} to decorate. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The AutoHorizontal/AutoVertical decorator segment.\par }Factory method to create {\b AutoHorizontal} or {\b AutoVertical}. It is important to note that this function may modify the underlying {\b Hurricane::Segment}.{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Layer is set to the default (bottom) routing Layers.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Source & target anchor of {\f2 hurricaneSegment} are set on {\f2 source} and {\f2 target} . If the {\f2 hurricaneSegment} is already anchored and {\f2 source} or {\f2 target} are not the one decorating the anchors, an exception is thrown. \par} }{ References AutoSegment::_postCreate(), Hook::attach(), Hook::detach(), AutoContact::getBodyHook(), Session::getKatabatic(), Component::getLayer(), Session::getRoutingLayer(), Segment::getSource(), Segment::getSourceHook(), Segment::getTarget(), Segment::getTargetHook(), DbU::getValueString(), Segment::getWidth(), AutoContact::getX(), AutoContact::getY(), AutoContact::isFixed(), KatabaticEngine::isGMetal(), Session::lookup(), Segment::setLayer(), Segment::setWidth(), Vertical::setX(), and Horizontal::setY().}\par { Referenced by GCellTopology::_do_1G_1M3(), GCellTopology::_do_1G_xM1(), GCellTopology::_do_xG(), GCellTopology::_do_xG_1M1_1M2(), GCellTopology::_do_xG_1Pad(), GCellTopology::_do_xG_xM1_xM3(), GCellTopology::_do_xG_xM2(), GCellTopology::_do_xG_xM3(), AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoSegment::create(), GCellTopology::doRp_Access(), GCellTopology::doRp_AutoContacts(), GCellTopology::doRp_StairCaseH(), GCellTopology::doRp_StairCaseV(), and anonymous_namespace\{LoadGrByNet.cpp\}::singleGCell().}\par } {\xe \v create\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * create ({\b AutoContact} * {\i source}, {\b AutoContact} * {\i target}, unsigned int {\i dir}, size_t {\i depth} = {\f2 RoutingGauge::nlayerdepth}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAKS} {\bkmkend AAAAAAAAKS} { \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 source} \cell }{The source {\b AutoContact}. \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 target} \cell }{The target {\b AutoContact}. \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 dir} \cell }{Specify the segment direction. \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, given by it's depth in the RoutingGauge. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The AutoHorizontal/AutoVertical.\par }Factory method to create {\b AutoHorizontal} or {\b AutoVertical}. {\f2 flags} indicate the direction (KbHorizontal or KbVertical). The underlying Hurricane segment is also created. \par }{ References AutoContact::base(), Horizontal::create(), Vertical::create(), AutoSegment::create(), Session::getRoutingLayer(), AutoContact::getX(), AutoContact::getY(), AutoContact::isFixed(), Katabatic::KbHorizontal, and Katabatic::KbVertical.}\par } {\xe \v base\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:base} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Segment} * base () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAIO} {\bkmkend AAAAAAAAIO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the decorated {\b Hurricane::Segment} (const flavor). \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKT \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIN \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoSegment::getAxis(), AutoSegment::getBoundingBox(), AutoSegment::getCanonical(), AutoSegment::getCell(), AutoSegment::getLayer(), AutoSegment::getLength(), AutoSegment::getNet(), AutoSegment::getOppositeAnchor(), AutoSegment::getSource(), AutoSegment::getSourceHook(), AutoSegment::getSourceX(), AutoSegment::getSourceY(), AutoSegment::getTarget(), AutoSegment::getTargetHook(), AutoSegment::getTargetX(), AutoSegment::getTargetY(), AutoSegment::getWidth(), AutoSegment::getX(), AutoSegment::getY(), AutoSegment::invert(), and AutoSegment::setLayer().}\par } {\xe \v base\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:base} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Segment} * base (){\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAIM} {\bkmkend AAAAAAAAIM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the decorated {\b Hurricane::Segment}. \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKU \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIL \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getHorizontal\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getHorizontal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Horizontal} * getHorizontal (){\f2 [inline]}, {\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAIQ} {\bkmkend AAAAAAAAIQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} If the decorated segment is a {\b Hurricane::Horizontal}, return it. {\f2 NULL} otherwise. \par }{ Reimplemented in {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIP \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getVertical\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getVertical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Vertical} * getVertical (){\f2 [inline]}, {\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAKV} {\bkmkend AAAAAAAAKV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} If the decorated segment is a {\b Hurricane::Vertical}, return it. {\f2 NULL} otherwise. \par }{ Reimplemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKW \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getCell\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Cell} * getCell () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAKX} {\bkmkend AAAAAAAAKX} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getCell()}. \par }}{ References AutoSegment::base(), and Entity::getCell().}\par } {\xe \v getNet\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getNet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Net} * getNet () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAKY} {\bkmkend AAAAAAAAKY} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getNet()}. \par }}{ References AutoSegment::base(), and Component::getNet().}\par { Referenced by AutoHorizontal::_makeDogleg(), and AutoSegment::_postCreate().}\par } {\xe \v getLayer\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Layer} * getLayer () const{\f2 [inline]}}} \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getLayer()}. \par }}{ References AutoSegment::base(), and Component::getLayer().}\par { Referenced by AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoHorizontal::canMoveULeft(), AutoVertical::canMoveULeft(), AutoContact::canMoveUp(), AutoSegment::canMoveUp(), AutoHorizontal::canMoveURight(), AutoVertical::canMoveURight(), AutoSegment::canPivotDown(), AutoSegment::canPivotUp(), AutoHorizontal::checkPositions(), AutoVertical::checkPositions(), AutoSegment::makeDogleg(), AutoSegment::revalidate(), AutoHorizontal::updatePositions(), AutoVertical::updatePositions(), AutoContactTurn::updateTopology(), and AutoContactTerminal::updateTopology().}\par } {\xe \v getBoundingBox\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getBoundingBox} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b BoundingBox * getBoundingBox () 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 \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getBoundingBox()}. \par }}{ References AutoSegment::base(), and Component::getBoundingBox().}\par } {\xe \v getSourceHook\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getSourceHook} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Hook} * getSourceHook (){\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 \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getSourceHook()}. \par }}{ References AutoSegment::base(), and Segment::getSourceHook().}\par } {\xe \v getTargetHook\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getTargetHook} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Hook} * getTargetHook (){\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 \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getTargetHook()}. \par }}{ References AutoSegment::base(), and Segment::getTargetHook().}\par } {\xe \v getSource\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getSource} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Contact} * getSource () const{\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 \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getSource()}. \par }}{ References AutoSegment::base(), and Segment::getSource().}\par { Referenced by AutoSegment::getAutoSource(), and AutoSegment::getOnSourceContact().}\par } {\xe \v getTarget\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getTarget} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Contact} * getTarget () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALE} {\bkmkend AAAAAAAALE} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getTarget()}. \par }}{ References AutoSegment::base(), and Segment::getTarget().}\par { Referenced by AutoSegment::getAutoTarget(), and AutoSegment::getOnTargetContact().}\par } {\xe \v getOppositeAnchor\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getOppositeAnchor} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Component} * getOppositeAnchor ({\b Component} * {\i anchor}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALF} {\bkmkend AAAAAAAALF} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getNet()}. \par }}{ References AutoSegment::base(), and Segment::getOppositeAnchor().}\par { Referenced by AutoSegment::getOppositeAnchor().}\par } {\xe \v getAnchors\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getAnchors} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Components} getAnchors () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALG} {\bkmkend AAAAAAAALG} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getAnchors()}. \par }}} {\xe \v getX\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getX} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getX () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAALH} {\bkmkend AAAAAAAALH} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getX()}. \par }}{ References AutoSegment::base(), and Component::getX().}\par { Referenced by AutoVertical::_makeDogleg(), and AutoContactTerminal::updateGeometry().}\par } {\xe \v getY\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getY} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getY () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAALI} {\bkmkend AAAAAAAALI} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getY()}. \par }}{ References AutoSegment::base(), and Component::getY().}\par { Referenced by AutoHorizontal::_makeDogleg(), and AutoContactTerminal::updateGeometry().}\par } {\xe \v getWidth\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getWidth} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getWidth () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALJ} {\bkmkend AAAAAAAALJ} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getWidth()}. \par }}{ References AutoSegment::base(), and Segment::getWidth().}\par } {\xe \v getLength\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getLength} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getLength () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALK} {\bkmkend AAAAAAAALK} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getLength()}. \par }}{ References AutoSegment::base(), and Segment::getLength().}\par { Referenced by AutoSegment::canReduce(), and AutoSegment::mustRaise().}\par } {\xe \v getSourcePosition\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getSourcePosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getSourcePosition () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALL} {\bkmkend AAAAAAAALL} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getSourcePosition()}. \par }}{ Referenced by AutoSegment::getCanonical().}\par } {\xe \v getTargetPosition\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getTargetPosition} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getTargetPosition () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALM} {\bkmkend AAAAAAAALM} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getTargetPosition()}. \par }}{ Referenced by AutoSegment::getCanonical().}\par } {\xe \v getSourceX\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getSourceX} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getSourceX () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALN} {\bkmkend AAAAAAAALN} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getSourceX()}. \par }}{ References AutoSegment::base(), and Segment::getSourceX().}\par { Referenced by AutoHorizontal::_makeDogleg().}\par } {\xe \v getSourceY\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getSourceY} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getSourceY () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALO} {\bkmkend AAAAAAAALO} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getSourceY()}. \par }}{ References AutoSegment::base(), and Segment::getSourceY().}\par { Referenced by AutoVertical::_makeDogleg().}\par } {\xe \v getTargetX\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getTargetX} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getTargetX () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALP} {\bkmkend AAAAAAAALP} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getTargetX()}. \par }}{ References AutoSegment::base(), and Segment::getTargetX().}\par { Referenced by AutoHorizontal::_makeDogleg().}\par } {\xe \v getTargetY\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getTargetY} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getTargetY () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALQ} {\bkmkend AAAAAAAALQ} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::getTargetY()}. \par }}{ References AutoSegment::base(), and Segment::getTargetY().}\par { Referenced by AutoVertical::_makeDogleg().}\par } {\xe \v invert\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:invert} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} invert (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAALR} {\bkmkend AAAAAAAALR} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::invert()}. \par }}{ References AutoSegment::base(), and Segment::invert().}\par } {\xe \v setLayer\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:setLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setLayer (const {\b Layer} * {\i layer}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAALS} {\bkmkend AAAAAAAALS} { \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 See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Segment::setLayer()}. \par }}{ References AutoSegment::base(), and Segment::setLayer().}\par { Referenced by AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), and AutoSegment::reduceDoglegLayer().}\par } {\xe \v isHorizontal\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isHorizontal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isHorizontal () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALT} {\bkmkend AAAAAAAALT} { \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 Hurricane::Segment} is Horizontal. \par }{ References Katabatic::SegHorizontal.}\par { Referenced by AutoSegment::AutoSegment(), AutoSegment::computeOptimal(), AutoSegment::getAxis(), AutoSegment::getExtremity(), AutoSegment::getOrigin(), AutoContactTerminal::getSegment(), AutoSegment::makeDogleg(), AutoSegment::setAxis(), AutoSegment::toConstraintAxis(), and AutoContactTerminal::updateGeometry().}\par } {\xe \v isVertical\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isVertical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isVertical () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAALU} {\bkmkend AAAAAAAALU} { \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 Hurricane::Segment} is Vertical. \par }{ References Katabatic::SegHorizontal.}\par { Referenced by AutoSegment::computeOptimal(), and AutoContactTerminal::getSegment().}\par } {\xe \v isGlobal\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isGlobal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isGlobal () 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 the segment is global (span over more than one {\b GCell}). \par }{ References Katabatic::SegGlobal.}\par { Referenced by AutoSegment::AutoSegment(), AutoHorizontal::canMoveULeft(), AutoVertical::canMoveULeft(), AutoHorizontal::canMoveURight(), AutoVertical::canMoveURight(), AutoSegment::canonize(), AutoSegment::canReduce(), AutoSegment::canSlacken(), AutoContact::showTopologyError(), and AutoSegment::~AutoSegment().}\par } {\xe \v isLocal\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isLocal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isLocal () 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:} {\b true} if the segment is local (fully enclosed in one {\b GCell}). \par }{ References Katabatic::SegGlobal.}\par { Referenced by AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoSegment::canMoveUp(), AutoSegment::canPivotDown(), AutoSegment::canPivotUp(), GCell::checkEdgeSaturation(), AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), and AutoVertical::moveURight().}\par } {\xe \v isFixed\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isFixed} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isFixed () 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:} {\b true} if segment must not be moved by the router. \par }{ References Katabatic::SegFixed.}\par { Referenced by AutoSegment::canMoveUp(), AutoSegment::canPivotDown(), AutoSegment::canPivotUp(), and AutoSegment::makeDogleg().}\par } {\xe \v isBipoint\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isBipoint} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isBipoint () 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:} {\b true} if the segment straigh join two terminals. \par }{ References Katabatic::SegBipoint.}\par } {\xe \v isWeakTerminal\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isWeakTerminal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isWeakTerminal () 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:} {\b true} if segment is indirectly connected to a terminal. \par }{ References Katabatic::SegWeakTerminal.}\par { Referenced by AutoHorizontal::_makeDogleg(), and AutoVertical::_makeDogleg().}\par } {\xe \v isStrongTerminal\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isStrongTerminal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isStrongTerminal (unsigned int {\i flags} = {\f2 0}) const}} \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:} {\b true} if segment is directly connected to a terminal. \par }{ References AutoSegment::getAligneds(), Katabatic::KbPropagate, and Katabatic::SegStrongTerminal.}\par { Referenced by AutoSegment::canMoveUp(), AutoSegment::canPivotDown(), and AutoSegment::canPivotUp().}\par } {\xe \v isLayerChange\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isLayerChange} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isLayerChange () const{\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:} {\b true} if segment is a strap used only to connect between two different metal layers on the way up or down. \par }{ References Katabatic::SegLayerChange.}\par { Referenced by AutoSegment::canMoveUp(), AutoSegment::canPivotDown(), and AutoSegment::canPivotUp().}\par } {\xe \v isSpinTop\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isSpinTop} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isSpinTop () const{\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:} {\b true} if segment is connected to turns and both perpandiculars segments are in the {\i top} layer (candidate for reduction). \par }{ Referenced by AutoSegment::canReduce(), AutoSegment::isSpinTopOrBottom(), AutoSegment::mustRaise(), and AutoSegment::reduceDoglegLayer().}\par } {\xe \v isSpinBottom\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isSpinBottom} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isSpinBottom () const{\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:} {\b true} if segment is connected to turns and both perpandiculars segments are in the {\i bottom} layer (candidate for reduction). \par }{ Referenced by AutoSegment::canReduce(), AutoSegment::isSpinTopOrBottom(), AutoSegment::mustRaise(), and AutoSegment::reduceDoglegLayer().}\par } {\xe \v isSpinTopOrBottom\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isSpinTopOrBottom} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isSpinTopOrBottom () const{\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:} {\b true} if segment is either {\i spin top} or {\i spin bottom} (candidate for reduction). \par }{ References AutoSegment::isSpinBottom(), and AutoSegment::isSpinTop().}\par { Referenced by AutoSegment::canReduce().}\par } {\xe \v isReduced\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isReduced} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isReduced () const{\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:} {\b true} if segment is actually in a reduced state: it's effective layer will be the one of it's perpandiculars. \par }{ References Katabatic::SegIsReduced.}\par { Referenced by AutoSegment::reduceDoglegLayer(), and AutoSegment::revalidate().}\par } {\xe \v isStrap\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isStrap} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isStrap () const{\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:} {\b true} if segment has been created from a slackening operation to restore the slack of another segment. \par }{ References Katabatic::SegStrap.}\par } {\xe \v isDogleg\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isDogleg () const{\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:} {\b true} if segment has been created as the perpandicular part of a dogleg. \par }{ References Katabatic::SegDogleg.}\par { Referenced by AutoSegment::toConstraintAxis().}\par } {\xe \v isInvalidated\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isInvalidated} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isInvalidated () const{\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:} {\b true} if segment has been moved or topologicaly altered. \par }{ References Katabatic::SegInvalidated.}\par { Referenced by AutoSegment::_invalidate(), AutoSegment::invalidate(), and AutoSegment::revalidate().}\par } {\xe \v isInvalidatedLayer\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isInvalidatedLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isInvalidatedLayer () const{\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:} {\b true} if segment has been changed of layer. Source and Target {\b AutoContact} may need to be altered. \par }{ References Katabatic::SegInvalidatedLayer.}\par { Referenced by AutoContactTurn::updateTopology().}\par } {\xe \v isCreated\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isCreated} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isCreated () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAMK} {\bkmkend AAAAAAAAMK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if segment has just been created and is not revalidated for the first time \par }{ References Katabatic::SegCreated.}\par { Referenced by AutoContactTerminal::updateGeometry().}\par } {\xe \v isCanonical\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isCanonical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isCanonical () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAML} {\bkmkend AAAAAAAAML} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if segment is the representant of an aligned set. \par }{ References Katabatic::SegCanonical.}\par { Referenced by AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoSegment::canonize(), AutoSegment::getCanonical(), AutoSegment::setAxis(), AutoSegment::toConstraintAxis(), and AutoSegment::toOptimalAxis().}\par } {\xe \v isUnsetAxis\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isUnsetAxis} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isUnsetAxis () const{\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 {\b Returns:} {\b true} if the segment axis has never been set. \par }{ References Katabatic::SegAxisSet.}\par } {\xe \v isSlackened\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:isSlackened} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isSlackened () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAMN} {\bkmkend AAAAAAAAMN} { \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 has already been slackened. \par }{ References Katabatic::SegSlackened.}\par { Referenced by AutoHorizontal::_makeDogleg(), and AutoVertical::_makeDogleg().}\par } {\xe \v _canSlacken\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:_canSlacken} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool _canSlacken () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAIG} {\bkmkend AAAAAAAAIG} { \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 can be slackened. That is, source or target constraints are less than three pitches. \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMO \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIF \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoSegment::canSlacken().}\par } {\xe \v canReduce\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:canReduce} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canReduce () const}} \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 the segment can be reduced. That is:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Source & target are {\b AutoContactTurn}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid It is either {\i spin top} or {\i spin bottom} , that is connecting perpandiculars both in the same layer.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Has a length less or equal one pitch in the perpandicular direction.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Neither of the perpandicular are also reduceds. \par} }{ References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoSegment::getLength(), AutoSegment::isGlobal(), AutoSegment::isSpinBottom(), AutoSegment::isSpinTop(), AutoSegment::isSpinTopOrBottom(), and AutoContact::isTurn().}\par { Referenced by AutoSegment::reduce().}\par } {\xe \v mustRaise\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:mustRaise} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool mustRaise () const}} \par {\bkmkstart AAAAAAAAMQ} {\bkmkend AAAAAAAAMQ} { \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 must {\i be} reduced. That is:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid It is in reduced state...\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid It is no longer {\i spin top} or {\i spin bottom} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid It's length exceed one pitch in the perpandicular direction. \par} }{ References AutoSegment::getLength(), AutoSegment::isSpinBottom(), AutoSegment::isSpinTop(), and Katabatic::SegIsReduced.}\par } {\xe \v canDogleg\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:canDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int canDogleg ({\b Interval} {\i interval})}} \par {\bkmkstart AAAAAAAAMR} {\bkmkend AAAAAAAAMR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} non-zero if the aligned set of segment can be broken {\i outside} {\f2 interval} . The returned value could be zero (failure) or {\b Katabatic::KbDoglegOnLeft} or {\b Katabatic::KbDoglegOnRight} menaing that the aligned set could be broken on the left of the {\f2 interval} (resp. right of it). \par }{ References Interval::contains(), AutoSegment::getAligneds(), AutoSegment::getSpanU(), Interval::getVMax(), Interval::getVMin(), Katabatic::KbDoglegOnLeft, and Katabatic::KbDoglegOnRight.}\par } {\xe \v canMoveULeft\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:canMoveULeft} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canMoveULeft (float {\i reserve} = {\f2 0.0}) const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAII} {\bkmkend AAAAAAAAII} { \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 {\b true} if the {\i global} segment can be moved on the left {\b GCell} (for a vertical) or down (for an horizontal). The move is accepted only if it do not change the amount of global wiring. Thus the following conditions:{ \par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The segment mustn't be on the leftmost {\b GCell} (obvious...).\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The segment must be global.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The source and target contacts must be AutoContactTurn(s).\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid At least one of the perpandicular must be global {\b and} connected through the {\i target} . That is, it's a global which extends toward left.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The {\b GCell} of maximum density on the left must remains below the current {\b GCell} of maximum density, with a margin of {\f2 reserve} (expressed in total saturation percentage). \par} }}{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMS \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIH \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v canMoveURight\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:canMoveURight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canMoveURight (float {\i reserve} = {\f2 0.0}) const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAIK} {\bkmkend AAAAAAAAIK} { \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 {\b true} if the {\i global} segment can be moved on the right {\b GCell} (for a vertical) or up (for an horizontal). The move is accepted only if it do not change the amount of global wiring. Thus the following conditions:{ \par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The segment mustn't be on the leftmost {\b GCell} (obvious...).\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The segment must be global.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The source and target contacts must be AutoContactTurn(s).\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid At least one of the perpandicular must be global {\b and} connected through the {\i source} . That is, it's a global which extends toward right.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The {\b GCell} of maximum density on the left must remains below the current {\b GCell} of maximum density, with a margin of {\f2 reserve} (expressed in total saturation percentage). \par} }}{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMT \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIJ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v canMoveUp\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:canMoveUp} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canMoveUp (float {\i reserve} = {\f2 0.0}, unsigned int {\i flags} = {\f2 0}) const}} \par {\bkmkstart AAAAAAAAMU} {\bkmkend AAAAAAAAMU} { \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 reserve} \cell }{Number of track that must remains free {\i after} the move. \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 }{Modificate the method behavior, see below. \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 segment can be moved up, that is to the next layer above in the same preferred routing direction. This method will check that in every {\b GCell} of the segment, at least {\f2 reserve} tracks are still avalaible {\i after} the segment has been moved up ({\f2 reserve} can be less than {\f2 1.0} ).\par }Possible (bitwise) value for {\f2 flags} :{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 KbAllowTerminal} : allow strong terminal to be moved up.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 KbAllowLocal} : allow local segments to be moved up.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 KbPropagate} : perform the check on the whole aligned set.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 KbWithPerpands} : also check the density on the perpandiculars begin & end {\b GCell}, there must be at least a {\f2 0.5} density reserve on them. \par} }{ References AutoSegment::getAligneds(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), Session::getConfiguration(), GCell::getFragmentation(), AutoSegment::getGCells(), GCell::getIndex(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), Session::getRoutingGauge(), AutoSegment::isFixed(), AutoSegment::isLayerChange(), AutoSegment::isLocal(), AutoSegment::isStrongTerminal(), Katabatic::KbPropagate, and Katabatic::KbWithPerpands.}\par } {\xe \v canPivotUp\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:canPivotUp} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canPivotUp (float {\i reserve} = {\f2 0.0}, unsigned int {\i flags} = {\f2 0}) const}} \par {\bkmkstart AAAAAAAAMV} {\bkmkend AAAAAAAAMV} { \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 reserve} \cell }{Number of track that must remains free {\i after} the move. \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 }{Modificate the method behavior, see below.\cell } {\row } } Checks of the segment can be {\i pivoted} up. The difference between {\f2 {\b canMoveUp()}} and {\f2 {\b canPivotUp()}} lies in the fact that no perpandicular segment needs to be altered if the current segment is moved up. For example an {\b M3} segment connected to only {\b M4} can be pivoted up (in {\b M5} ), but if connected to {\b M2} , it cannot.\par Possible (bitwise) value for {\f2 flags} :{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 KbPropagate} : perform the check on the whole aligned set.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 KbIgnoreContacts} : do not check the source & target layers to know if the segment can be pivoted up. \par} }{ References AutoSegment::getAligneds(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoSegment::getGCells(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), AutoContact::getMinDepth(), Session::getRoutingGauge(), AutoSegment::isFixed(), AutoSegment::isLayerChange(), AutoSegment::isLocal(), AutoSegment::isStrongTerminal(), and Katabatic::KbPropagate.}\par } {\xe \v canPivotDown\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:canPivotDown} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canPivotDown (float {\i reserve} = {\f2 0.0}, unsigned int {\i flags} = {\f2 0}) const}} \par {\bkmkstart AAAAAAAAMW} {\bkmkend AAAAAAAAMW} { \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 reserve} \cell }{Number of track that must remains free {\i after} the move. \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 }{Modificate the method behavior, see below.\cell } {\row } } Checks of the segment can be {\i pivoted} down. The difference between {\f2 canMoveDown()} and {\f2 {\b canPivotDown()}} lies in the fact that no perpandicular segment needs to be altered if the current segment is moved down.\par Possible (bitwise) value for {\f2 flags} :{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 KbPropagate} : perform the check on the whole aligned set. \par} }{ References AutoSegment::getAligneds(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoSegment::getGCells(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), AutoContact::getMaxDepth(), Session::getRoutingGauge(), AutoSegment::isFixed(), AutoSegment::isLayerChange(), AutoSegment::isLocal(), AutoSegment::isStrongTerminal(), and Katabatic::KbPropagate.}\par } {\xe \v canSlacken\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:canSlacken} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canSlacken (unsigned int {\i flags} = {\f2 0}) const}} \par {\bkmkstart AAAAAAAAMX} {\bkmkend AAAAAAAAMX} { \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 can be slackened. That is, source or target constraints are less than three pitches.\par If {\f2 flags} contains KbPropagate, look on the whole aligned set. \par }{ References AutoSegment::_canSlacken(), AutoSegment::getAligneds(), AutoSegment::isGlobal(), and Katabatic::KbPropagate.}\par } {\xe \v checkPositions\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:checkPositions} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool checkPositions () const{\f2 [pure virtual]}}} \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:} {\b true} if the relative positions of source & target are coherent. (source <= target). \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMY \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJT \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v checkConstraints\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:checkConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool checkConstraints () const{\f2 [pure virtual]}}} \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:} {\b true} if the constraint intervel is coherent (non-empty or punctual in the worst case). \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAMZ \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJV \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getId\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getId} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned long getId () const{\f2 [inline]}}} \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 {\b AutoSegment} unique identifier. \par }{ Referenced by AutoHorizontal::_preDestroy(), and AutoVertical::_preDestroy().}\par } {\xe \v getDirection\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getDirection} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDirection () const{\f2 [pure virtual]}}} \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:} {\b Katabatic::KbHorizontal} or {\b Katabatic::KbVertical} according to the decorated segment. \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAANB \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJH \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoSegment::getMinSpanU(), AutoSegment::getPerpandicularsBound(), and AutoSegment::makeDogleg().}\par } {\xe \v getGCell\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getGCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GCell} * getGCell () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAANC} {\bkmkend AAAAAAAANC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b GCell} into which the {\b AutoSegment} starts (the one of the source). \par }{ Referenced by AutoHorizontal::canMoveULeft(), AutoVertical::canMoveULeft(), AutoHorizontal::canMoveURight(), AutoVertical::canMoveURight(), AutoHorizontal::getGCells(), AutoVertical::getGCells(), AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), and AutoVertical::moveURight().}\par } {\xe \v getGCells\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getGCells} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getGCells (vector< {\b GCell} *> & {\i gcells}) const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAJK} {\bkmkend AAAAAAAAJK} { \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 gcells} \cell }{A vector that will be filled by all the GCells that the segment overlap. In increasing order, from source to target. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The vector's size. \par }}{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAND \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJJ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoSegment::canMoveUp(), AutoSegment::canPivotDown(), and AutoSegment::canPivotUp().}\par } {\xe \v getAutoSource\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getAutoSource} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoContact} * getAutoSource () const{\f2 [inline]}}} \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 source {\b AutoContact}. \par }{ References AutoSegment::getSource(), and Session::lookup().}\par { Referenced by AutoHorizontal::_canSlacken(), AutoVertical::_canSlacken(), AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoHorizontal::_postCreate(), AutoVertical::_postCreate(), AutoHorizontal::_preDestroy(), AutoVertical::_preDestroy(), AutoHorizontal::canMoveULeft(), AutoVertical::canMoveULeft(), AutoSegment::canMoveUp(), AutoHorizontal::canMoveURight(), AutoVertical::canMoveURight(), AutoSegment::canPivotDown(), AutoSegment::canPivotUp(), AutoSegment::canReduce(), AutoHorizontal::checkConstraints(), AutoVertical::checkConstraints(), AutoSegment::computeOptimal(), AutoSegment::computeTerminal(), AutoHorizontal::getConstraints(), AutoVertical::getConstraints(), AutoHorizontal::getGCells(), AutoVertical::getGCells(), AutoHorizontal::getSourceConstraints(), AutoVertical::getSourceConstraints(), AutoSegment::makeDogleg(), AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), AutoVertical::moveURight(), AutoSegment::raise(), AutoSegment::reduce(), AutoSegment::reduceDoglegLayer(), AutoSegment::revalidate(), and AutoSegment::toConstraintAxis().}\par } {\xe \v getAutoTarget\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getAutoTarget} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoContact} * getAutoTarget () const{\f2 [inline]}}} \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 target {\b AutoContact}. \par }{ References AutoSegment::getTarget(), and Session::lookup().}\par { Referenced by AutoHorizontal::_canSlacken(), AutoVertical::_canSlacken(), AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoHorizontal::_postCreate(), AutoVertical::_postCreate(), AutoHorizontal::_preDestroy(), AutoVertical::_preDestroy(), AutoHorizontal::canMoveULeft(), AutoVertical::canMoveULeft(), AutoSegment::canMoveUp(), AutoHorizontal::canMoveURight(), AutoVertical::canMoveURight(), AutoSegment::canPivotDown(), AutoSegment::canPivotUp(), AutoSegment::canReduce(), AutoHorizontal::checkConstraints(), AutoVertical::checkConstraints(), AutoSegment::computeOptimal(), AutoSegment::computeTerminal(), AutoHorizontal::getConstraints(), AutoVertical::getConstraints(), AutoHorizontal::getGCells(), AutoVertical::getGCells(), AutoHorizontal::getTargetConstraints(), AutoVertical::getTargetConstraints(), AutoSegment::makeDogleg(), AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), AutoVertical::moveURight(), AutoSegment::raise(), AutoSegment::reduce(), AutoSegment::reduceDoglegLayer(), and AutoSegment::revalidate().}\par } {\xe \v getOppositeAnchor\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getOppositeAnchor} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoContact} * getOppositeAnchor ({\b AutoContact} * {\i contact}) const}} \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 source or target {\b AutoContact} opposite to {\f2 contact} . \par }{ References AutoContact::base(), AutoSegment::getOppositeAnchor(), and Session::lookup().}\par } {\xe \v getPerpandicularsBound\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getPerpandicularsBound} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getPerpandicularsBound (set< {\b AutoSegment} *> & {\i bounds})}} \par {\bkmkstart AAAAAAAANH} {\bkmkend AAAAAAAANH} { \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 bounds} \cell }{A vector that will be filled by all the AutoSegments perpandicular to this one that induce a constraint. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The vector's size. \par }}{ References AutoSegment::getDirection(), Component::getSlaveComponents(), Collection< Type >::getSubSet(), and Session::lookup().}\par } {\xe \v getParent\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getParent} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getParent () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAANI} {\bkmkend AAAAAAAANI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} If this segment has been created by a dogleg operation, the parent is the one from which we fragmented. \par }} {\xe \v getAxis\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getAxis} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getAxis () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAANJ} {\bkmkend AAAAAAAANJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} axis position. \par }{ References AutoSegment::base(), Component::getX(), Component::getY(), and AutoSegment::isHorizontal().}\par { Referenced by AutoSegment::computeOptimal(), AutoSegment::setAxis(), AutoSegment::toConstraintAxis(), and AutoSegment::toOptimalAxis().}\par } {\xe \v getSourceU\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getSourceU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getSourceU () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAIS} {\bkmkend AAAAAAAAIS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} {\i uniform} source position. (X for an horizontal and Y for a Vertical). \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAANK \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIR \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getTargetU\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getTargetU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getTargetU () const{\f2 [pure virtual]}}} \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 {\b AutoSegment} {\i uniform} target position. (X for an horizontal and Y for a Vertical). \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAANL \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIT \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getDuSource\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getDuSource} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getDuSource () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAIW} {\bkmkend AAAAAAAAIW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} {\i uniform} delta from source. (dX for an horizontal and dY for a Vertical). \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAANM \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIV \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getDuTarget\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getDuTarget} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getDuTarget () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAIY} {\bkmkend AAAAAAAAIY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} {\i uniform} delta from source. (dX for an horizontal and dY for a Vertical). \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAANN \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIX \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getOrigin\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getOrigin} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getOrigin () const{\f2 [inline]}}} \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 AutoSegment} {\i uniform} source (lowest) {\b GCell} coordinate. (dX for an horizontal and dY for a Vertical). \par }{ References GCell::getX(), GCell::getY(), and AutoSegment::isHorizontal().}\par { Referenced by AutoSegment::computeOptimal(), AutoSegment::getOptimalMax(), AutoSegment::getOptimalMin(), AutoSegment::setOptimalMax(), and AutoSegment::setOptimalMin().}\par } {\xe \v getExtremity\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getExtremity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getExtremity () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAANP} {\bkmkend AAAAAAAANP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} {\i uniform} target (greatest) {\b GCell} coordinate. (dX for an horizontal and dY for a Vertical). \par }{ References GCell::getXMax(), GCell::getYMax(), and AutoSegment::isHorizontal().}\par { Referenced by AutoSegment::computeOptimal().}\par } {\xe \v getSpanU\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getSpanU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getSpanU () const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAJA} {\bkmkend AAAAAAAAJA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} {\i uniform} occupying interval (on X for horizontal and on Y for vertical). \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAANQ \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIZ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoSegment::canDogleg(), and AutoSegment::makeDogleg().}\par } {\xe \v getMinSpanU\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getMinSpanU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getMinSpanU () const}} \par {\bkmkstart AAAAAAAANR} {\bkmkend AAAAAAAANR} { \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 {\b AutoSegment} {\i uniform} minimum occupying interval, computed from the constraints of all the supporting aligned AutoContacts. (on X for horizontal and on Y for vertical). \par }}{ References AutoSegment::getDirection(), Interval::getVMax(), and Interval::getVMin().}\par } {\xe \v getSourceConstraints\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getSourceConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getSourceConstraints (unsigned int {\i flags} = {\f2 0}) const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAJE} {\bkmkend AAAAAAAAJE} { \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 Interval into witch the source {\b AutoContact} can vary. By default all deduced constraints and user constraints are took into account. If {\f2 flags} contains {\f2 KbNativeConstraints} the constraint returned is only the enclosing {\b GCell}. \par }}{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAANS \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJD \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoSegment::makeDogleg().}\par } {\xe \v getTargetConstraints\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getTargetConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getTargetConstraints (unsigned int {\i flags} = {\f2 0}) const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAJG} {\bkmkend AAAAAAAAJG} { \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 Interval into witch the target {\b AutoContact} can vary. By default all deduced constraints and user constraints are took into account. If {\f2 flags} contains {\f2 KbNativeConstraints} the constraint returned is only the enclosing {\b GCell}. \par }}{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAANT \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJF \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoSegment::makeDogleg().}\par } {\xe \v getConstraints\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool getConstraints ({\b DbU::Unit} & {\i min}, {\b DbU::Unit} & {\i max}) const{\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAJC} {\bkmkend AAAAAAAAJC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} in {\f2 min} & {\f2 max} the allowed range for the segment axis. \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAANU \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJB \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoSegment::computeOptimal(), AutoSegment::getConstraints(), AutoSegment::getSlack(), AutoSegment::toConstraintAxis(), and AutoSegment::toOptimalAxis().}\par } {\xe \v getConstraints\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool getConstraints ({\b Interval} & {\i i}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAANV} {\bkmkend AAAAAAAANV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} in {\f2 i} the allowed range for the segment axis. \par }{ References AutoSegment::getConstraints(), Interval::getVMax(), and Interval::getVMin().}\par } {\xe \v getUserConstraints\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getUserConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Interval} & getUserConstraints () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAANW} {\bkmkend AAAAAAAANW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A reference to the additional constraints added to the axis of the segment. \par }{ Referenced by AutoHorizontal::getConstraints(), and AutoVertical::getConstraints().}\par } {\xe \v getSlack\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getSlack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getSlack () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAANX} {\bkmkend AAAAAAAANX} { \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 axis constraint interval. \par }{ References AutoSegment::getConstraints().}\par } {\xe \v getOptimalMin\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getOptimalMin} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getOptimalMin () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAANY} {\bkmkend AAAAAAAANY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} minimum axis optimal range. \par }{ References AutoSegment::getOrigin(), and DbU::lambda().}\par { Referenced by AutoSegment::getCost(), AutoSegment::getOptimal(), and AutoSegment::toOptimalAxis().}\par } {\xe \v getOptimalMax\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getOptimalMax} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getOptimalMax () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAANZ} {\bkmkend AAAAAAAANZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} maximum axis optimal range. \par }{ References AutoSegment::getOrigin(), and DbU::lambda().}\par { Referenced by AutoSegment::getCost(), AutoSegment::getOptimal(), and AutoSegment::toOptimalAxis().}\par } {\xe \v getOptimal\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getOptimal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} & getOptimal ({\b Interval} & {\i i}) const}} \par {\bkmkstart AAAAAAAAOA} {\bkmkend AAAAAAAAOA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Inialize {\f2 i} with the {\b AutoSegment} axis optimal range. \par }{ References AutoSegment::getOptimalMax(), AutoSegment::getOptimalMin(), Interval::getVMax(), and Interval::getVMin().}\par } {\xe \v getCost\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getCost} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getCost ({\b DbU::Unit} {\i axis}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAOB} {\bkmkend AAAAAAAAOB} { \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 cost if this segment is placed at {\f2 axis} . The cost is null if {\f2 axis} is inside the optimal interval and is the distance toward the nearest bound outside. \par }}{ References AutoSegment::getOptimalMax(), and AutoSegment::getOptimalMin().}\par } {\xe \v getCanonical\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getCanonical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getCanonical ({\b DbU::Unit} & {\i min}, {\b DbU::Unit} & {\i max}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAOC} {\bkmkend AAAAAAAAOC} { \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 canonical segment associated to this one. Additionnaly compute the source & target position of the whole set of aligned segments. \par }}{ References AutoSegment::base(), AutoSegment::getAligneds(), AutoSegment::getSourcePosition(), AutoSegment::getTargetPosition(), and AutoSegment::isCanonical().}\par { Referenced by AutoSegment::getCanonical().}\par } {\xe \v getCanonical\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getCanonical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getCanonical ({\b Interval} & {\i i}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAOD} {\bkmkend AAAAAAAAOD} { \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 canonical segment associated to this one. Additionnaly compute the source & target position of the whole set of aligned segments. \par }}{ References AutoSegment::getCanonical(), Interval::getVMax(), and Interval::getVMin().}\par } {\xe \v unsetFlags\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:unsetFlags} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void unsetFlags (unsigned int {\i flags}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAOE} {\bkmkend AAAAAAAAOE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Unsets {\f2 flags} given as arguments. \par }{ Referenced by AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoSegment::canonize(), AutoSegment::computeTerminal(), AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), AutoVertical::moveURight(), AutoSegment::revalidate(), AutoHorizontal::updateOrient(), and AutoVertical::updateOrient().}\par } {\xe \v setFlags\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:setFlags} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setFlags (unsigned int {\i flags}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAOF} {\bkmkend AAAAAAAAOF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets {\f2 flags} given as arguments. \par }{ Referenced by AutoSegment::_invalidate(), AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoHorizontal::_postCreate(), AutoVertical::_postCreate(), AutoSegment::AutoSegment(), AutoSegment::canonize(), AutoSegment::computeTerminal(), GCellTopology::doRp_AutoContacts(), AutoSegment::invalidate(), AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), AutoVertical::moveURight(), AutoSegment::revalidate(), AutoHorizontal::updateOrient(), and AutoVertical::updateOrient().}\par } {\xe \v setDuSource\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:setDuSource} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setDuSource ({\b DbU::Unit} {\i du}){\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAJM} {\bkmkend AAAAAAAAJM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the {\i uniform} {\f2 dU} from source anchor (dX for Horizontal, dY for Vertical). \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOG \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJL \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v setDuTarget\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:setDuTarget} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setDuTarget ({\b DbU::Unit} {\i du}){\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAJO} {\bkmkend AAAAAAAAJO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the {\i uniform} {\f2 dU} from target anchor (dX for Horizontal, dY for Vertical). \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOH \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJN \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v computeTerminal\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:computeTerminal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void computeTerminal ()}} \par {\bkmkstart AAAAAAAAOI} {\bkmkend AAAAAAAAOI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Recompute the terminal status of an {\b AutoSegment}. Initially, a segment which source or target is a terminal is flagged as SegStrongTerminal. After a topological modification, if the segment is no longer directly attached to a terminal, the status is progessively weakened. Once it reaches the weakest level, it stays on it so the algorithm can work out which segments is a start to a path toward a terminal.\par Status from stronger to weaker:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Katabatic::SegStrongTerminal}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Katabatic::SegWeakTerminal1}\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Katabatic::SegWeakTerminal2}\par} {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: The weakening is poorly done. After making a dogleg we do not\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid know which of the segment must be weakened if not directly attached on a terminal. We must examinate source & target. \par }}{ References AutoSegment::_getFlags(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), Katabatic::SegWeakTerminal, Katabatic::SegWeakTerminal1, Katabatic::SegWeakTerminal2, AutoSegment::setFlags(), and AutoSegment::unsetFlags().}\par } {\xe \v updateOrient\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:updateOrient} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateOrient (){\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAJQ} {\bkmkend AAAAAAAAJQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Ensure that source is lower than target. Swap them if needed. Swap never occurs on global segment because their source and target anchors are from different {\b GCell}, which are already ordered. \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOJ \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJP \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoSegment::_postCreate(), and AutoSegment::revalidate().}\par } {\xe \v updatePositions\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:updatePositions} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updatePositions (){\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAJS} {\bkmkend AAAAAAAAJS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Update the segment begenning and ending positions. The positions takes into account the extension caps and reflect the real space used by the segment under it's long axis. \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOK \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJR \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoSegment::_postCreate(), and AutoSegment::revalidate().}\par } {\xe \v mergeUserConstraints\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:mergeUserConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void mergeUserConstraints (const {\b Interval} & {\i constraints})}} \par {\bkmkstart AAAAAAAAOL} {\bkmkend AAAAAAAAOL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Constraints applies on the valid axis interval. Merge in {\f2 constraints} with the user's constraints. The resulting constraints is the intersection of the former user's contraints and the one given as argument. \par }{ References Interval::intersection().}\par } {\xe \v resetUserConstraints\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:resetUserConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void resetUserConstraints (){\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 Constraints applies on the valid axis interval. Suppress all user's constraints. \par }} {\xe \v setOptimalMin\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:setOptimalMin} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setOptimalMin ({\b DbU::Unit} {\i min}){\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 Sets the lower bound of the optimal axis interval. \par }{ References DbU::getLambda(), and AutoSegment::getOrigin().}\par { Referenced by AutoSegment::computeOptimal().}\par } {\xe \v setOptimalMax\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:setOptimalMax} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setOptimalMax ({\b DbU::Unit} {\i max}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAOO} {\bkmkend AAAAAAAAOO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets the lower bound of the optimal axis interval. \par }{ References DbU::getLambda(), and AutoSegment::getOrigin().}\par { Referenced by AutoSegment::AutoSegment(), and AutoSegment::computeOptimal().}\par } {\xe \v revalidate\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:revalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} revalidate ()}} \par {\bkmkstart AAAAAAAAOP} {\bkmkend AAAAAAAAOP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Mark this segment as valid (unset the Invalidated flag) and update positions. Unlike {\b AutoSegment::invalidate()}, it's an atomic method. \par }{ References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getLayer(), AutoSegment::getLayer(), AutoContact::getPerpandicular(), Layer::getTop(), AutoSegment::isInvalidated(), AutoSegment::isReduced(), AutoContact::isTurn(), Observable::notify(), Katabatic::SegCreated, Katabatic::SegInvalidated, Katabatic::SegInvalidatedLayer, Katabatic::SegSourceBottom, Katabatic::SegSourceTop, Katabatic::SegTargetBottom, Katabatic::SegTargetTop, AutoSegment::setFlags(), AutoSegment::unsetFlags(), AutoSegment::updateOrient(), and AutoSegment::updatePositions().}\par } {\xe \v makeDogleg\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * makeDogleg ({\b AutoContact} * {\i from})}} \par {\bkmkstart AAAAAAAAOQ} {\bkmkend AAAAAAAAOQ} { \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 from} \cell }{The {\b AutoContact} {\i from} which we want to make a dogleg.\cell } {\row } } This method is dedicated for the restauration of topology connexity on AutoContcact after a layer change on one of their connected {\b AutoSegment}.\par It perform three operations:{ \par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 1.\tab Create a dogleg on the {\b AutoSegment} (using the normal {\b GCell} variant).\par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 2.\tab Adjust the layers of the dogleg according whether we are going {\i up} or {\i down} from the {\b AutoContact} {\f2 from} to the segment.\par \pard\plain \s91\fi-360\li720\widctlpar\fs20\cgrid 3.\tab Returns the new {\b AutoSegment} connected to {\f2 from} (it may be the same as before, {\b if} the {\b AutoContact} is the source of the segment). \par} }{ References Layer::contains(), AutoSegment::getAutoSource(), RoutingGauge::getContactLayer(), Session::getDoglegs(), AutoContact::getGCell(), AutoContact::getLayer(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoContact::getX(), AutoContact::getY(), and AutoSegment::isHorizontal().}\par { Referenced by AutoContactTurn::updateTopology(), and AutoContactTerminal::updateTopology().}\par } {\xe \v makeDogleg\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int makeDogleg ({\b Interval} {\i interval}, unsigned int {\i flags} = {\f2 KbNoFlags})}} \par {\bkmkstart AAAAAAAAOR} {\bkmkend AAAAAAAAOR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Make a dogleg {\i in a set of aligned segments} , thus the dogleg may not be created on {\f2 this} segment but in one which span intersect {\f2 interval} .\par {\b Returns:} A set of flags telling if the break has occured on the left candidate ({\b Katabatic::KbDoglegOnLeft}) or right ({\b Katabatic::KbDoglegOnRight}). it is combined with the flag telling if the above or below layer was used for the dogleg. In case of failure, zero is returned.\par Break the set of aligned segments so the break point is {\i outside} {\f2 interval} . The break point so can occurs on the {\i left} of the interval ({\b Katabatic::KbDoglegOnLeft}) or on the {\i right} of the interval ({\b Katabatic::KbDoglegOnRight}). When the set of aligned segments fully enclose {\f2 interval} , a choice has to be made between the left and right candidate. The rules are as follow:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid A {\i left} candidate include the {\i min} of the interval into it's span.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid A {\i right} candidate include the {\i max} of the interval into it's span.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid In certain topologies, there can be more than left or right candidates (more than one segment of the set intersect the bounds of the interval). Thoses candidates are ecludeds.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid If the two candidates are avalaibles, we choose the one with the greated {\i native} constraints.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid In case of strict equality, the left candidate is choosen.\par} \par }{ References AutoSegment::_makeDogleg(), Interval::contains(), AutoSegment::getAligneds(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoSegment::getDirection(), Session::getDoglegs(), AutoContact::getGCell(), GCell::getRight(), GCell::getSide(), Interval::getSize(), AutoSegment::getSourceConstraints(), AutoSegment::getSpanU(), AutoSegment::getTargetConstraints(), GCell::getUp(), DbU::getValueString(), Interval::getVMax(), Interval::getVMin(), Katabatic::KbDoglegOnLeft, Katabatic::KbDoglegOnRight, Katabatic::KbHorizontal, and Katabatic::KbNativeConstraints.}\par } {\xe \v makeDogleg\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int makeDogleg ({\b GCell} * {\i doglegGCell}, unsigned int {\i flags} = {\f2 KbNoFlags})}} \par {\bkmkstart AAAAAAAAOS} {\bkmkend AAAAAAAAOS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Make a dogleg {\i in a set of aligned segments} , thus the dogleg may not be created on {\f2 this} segment but in the one which is under {\f2 doglegGCell} .\par {\b Returns:} A flag telling if the above or below layer was used for the perpandicular segment ({\b Katabatic::KbUseAboveLayer} or {\b Katabatic::KbUseBelowLayer}). \par }{ References AutoSegment::_makeDogleg(), Katabatic::EngineGlobalLoaded, AutoSegment::getAligneds(), AutoSegment::getDirection(), Session::getKatabatic(), GCell::getSide(), AutoSegment::getSpanU(), Interval::intersect(), and AutoSegment::isFixed().}\par } {\xe \v _makeDogleg\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:_makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int _makeDogleg ({\b GCell} * {\i doglegGCell}, unsigned int {\i flags}){\f2 [pure virtual]}}} \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 This method is the workhorse for the various dogleg and topology restauration methods.} It is the atomic method that actually make the dogleg on {\b this} segment.\par {\b Returns:} {\b Katabatic::KbUseAboveLayer} if the dogleg is using the {\i above} layer ({\b Katabatic::KbUseBelowLayer} for the below layer).\par Break the current segment in two (a.k.a. making a dogleg).{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The segment is broken inside {\f2 doglegGCell} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Two new segments are createds, one perpandicular and one parallel.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The original segment is always kept attached to the {\i source} . (the new parallel fragment is attached to the {\i target} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The perpandicular segment is in the layer {\i above} by default. If we are already on the topmost routing layer, the {\i below} layer is used.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid If the segment pass through the breaking {\b GCell}, it's axis is set into the center. If the segment is local, the axis is the middle of the segment.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The Local/Global kind of the original segment is updated. The local/global status is computed by the constructor of the {\b AutoSegment} for the perpandicular and the new parallel.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The terminal state is updated. If the segment is a strong terminal the part that is no longer directly connected to the terminal is demoted to {\b Katabatic::SegWeakTerminal1}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The perpandicular is obviously a canonical. If the broken segment is canonical, the original {\b is} left canonical and only the new parallel is re-canonized. Otherwise, we re-canonise both sets of aligned segments (the one on the source and the one on the target).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The three segments are added to the session dogleg stack.\par} After this method call the net topology is guarantee to be valid.\par \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOT \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJX \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { Referenced by AutoSegment::makeDogleg().}\par } {\xe \v moveULeft\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:moveULeft} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool moveULeft (){\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAKA} {\bkmkend AAAAAAAAKA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b This function do not manage an aligned set. It applies on {\f2 this} segment only.} \par Displace an Horizontal or Vertical segment to the {\b GCell} below (a.k.a. lower or inferior). Rules for displacement:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The segment must be connected at both end to a turn contact (we do not want to manage more complex cases for the time beeing).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid And, of course, the segment must not already by on the bottomost {\b GCell}...\par} The displacement take care of:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Managing the status of the various perpandiculars. The stretched one are made global if needed. The shrinked one made local, if needed.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The supporting {\b AutoContact} (source & target) are changed of {\b GCell}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid If the segment is global, the go-through GCells are updateds.\par} {\b Returns:} {\b true} if the move has succeeded.\par \par }{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOU \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJZ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v moveURight\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:moveURight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool moveURight (){\f2 [pure virtual]}}} \par {\bkmkstart AAAAAAAAKC} {\bkmkend AAAAAAAAKC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b This function do not manage an aligned set. It applies on {\f2 this} segment only.} \par Displace an Horizontal or Vertical segment to the {\b GCell} above (a.k.a. upper or superior). Rules for displacement:\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b AutoSegment::moveULeft()} for a complete description. \par }}{ Implemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAOV \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKB \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v slacken\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:slacken} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void slacken (unsigned int {\i flags})}} \par {\bkmkstart AAAAAAAAOW} {\bkmkend AAAAAAAAOW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid If the the {\b AutoSegment} is attached trough source and/or target to a terminal with too tight constraints, create a dogleg on overconstrained extremities.\par If {\f2 flags} contains {\b Katabatic::KbPropagate}, not only the current segment will be looked up, but the whole aligned set. Note that due to the structure of the database, there can be no more than two terminal connected segments on the whole set (one on each extremity).\par If {\f2 flags} contains {\b Katabatic::KbHalfSlacken}, the number of tracks under which the constraints are considered too tight is 3. Otherwise it is 10, that is a whole {\b GCell} side span. This flag should be used when a long set of global wire is overconstrained by only one of it's terminal, the other one offering sufficient slack (typically: 8).\par The segment will also be slackened from it's terminal if the difference between the current slack (resulting from all the constraints of the aligned set) and the native slack is less than 3 tracks. This case means that we are already near the native slack and it not sufficent enough a degree of freedom.\par The {\f2 {\b slacken()}} method reject the slackening of short locals as shown in figure {\b 2.a} . One way or another, we must connect to the terminal through {\b this} short local. If we cannot place it, breaking it in two other short local wouldn't help. In fact, it will only clutter more the {\b GCell} and make subsequent routing more difficult.\par The figures {\b 2.b} and {\b 2.c} shows the special case of slackening an horizontal from an {\i horizontal} terminal. In the original configuration, the slack on segment {\f2 id:10} is null, it's only choice is to be aligned with the terminal. If a slackening is requested, it generally implies that the horizontal track is blocked, and close to the terminal. Based on thoses hypothesis, when we slacken the segment {\f2 id:10} we impose that the {\i source} contact is {\b fixed} on the terminal itself. That is, the segment {\f2 id:10} will be reduced to a zero-length and we made an immediate turn (see {\b 2.c} ).\par \par }{ References AutoSegment::getAligneds(), and Katabatic::KbPropagate.}\par } {\xe \v reduceDoglegLayer\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:reduceDoglegLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool reduceDoglegLayer ()}} \par {\bkmkstart AAAAAAAAOX} {\bkmkend AAAAAAAAOX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform the actual layer change on a reduced segment. This method is to be called juste before destroying the {\b Katabatic} database.\par {\b Returns:} {\b true} if a change occurs. \par }{ References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), Session::getRoutingLayer(), AutoSegment::isReduced(), AutoSegment::isSpinBottom(), AutoSegment::isSpinTop(), AutoContact::setLayer(), and AutoSegment::setLayer().}\par } {\xe \v reduce\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:reduce} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool reduce ()}} \par {\bkmkstart AAAAAAAAOY} {\bkmkend AAAAAAAAOY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets the segment into reduced state.\par {\b Returns:} {\b true} if the operation did succeed. The layer will not be actually changed until the {\b Katabatic} database is saved/destroyed.\par A segment can be reduced if:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Source & target are {\b AutoContactTurn}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid It is either {\i spin top} or {\i spin bottom} , that is connecting perpandiculars both in the same layer.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Has a length less or equal one pitch in the perpandicular direction.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Neither of the perpandicular are also reduceds.\par} If segment {\f2 id:12} is reduced, it prevents {\f2 id:10} & {\f2 id:14} to be also reduced, by increasing the {\f2 _reduced} counter. In this example {\f2 id:14} is {\i spin top} and {\f2 id:12} is {\i spin bottom} .\par If we reduce two adjacent segments, one will go up while the other will go down (they will actually exchange their layers), it will thus defeat the purpose of creating a {\i same layer} dogleg. Besides, the turn contact between them will be changed into a pure metal one, generating a disconnexion...\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b AutoSegment::raise()} \par }}{ References AutoSegment::canReduce(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getPerpandicular(), and Katabatic::SegIsReduced.}\par } {\xe \v raise\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:raise} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool raise ()}} \par {\bkmkstart AAAAAAAAOZ} {\bkmkend AAAAAAAAOZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Get a segment out of {\i reduced} state.\par {\b Returns:} {\b true} if a state change did really take place.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b AutoSegment::reduce()} \par }}{ References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getPerpandicular(), and Katabatic::SegIsReduced.}\par } {\xe \v canonize\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:canonize} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * canonize (unsigned int {\i flags} = {\f2 KbNoFlags})}} \par {\bkmkstart AAAAAAAAPA} {\bkmkend AAAAAAAAPA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Find and set the canonical {\b AutoSegment} from a set of aligneds. For the time beeing we assumes that there is no merging process, so the Segments will only gets more and more fragmented. This implies that a segment can become canonical but it will never revert to normal status.\par The canonical {\b AutoSegment} is the one with the lowest {\f2 Id} . This a way of ensuring reproductible results. Note that the canonical one may not be the {\i geometrically} lowest one.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: Canonical aware method. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}{ References AutoSegment::getAligneds(), AutoSegment::isCanonical(), AutoSegment::isGlobal(), Katabatic::SegCanonical, Katabatic::SegNotAligned, Katabatic::SegWeakGlobal, AutoSegment::setFlags(), and AutoSegment::unsetFlags().}\par { Referenced by AutoHorizontal::_makeDogleg(), and AutoVertical::_makeDogleg().}\par } {\xe \v invalidate\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:invalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void invalidate (unsigned int {\i flags} = {\f2 {\b KbPropagate}}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAPB} {\bkmkend AAAAAAAAPB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Invalidate this {\b AutoSegment}, or if the {\b Katabatic::KbPropagate} flags is set, the whole set of aligned segments.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: If Katabatic is in the destruction stage, this function does nothing.\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: Canonical aware method. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}{ References AutoSegment::_invalidate(), AutoSegment::getAligneds(), AutoSegment::isInvalidated(), Katabatic::KbPropagate, Katabatic::KbSource, Katabatic::KbTarget, and AutoSegment::setFlags().}\par { Referenced by AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoSegment::_postCreate(), AutoContactVTee::updateTopology(), AutoContactTurn::updateTopology(), and AutoContactTerminal::updateTopology().}\par } {\xe \v computeOptimal\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:computeOptimal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} computeOptimal (set< {\b AutoSegment} *> & {\i processeds})}} \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 processeds} \cell }{A set of already processeds {\b AutoSegment}. Used by the caller function to avoid doing again the computation on an {\b AutoSegment} from an already proccessed aligned set. Compute the optimal axis interval for the aligned set.\cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: Canonical aware method. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}{ References AutoSegment::getAligneds(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoSegment::getAxis(), GCell::getBoundingBox(), GCell::getColumn(), AutoContact::getConstraintBox(), AutoSegment::getConstraints(), AutoSegment::getExtremity(), AutoSegment::getOrigin(), AutoSegment::getPerpandiculars(), GCell::getRow(), Box::getXMax(), Box::getXMin(), Box::getYMax(), Box::getYMin(), AutoSegment::isHorizontal(), AutoSegment::isVertical(), AutoSegment::setOptimalMax(), AutoSegment::setOptimalMin(), and DbU::toLambda().}\par } {\xe \v setAxis\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:setAxis} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setAxis ({\b DbU::Unit} {\i axis}, unsigned int {\i flags} = {\f2 KbNoFlags})}} \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 axis} \cell }{The new position of the 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 flags} \cell }{See KbRealignate.\cell } {\row } } Set the axis of an aligned set. This method does nothing if not called on the canonical {\b AutoSegment} of the set. If the new value of the axis is equal to the previous one, nothing is done (non-canonical {\b AutoSegment} are not looked after). To force an actual axis set, with invalidation of the whole {\b AutoSegment} set, set the KbRealignate flag.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: Canonical aware method. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}{ References AutoSegment::getAligneds(), AutoSegment::getAxis(), AutoSegment::isCanonical(), AutoSegment::isHorizontal(), Katabatic::KbRealignate, and DbU::toLambda().}\par { Referenced by AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), AutoVertical::moveURight(), AutoSegment::toConstraintAxis(), and AutoSegment::toOptimalAxis().}\par } {\xe \v toConstraintAxis\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:toConstraintAxis} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool toConstraintAxis (unsigned int {\i flags} = {\f2 {\b KbRealignate}})}} \par {\bkmkstart AAAAAAAAPE} {\bkmkend AAAAAAAAPE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid If the {\b AutoSegment} axis is outside the constraint interval, put it on nearest bound. This method is active only on canonical AutoSegments.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b true} if an actual axis change is made.\par }{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: Canonical aware method. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}{ References AutoSegment::getAutoSource(), AutoSegment::getAxis(), AutoSegment::getConstraints(), AutoContact::getGCell(), Interval::getHalfSize(), GCell::getSide(), AutoSegment::isCanonical(), AutoSegment::isDogleg(), AutoSegment::isHorizontal(), Katabatic::KbHorizontal, Katabatic::KbVertical, and AutoSegment::setAxis().}\par } {\xe \v toOptimalAxis\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:toOptimalAxis} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool toOptimalAxis (unsigned int {\i flags} = {\f2 {\b KbRealignate}})}} \par {\bkmkstart AAAAAAAAPF} {\bkmkend AAAAAAAAPF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid If the {\b AutoSegment} axis is outside the optimal interval, put it on nearest bound. This method is active only on canonical AutoSegments.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b true} if an actual axis change is made.\par }{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: Canonical aware method. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}{ References AutoSegment::getAxis(), AutoSegment::getConstraints(), AutoSegment::getOptimalMax(), AutoSegment::getOptimalMin(), AutoSegment::isCanonical(), Katabatic::KbRealignate, and AutoSegment::setAxis().}\par } {\xe \v getOnSourceContact\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getOnSourceContact} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments} getOnSourceContact (unsigned int {\i direction})}} \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 Collection of {\b AutoSegment} in {\f2 direction} that are on this segment source contact. \par }{ References AutoSegment::getSource(), and Collection< Type >::getSubSet().}\par } {\xe \v getOnTargetContact\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getOnTargetContact} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments} getOnTargetContact (unsigned int {\i direction})}} \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 Collection of {\b AutoSegment} in {\f2 direction} that are on this segment target contact. \par }{ References Collection< Type >::getSubSet(), and AutoSegment::getTarget().}\par } {\xe \v getAligneds\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getAligneds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments} getAligneds (unsigned int {\i flags} = {\f2 KbNoFlags})}} \par {\bkmkstart AAAAAAAAPI} {\bkmkend AAAAAAAAPI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The Collection of AutoSegments that are aligned on this one through {\b AutoContactHTee} or {\b AutoContactVTee}. If the {\f2 flags} contains {\b Katabatic::KbWithPerpands}, the Collection will also includes the AutoSegments directly perpandiculars to the whole aligned set. \par }{ Referenced by AutoSegment::canDogleg(), AutoSegment::canMoveUp(), AutoSegment::canonize(), AutoSegment::canPivotDown(), AutoSegment::canPivotUp(), AutoSegment::canSlacken(), AutoSegment::computeOptimal(), AutoSegment::getCanonical(), AutoSegment::invalidate(), AutoSegment::isStrongTerminal(), AutoSegment::makeDogleg(), AutoSegment::setAxis(), and AutoSegment::slacken().}\par } {\xe \v getPerpandiculars\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:getPerpandiculars} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments} getPerpandiculars ()}} \par {\bkmkstart AAAAAAAAPJ} {\bkmkend AAAAAAAAPJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The Collection of all AutoSegments directly perpandiculars to the whole aligned set. \par }{ Referenced by AutoSegment::computeOptimal().}\par } {\xe \v _preCreate\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:_preCreate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _preCreate ({\b AutoContact} * {\i source}, {\b AutoContact} * {\i target}){\f2 [static]}, {\f2 [protected]}}} \par {\bkmkstart AAAAAAAAPK} {\bkmkend AAAAAAAAPK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform sanity checks before allowing the actual creation of an {\b AutoSegment}. If an error occurs throw an exception.\par Check for:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 source} and {\f2 target} must not be {\f2 NULL} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\f2 source} and {\f2 target} must be different. \par} }} {\xe \v _postCreate\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:_postCreate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _postCreate (){\f2 [protected]}, {\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAKE} {\bkmkend AAAAAAAAKE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform operations that, given the data structure cannot be done in the constructor. Also allows for sharing code with the derived classes. Currently:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Invalidate the whole net (topology change).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Insert the {\b AutoSegment} in the lookup/Session machanism.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Call {\b AutoSegment::invalidate()}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Call {\b AutoSegment::updateOrient()}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Call {\b AutoSegment::updatePositions()}. \par} }{ Reimplemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAPL \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKD \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getNet(), Session::invalidate(), AutoSegment::invalidate(), Session::link(), Observable::notify(), AutoSegment::updateOrient(), and AutoSegment::updatePositions().}\par { Referenced by AutoHorizontal::_postCreate(), AutoVertical::_postCreate(), and AutoSegment::create().}\par } {\xe \v _preDestroy\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:_preDestroy} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _preDestroy (){\f2 [protected]}, {\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAKG} {\bkmkend AAAAAAAAKG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform operations that must be done before the actual destructor is called. Merely whidrawn the {\b AutoSegment} from the lookup/Session mechanism. \par }{ Reimplemented in {\b AutoVertical} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAPM \\*MERGEFORMAT}{\fldrslt pagenum}}}), and {\b AutoHorizontal} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKF \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Observable::notify(), and Session::unlink().}\par { Referenced by AutoHorizontal::_preDestroy(), and AutoVertical::_preDestroy().}\par } {\xe \v _invalidate\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:_invalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} _invalidate (){\f2 [protected]}}} \par {\bkmkstart AAAAAAAAPN} {\bkmkend AAAAAAAAPN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Invalidate this segment. The segment is scheduled into the {\b Session} revalidation mechanism. \par }{ References Session::invalidate(), AutoSegment::isInvalidated(), Observable::notify(), Katabatic::SegInvalidated, and AutoSegment::setFlags().}\par { Referenced by AutoSegment::invalidate().}\par } {\xe \v _getFlags\:Katabatic::AutoSegment} {\xe \v Katabatic::AutoSegment\:_getFlags} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int _getFlags () const{\f2 [inline]}, {\f2 [protected]}}} \par {\bkmkstart AAAAAAAAPO} {\bkmkend AAAAAAAAPO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets {\f2 flags} given as arguments. \par }{ Referenced by AutoSegment::computeTerminal().}\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 AutoSegment.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoSegment.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoSegment.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 AutoSegments_Aligneds Class Reference\par \pard\plain {\tc\tcl2 \v AutoSegments_Aligneds} {\xe \v AutoSegments_Aligneds} {\bkmkstart AAAAAAAAPP} {\bkmkend AAAAAAAAPP} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All aligned {\b AutoSegment} of a set. }}\par Inheritance diagram for AutoSegments_Aligneds:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoSegments__Aligneds__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 AutoSegments_Aligneds} ({\b AutoSegment} *, unsigned int flags=KbNoFlags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments_Aligneds} (const {\b AutoSegments_Aligneds} &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegmentHC} * {\b getClone} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegmentHL} * {\b getLocator} () const\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 All aligned {\b AutoSegment} of a set. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A Collection to iterate over all the {\b AutoSegment} aligned with {\f2 master} . The {\f2 master} itself will not be included in the walkthrough. If the {\b Katabatic::KbWithPerpands} flag is passed as argument, the collection will also includes the AutoSegments directly perpandicular to the aligned set.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: AutoSegments are forced to be aligneds only when connected through\par }\pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid {\b AutoContactHTee} or {\b AutoContactVTee}. \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 AutoSegments_Aligneds\:Katabatic::AutoSegments_Aligneds} {\xe \v Katabatic::AutoSegments_Aligneds\:AutoSegments_Aligneds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments_Aligneds} ({\b AutoSegment} * {\i master}, unsigned int {\i flags} = {\f2 KbNoFlags}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAPQ} {\bkmkend AAAAAAAAPQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a collection of all the {\b AutoSegment} aligned on {\f2 master} (master itself is excluded from the Collection). If the flag {\b Katabatic::KbWithPerpands} is given the directly perpandicular {\b AutoSegment} will also be includeds. \par }} {\xe \v AutoSegments_Aligneds\:Katabatic::AutoSegments_Aligneds} {\xe \v Katabatic::AutoSegments_Aligneds\:AutoSegments_Aligneds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments_Aligneds} (const {\b AutoSegments_Aligneds} & {\i autosegments}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAPR} {\bkmkend AAAAAAAAPR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Copy constructor. \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 getClone\:Katabatic::AutoSegments_Aligneds} {\xe \v Katabatic::AutoSegments_Aligneds\:getClone} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegmentHC} * getClone () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAPS} {\bkmkend AAAAAAAAPS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A deep copy of the Collection. \par }{ Implements {\b Collection< Type >}.}\par } {\xe \v getLocator\:Katabatic::AutoSegments_Aligneds} {\xe \v Katabatic::AutoSegments_Aligneds\:getLocator} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegmentHC} * getLocator () const{\f2 [virtual]}}} \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:} A deep copy of the Collection Locator. \par }{ Implements {\b Collection< Type >}.}\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 AutoSegments.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoSegments.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 AutoSegments_AnchorOnGCell Class Reference\par \pard\plain {\tc\tcl2 \v AutoSegments_AnchorOnGCell} {\xe \v AutoSegments_AnchorOnGCell} {\bkmkstart AAAAAAAAPU} {\bkmkend AAAAAAAAPU} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All {\b AutoSegment} Beginning and/or Stopping in a {\b GCell}. }}\par Inheritance diagram for AutoSegments_AnchorOnGCell:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoSegments__AnchorOnGCell__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 AutoSegments_AnchorOnGCell} ({\b GCell} *fcell, unsigned int flags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments_AnchorOnGCell} (const {\b AutoSegments_AnchorOnGCell} &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegmentHC} * {\b getClone} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegmentHL} * {\b getLocator} () const\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 All {\b AutoSegment} Beginning and/or Stopping in a {\b GCell}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A Collection to iterate over all the {\b AutoSegment} that begin from and/or end in a {\b GCell}. \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 AutoSegments_AnchorOnGCell\:Katabatic::AutoSegments_AnchorOnGCell} {\xe \v Katabatic::AutoSegments_AnchorOnGCell\:AutoSegments_AnchorOnGCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments_AnchorOnGCell} ({\b GCell} * {\i fcell}, unsigned int {\i flags}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAPV} {\bkmkend AAAAAAAAPV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a collection of all the {\b AutoSegment} beginning from and/or ending in {\f2 fcell} . The set returned by the Collection is selected through {\f2 flags} :{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Katabatic::KbBySource : include {\b AutoSegment} starting from {\f2 fcell} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Katabatic::KbByTarget : include {\b AutoSegment} ending in {\f2 fcell} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Katabatic::KbHorizontal} : include horizontal {\b AutoSegment}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Katabatic::KbVertical} : include vertical {\b AutoSegment}. \par} }} {\xe \v AutoSegments_AnchorOnGCell\:Katabatic::AutoSegments_AnchorOnGCell} {\xe \v Katabatic::AutoSegments_AnchorOnGCell\:AutoSegments_AnchorOnGCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments_AnchorOnGCell} (const {\b AutoSegments_AnchorOnGCell} & {\i autosegments}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAPW} {\bkmkend AAAAAAAAPW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Copy constructor. \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 getClone\:Katabatic::AutoSegments_AnchorOnGCell} {\xe \v Katabatic::AutoSegments_AnchorOnGCell\:getClone} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegmentHC} * getClone () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAPX} {\bkmkend AAAAAAAAPX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A deep copy of the Collection. \par }{ Implements {\b Collection< Type >}.}\par } {\xe \v getLocator\:Katabatic::AutoSegments_AnchorOnGCell} {\xe \v Katabatic::AutoSegments_AnchorOnGCell\:getLocator} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegmentHC} * getLocator () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAPY} {\bkmkend AAAAAAAAPY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A deep copy of the Collection Locator. \par }{ Implements {\b Collection< Type >}.}\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 AutoSegments.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoSegments.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 AutoSegments_InDirection Class Reference\par \pard\plain {\tc\tcl2 \v AutoSegments_InDirection} {\xe \v AutoSegments_InDirection} {\bkmkstart AAAAAAAAPZ} {\bkmkend AAAAAAAAPZ} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Filter to select {\b AutoSegment} in a given direction. }}\par Inheritance diagram for AutoSegments_InDirection:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoSegments__InDirection__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 AutoSegments_InDirection} (unsigned int direction)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegmentHF} * {\b getClone} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b accept} ({\b AutoSegment} *segment) const\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 Filter to select {\b AutoSegment} in a given direction. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A Filter to select {\b AutoSegment} in a specific direction. \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 AutoSegments_InDirection\:Katabatic::AutoSegments_InDirection} {\xe \v Katabatic::AutoSegments_InDirection\:AutoSegments_InDirection} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments_InDirection} (unsigned int {\i direction}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAQA} {\bkmkend AAAAAAAAQA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a filter for {\b AutoSegment} in {\f2 direction} ({\b Katabatic::KbHorizontal} or {\b Katabatic::KbVertical}). \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 getClone\:Katabatic::AutoSegments_InDirection} {\xe \v Katabatic::AutoSegments_InDirection\:getClone} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegmentHF} * getClone () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQB} {\bkmkend AAAAAAAAQB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A deep copy of the Collection. \par }{ Implements {\b Filter< Type >}.}\par } {\xe \v accept\:Katabatic::AutoSegments_InDirection} {\xe \v Katabatic::AutoSegments_InDirection\:accept} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool accept ({\b AutoSegment} * {\i segment}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQC} {\bkmkend AAAAAAAAQC} { \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 {\f2 segment} is in the correct direction. \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 AutoSegments.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoSegments.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 AutoSegments_IsAccountable Class Reference\par \pard\plain {\tc\tcl2 \v AutoSegments_IsAccountable} {\xe \v AutoSegments_IsAccountable} {\bkmkstart AAAAAAAAQD} {\bkmkend AAAAAAAAQD} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Filter to select accoutable {\b AutoSegment}. }}\par Inheritance diagram for AutoSegments_IsAccountable:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoSegments__IsAccountable__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 {\b AutoSegmentHF} * {\b getClone} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b accept} ({\b AutoSegment} *) const\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 Filter to select accoutable {\b AutoSegment}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A Filter to select accoutable {\b AutoSegment}. An {\b AutoSegment} is said to be accountable if it is canonical (in the sense of an aligned set). \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 getClone\:Katabatic::AutoSegments_IsAccountable} {\xe \v Katabatic::AutoSegments_IsAccountable\:getClone} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegmentHF} * getClone () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAQE} {\bkmkend AAAAAAAAQE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A deep copy of the Collection. \par }{ Implements {\b Filter< Type >}.}\par } {\xe \v accept\:Katabatic::AutoSegments_IsAccountable} {\xe \v Katabatic::AutoSegments_IsAccountable\:accept} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool accept ({\b AutoSegment} * {\i segment}) 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 Returns:} {\b true} if the {\f2 segment} is accountable (i.e. canonical). \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 AutoSegments.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoSegments.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 AutoSegments_OnContact Class Reference\par \pard\plain {\tc\tcl2 \v AutoSegments_OnContact} {\xe \v AutoSegments_OnContact} {\bkmkstart AAAAAAAAQG} {\bkmkend AAAAAAAAQG} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All {\b AutoSegment} anchored on a Contact. }}\par Inheritance diagram for AutoSegments_OnContact:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoSegments__OnContact__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 AutoSegments_OnContact} ({\b AutoSegment} *master, {\b Contact} *contact)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments_OnContact} (const {\b AutoSegments_OnContact} &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegmentHC} * {\b getClone} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegmentHL} * {\b getLocator} () const\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 All {\b AutoSegment} anchored on a Contact. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All {\b AutoSegment} Beginning from an {\b AutoContact}.\par A Collection to iterate over all the {\b AutoSegment} anchored on {\f2 contact} . If supplied, the {\b AutoSegment} {\f2 master} will be excluded from the list.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: If a Hurricane::Segment is anchored on the {\f2 contact} , but is not\par }\pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid associated to an {\b AutoSegment}, it will be silently skipped.\par }A Collection to iterate over all the {\b AutoSegment} that begin from {\b AutoContact}. As AutoSegments are kept orienteds (source anchor must be lower than target), selecting source anchored AutoSegments implies that they are starting from this {\b AutoContact}. \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 AutoSegments_OnContact\:Katabatic::AutoSegments_OnContact} {\xe \v Katabatic::AutoSegments_OnContact\:AutoSegments_OnContact} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments_OnContact} ({\b AutoSegment} * {\i master}, {\b Contact} * {\i contact}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAQH} {\bkmkend AAAAAAAAQH} { \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 master} \cell }{Exclude this {\b AutoSegment} from the Collection. \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 contact} \cell }{The Hurricane Contact over which to iterate.\cell } {\row } } Construct a Collection of all the {\b AutoSegment} anchored on {\f2 contact} .\par Create the collection of all AutoSegments direcly anchored on {\f2 contact} , with exclusion of {\f2 master} . \par }} {\xe \v AutoSegments_OnContact\:Katabatic::AutoSegments_OnContact} {\xe \v Katabatic::AutoSegments_OnContact\:AutoSegments_OnContact} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments_OnContact} (const {\b AutoSegments_OnContact} & {\i segments}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAQI} {\bkmkend AAAAAAAAQI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Copy constructor. \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 getClone\:Katabatic::AutoSegments_OnContact} {\xe \v Katabatic::AutoSegments_OnContact\:getClone} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegmentHC} * getClone () 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 Returns:} A deep copy of the Collection. \par }{ Implements {\b Collection< Type >}.}\par } {\xe \v getLocator\:Katabatic::AutoSegments_OnContact} {\xe \v Katabatic::AutoSegments_OnContact\:getLocator} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegmentHC} * getLocator () 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 Returns:} A deep copy of the Collection Locator. \par }{ Implements {\b Collection< Type >}.}\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 AutoSegments.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoSegments.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 AutoSegments_Perpandiculars Class Reference\par \pard\plain {\tc\tcl2 \v AutoSegments_Perpandiculars} {\xe \v AutoSegments_Perpandiculars} {\bkmkstart AAAAAAAAQL} {\bkmkend AAAAAAAAQL} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid All perpandicular {\b AutoSegment} to a set of aligneds. }}\par Inheritance diagram for AutoSegments_Perpandiculars:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoSegments__Perpandiculars__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 AutoSegments_Perpandiculars} ({\b AutoSegment} *master)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments_Perpandiculars} (const {\b AutoSegments_Perpandiculars} &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegmentHC} * {\b getClone} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b AutoSegmentHL} * {\b getLocator} () const\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 All perpandicular {\b AutoSegment} to a set of aligneds. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A Collection to iterate over all the {\b AutoSegment} perpandicular to the set of aligned {\b AutoSegment} of {\f2 master} .\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: This Collection is canonical aware (work on the aligned set).\par }\pard\plain \s61\li360\widctlpar\ql\adjustright \fs20\cgrid \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 AutoSegments_Perpandiculars\:Katabatic::AutoSegments_Perpandiculars} {\xe \v Katabatic::AutoSegments_Perpandiculars\:AutoSegments_Perpandiculars} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments_Perpandiculars} ({\b AutoSegment} * {\i master}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAQM} {\bkmkend AAAAAAAAQM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a collection of all the {\b AutoSegment} perpandicular to the aligned set of {\f2 master} . \par }} {\xe \v AutoSegments_Perpandiculars\:Katabatic::AutoSegments_Perpandiculars} {\xe \v Katabatic::AutoSegments_Perpandiculars\:AutoSegments_Perpandiculars} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments_Perpandiculars} (const {\b AutoSegments_Perpandiculars} & {\i autosegments}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAQN} {\bkmkend AAAAAAAAQN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Copy constructor. \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 getClone\:Katabatic::AutoSegments_Perpandiculars} {\xe \v Katabatic::AutoSegments_Perpandiculars\:getClone} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegmentHC} * getClone () 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 Returns:} A deep copy of the Collection. \par }{ Implements {\b Collection< Type >}.}\par } {\xe \v getLocator\:Katabatic::AutoSegments_Perpandiculars} {\xe \v Katabatic::AutoSegments_Perpandiculars\:getLocator} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegmentHC} * getLocator () 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 Returns:} A deep copy of the Collection Locator. \par }{ Implements {\b Collection< Type >}.}\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 AutoSegments.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoSegments.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 AutoVertical Class Reference\par \pard\plain {\tc\tcl2 \v AutoVertical} {\xe \v AutoVertical} {\bkmkstart AAAAAAAAQQ} {\bkmkend AAAAAAAAQQ} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Concrete Vertical {\b AutoSegment}. }}\par Inheritance diagram for AutoVertical:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1AutoVertical__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 _canSlacken} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b canMoveULeft} (float reserve=0.0) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b canMoveURight} (float reserve=0.0) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Segment} * {\b base} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Segment} * {\b base} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\b Vertical} * {\b getVertical} ()\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 getSourceU} () 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 getTargetU} () 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 getDuSource} () 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 getDuTarget} () 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 getSpanU} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b getConstraints} ({\b DbU::Unit} &min, {\b DbU::Unit} &max) 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} (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 virtual {\b Interval} {\b getTargetConstraints} (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 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 size_t {\b getGCells} (vector< {\b GCell} *> &) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b setDuSource} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b setDuTarget} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updateOrient} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b updatePositions} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b checkPositions} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b checkConstraints} () 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 _makeDogleg} ({\b GCell} *, 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 moveULeft} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual bool {\b moveURight} ()\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Protected 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 _postCreate} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b _preDestroy} ()\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 Concrete Vertical {\b 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 _canSlacken\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:_canSlacken} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool _canSlacken () const{\f2 [virtual]}}} \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 the segment can be slackened. That is, source or target constraints are less than three pitches. \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Interval::contains(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), GCell::getSide(), Interval::inflate(), and Katabatic::KbHorizontal.}\par } {\xe \v canMoveULeft\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:canMoveULeft} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canMoveULeft (float {\i reserve} = {\f2 0.0}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAMS} {\bkmkend AAAAAAAAMS} { \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 {\b true} if the {\i global} segment can be moved on the left {\b GCell} (for a vertical) or down (for an horizontal). The move is accepted only if it do not change the amount of global wiring. Thus the following conditions:{ \par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The segment mustn't be on the leftmost {\b GCell} (obvious...).\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The segment must be global.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The source and target contacts must be AutoContactTurn(s).\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid At least one of the perpandicular must be global {\b and} connected through the {\i target} . That is, it's a global which extends toward left.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The {\b GCell} of maximum density on the left must remains below the current {\b GCell} of maximum density, with a margin of {\f2 reserve} (expressed in total saturation percentage). \par} }}{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAII \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), GCell::getLeft(), Session::getRoutingGauge(), AutoContact::getSegment(), GCell::getUp(), GCell::getWDensity(), and AutoSegment::isGlobal().}\par } {\xe \v canMoveURight\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:canMoveURight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool canMoveURight (float {\i reserve} = {\f2 0.0}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAMT} {\bkmkend AAAAAAAAMT} { \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 {\b true} if the {\i global} segment can be moved on the right {\b GCell} (for a vertical) or up (for an horizontal). The move is accepted only if it do not change the amount of global wiring. Thus the following conditions:{ \par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The segment mustn't be on the leftmost {\b GCell} (obvious...).\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The segment must be global.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The source and target contacts must be AutoContactTurn(s).\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid At least one of the perpandicular must be global {\b and} connected through the {\i source} . That is, it's a global which extends toward right.\par \pard\plain \s82\fi-360\li1080\widctlpar\jclisttab\tx1080{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pndec }\ls3\adjustright \fs20\cgrid The {\b GCell} of maximum density on the left must remains below the current {\b GCell} of maximum density, with a margin of {\f2 reserve} (expressed in total saturation percentage). \par} }}{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIK \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), GCell::getRight(), Session::getRoutingGauge(), AutoContact::getSegment(), GCell::getUp(), GCell::getWDensity(), and AutoSegment::isGlobal().}\par } {\xe \v base\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:base} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Segment} * base (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAKU} {\bkmkend AAAAAAAAKU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the decorated {\b Hurricane::Segment}. \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIM \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v base\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:base} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Segment} * base () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAKT} {\bkmkend AAAAAAAAKT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} the decorated {\b Hurricane::Segment} (const flavor). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIO \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getVertical\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:getVertical} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Vertical} * getVertical (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAKW} {\bkmkend AAAAAAAAKW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} If the decorated segment is a {\b Hurricane::Vertical}, return it. {\f2 NULL} otherwise. \par }{ Reimplemented from {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKV \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v getSourceU\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:getSourceU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getSourceU () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAANK} {\bkmkend AAAAAAAANK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} {\i uniform} source position. (X for an horizontal and Y for a Vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIS \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Segment::getSourceY().}\par } {\xe \v getTargetU\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:getTargetU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getTargetU () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAANL} {\bkmkend AAAAAAAANL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} {\i uniform} target position. (X for an horizontal and Y for a Vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIU \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Segment::getTargetY().}\par } {\xe \v getDuSource\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:getDuSource} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getDuSource () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAANM} {\bkmkend AAAAAAAANM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} {\i uniform} delta from source. (dX for an horizontal and dY for a Vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIW \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Vertical::getDySource().}\par } {\xe \v getDuTarget\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:getDuTarget} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getDuTarget () const{\f2 [virtual]}}} \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 AutoSegment} {\i uniform} delta from source. (dX for an horizontal and dY for a Vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAIY \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Vertical::getDyTarget().}\par } {\xe \v getSpanU\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:getSpanU} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getSpanU () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAANQ} {\bkmkend AAAAAAAANQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b AutoSegment} {\i uniform} occupying interval (on X for horizontal and on Y for vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Segment::getSourceY(), and Segment::getTargetY().}\par } {\xe \v getConstraints\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:getConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool getConstraints ({\b DbU::Unit} & {\i min}, {\b DbU::Unit} & {\i max}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAANU} {\bkmkend AAAAAAAANU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} in {\f2 min} & {\f2 max} the allowed range for the segment axis. \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJC \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getCBXMax(), AutoContact::getCBXMin(), AutoSegment::getUserConstraints(), and DbU::getValueString().}\par } {\xe \v getSourceConstraints\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:getSourceConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getSourceConstraints (unsigned int {\i flags} = {\f2 0}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAANS} {\bkmkend AAAAAAAANS} { \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 Interval into witch the source {\b AutoContact} can vary. By default all deduced constraints and user constraints are took into account. If {\f2 flags} contains {\f2 KbNativeConstraints} the constraint returned is only the enclosing {\b GCell}. \par }}{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJE \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoSource(), Box::getXMax(), Box::getXMin(), and Katabatic::KbNativeConstraints.}\par } {\xe \v getTargetConstraints\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:getTargetConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getTargetConstraints (unsigned int {\i flags} = {\f2 0}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAANT} {\bkmkend AAAAAAAANT} { \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 Interval into witch the target {\b AutoContact} can vary. By default all deduced constraints and user constraints are took into account. If {\f2 flags} contains {\f2 KbNativeConstraints} the constraint returned is only the enclosing {\b GCell}. \par }}{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoTarget(), Box::getXMax(), Box::getXMin(), and Katabatic::KbNativeConstraints.}\par } {\xe \v getDirection\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:getDirection} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDirection () const{\f2 [virtual]}}} \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:} {\b Katabatic::KbHorizontal} or {\b Katabatic::KbVertical} according to the decorated segment. \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJI \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Katabatic::KbVertical.}\par } {\xe \v getGCells\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:getGCells} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getGCells (vector< {\b GCell} *> & {\i gcells}) const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAND} {\bkmkend AAAAAAAAND} { \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 gcells} \cell }{A vector that will be filled by all the GCells that the segment overlap. In increasing order, from source to target. \cell } {\row } } {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid The vector's size. \par }}{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJK \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), and GCell::getUp().}\par } {\xe \v setDuSource\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:setDuSource} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setDuSource ({\b DbU::Unit} {\i du}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAOG} {\bkmkend AAAAAAAAOG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the {\i uniform} {\f2 dU} from source anchor (dX for Horizontal, dY for Vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJM \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v setDuTarget\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:setDuTarget} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setDuTarget ({\b DbU::Unit} {\i du}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAOH} {\bkmkend AAAAAAAAOH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the {\i uniform} {\f2 dU} from target anchor (dX for Horizontal, dY for Vertical). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJO \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v updateOrient\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:updateOrient} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateOrient (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAOJ} {\bkmkend AAAAAAAAOJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Ensure that source is lower than target. Swap them if needed. Swap never occurs on global segment because their source and target anchors are from different {\b GCell}, which are already ordered. \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJQ \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Segment::getSourceY(), Segment::getTargetY(), Segment::invert(), Katabatic::SegSourceBottom, Katabatic::SegSourceTop, Katabatic::SegTargetBottom, Katabatic::SegTargetTop, AutoSegment::setFlags(), and AutoSegment::unsetFlags().}\par } {\xe \v updatePositions\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:updatePositions} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updatePositions (){\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 Update the segment begenning and ending positions. The positions takes into account the extension caps and reflect the real space used by the segment under it's long axis. \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJS \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Session::getExtensionCap(), AutoSegment::getLayer(), Segment::getSourceY(), and Segment::getTargetY().}\par } {\xe \v checkPositions\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:checkPositions} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool checkPositions () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAMY} {\bkmkend AAAAAAAAMY} { \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 relative positions of source & target are coherent. (source <= target). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJU \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References Session::getExtensionCap(), AutoSegment::getLayer(), Segment::getSourceY(), Segment::getTargetY(), and DbU::getValueString().}\par } {\xe \v checkConstraints\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:checkConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool checkConstraints () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAMZ} {\bkmkend AAAAAAAAMZ} { \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 constraint intervel is coherent (non-empty or punctual in the worst case). \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJW \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), and Interval::intersect().}\par } {\xe \v _makeDogleg\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:_makeDogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int _makeDogleg ({\b GCell} * {\i doglegGCell}, unsigned int {\i flags}){\f2 [virtual]}}} \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 This method is the workhorse for the various dogleg and topology restauration methods.} It is the atomic method that actually make the dogleg on {\b this} segment.\par {\b Returns:} {\b Katabatic::KbUseAboveLayer} if the dogleg is using the {\i above} layer ({\b Katabatic::KbUseBelowLayer} for the below layer).\par Break the current segment in two (a.k.a. making a dogleg).{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The segment is broken inside {\f2 doglegGCell} .\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Two new segments are createds, one perpandicular and one parallel.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The original segment is always kept attached to the {\i source} . (the new parallel fragment is attached to the {\i target} ).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The perpandicular segment is in the layer {\i above} by default. If we are already on the topmost routing layer, the {\i below} layer is used.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid If the segment pass through the breaking {\b GCell}, it's axis is set into the center. If the segment is local, the axis is the middle of the segment.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The Local/Global kind of the original segment is updated. The local/global status is computed by the constructor of the {\b AutoSegment} for the perpandicular and the new parallel.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The terminal state is updated. If the segment is a strong terminal the part that is no longer directly connected to the terminal is demoted to {\b Katabatic::SegWeakTerminal1}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The perpandicular is obviously a canonical. If the broken segment is canonical, the original {\b is} left canonical and only the new parallel is re-canonized. Otherwise, we re-canonise both sets of aligned segments (the one on the source and the one on the target).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The three segments are added to the session dogleg stack.\par} After this method call the net topology is guarantee to be valid.\par \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAJY \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoContact::base(), AutoSegment::canonize(), AutoContactTurn::create(), AutoSegment::create(), Session::dogleg(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), Session::getConfiguration(), RoutingGauge::getContactLayer(), AutoContact::getGCell(), Component::getLayer(), AutoSegment::getLayer(), RoutingGauge::getLayerDepth(), Component::getNet(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), AutoSegment::getSourceY(), AutoSegment::getTargetY(), GCell::getUp(), AutoSegment::getX(), GCell::getY(), GCell::getYMax(), AutoContact::invalidate(), AutoSegment::invalidate(), AutoSegment::isCanonical(), AutoSegment::isLocal(), AutoSegment::isSlackened(), AutoSegment::isWeakTerminal(), Katabatic::KbHorizontal, Katabatic::KbUseAboveLayer, Katabatic::KbUseBelowLayer, Katabatic::KbVertical, AutoContact::migrateConstraintBox(), GCell::removeVSegment(), Katabatic::SegCanonical, Katabatic::SegDogleg, Katabatic::SegGlobal, Katabatic::SegNotAligned, Katabatic::SegSlackened, Katabatic::SegWeakTerminal1, AutoSegment::setFlags(), AutoSegment::setLayer(), and AutoSegment::unsetFlags().}\par } {\xe \v moveULeft\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:moveULeft} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool moveULeft (){\f2 [virtual]}}} \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 This function do not manage an aligned set. It applies on {\f2 this} segment only.} \par Displace an Horizontal or Vertical segment to the {\b GCell} below (a.k.a. lower or inferior). Rules for displacement:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The segment must be connected at both end to a turn contact (we do not want to manage more complex cases for the time beeing).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid And, of course, the segment must not already by on the bottomost {\b GCell}...\par} The displacement take care of:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Managing the status of the various perpandiculars. The stretched one are made global if needed. The shrinked one made local, if needed.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The supporting {\b AutoContact} (source & target) are changed of {\b GCell}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid If the segment is global, the go-through GCells are updateds.\par} {\b Returns:} {\b true} if the move has succeeded.\par \par }{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKA \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References GCell::addHSegment(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), GCell::getLeft(), AutoContact::getSegment(), GCell::getSide(), GCell::getUp(), Interval::getVMax(), AutoSegment::isLocal(), Katabatic::KbHorizontal, GCell::removeHSegment(), Katabatic::SegGlobal, AutoSegment::setAxis(), AutoSegment::setFlags(), AutoContact::setGCell(), and AutoSegment::unsetFlags().}\par } {\xe \v moveURight\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:moveURight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool moveURight (){\f2 [virtual]}}} \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 This function do not manage an aligned set. It applies on {\f2 this} segment only.} \par Displace an Horizontal or Vertical segment to the {\b GCell} above (a.k.a. upper or superior). Rules for displacement:\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b AutoSegment::moveULeft()} for a complete description. \par }}{ Implements {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKC \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References GCell::addHSegment(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getGCell(), GCell::getRight(), AutoContact::getSegment(), GCell::getSide(), GCell::getUp(), DbU::getValueString(), Interval::getVMin(), AutoSegment::isLocal(), Katabatic::KbHorizontal, GCell::removeHSegment(), Katabatic::SegGlobal, AutoSegment::setAxis(), AutoSegment::setFlags(), AutoContact::setGCell(), and AutoSegment::unsetFlags().}\par } {\xe \v _postCreate\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:_postCreate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _postCreate (){\f2 [protected]}, {\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAPL} {\bkmkend AAAAAAAAPL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid In addition to {\b AutoSegment::_postCreate()}, detect whether the segment is global or local and register it in the relevant GCells (if needed).\par If the segment is anchored directly on a terminal, adjust the axis so it's connected. \par }{ Reimplemented from {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKE \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::_postCreate(), GCell::addVSegment(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), GCell::getUp(), Component::getX(), GCell::getY(), Katabatic::SegGlobal, AutoSegment::setFlags(), and AutoContact::setX().}\par } {\xe \v _preDestroy\:Katabatic::AutoVertical} {\xe \v Katabatic::AutoVertical\:_preDestroy} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _preDestroy (){\f2 [protected]}, {\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAPM} {\bkmkend AAAAAAAAPM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform operations that must be done before the actual destructor is called. Merely whidrawn the {\b AutoSegment} from the lookup/Session mechanism. \par }{ Reimplemented from {\b AutoSegment} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAKG \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References AutoSegment::_preDestroy(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoContact::getGCell(), AutoSegment::getId(), GCell::getUp(), GCell::getY(), and GCell::removeVSegment().}\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 AutoVertical.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoVertical.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoVertical.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 BaseGrid::Axis Class Reference\par \pard\plain {\tc\tcl2 \v BaseGrid::Axis} {\xe \v BaseGrid::Axis} {\bkmkstart AAAAAAAARD} {\bkmkend AAAAAAAARD} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Graduations on a {\b BaseGrid} {\b Axis} (H or V). }}\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 addGraduation} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b sort} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getSize} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getGraduationNumber} ({\b DbU::Unit} pos, bool &onGraduation) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b DbU::Unit} & {\b operator[]} (unsigned int i) const\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 Graduations on a {\b BaseGrid} {\b Axis} (H or V). \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Describe the list of graduations on either X or Y axis of a {\b BaseGrid}. Graduations correspond to cut lines and may not be evenly spaced.\par Graduations are internally stored into a vector that needs to be sorted whenever new graduations are added ({\b BaseGrid::Axis::sort()}). \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 addGraduation\:Katabatic::BaseGrid::Axis} {\xe \v Katabatic::BaseGrid::Axis\:addGraduation} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void addGraduation ({\b DbU::Unit} {\i pos}){\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 Adds a new graduation. After adding new graduations, do not forget to perform a sort. \par }{ Referenced by GCellGrid::_postCreate().}\par } {\xe \v sort\:Katabatic::BaseGrid::Axis} {\xe \v Katabatic::BaseGrid::Axis\:sort} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void sort ()}} \par {\bkmkstart AAAAAAAARF} {\bkmkend AAAAAAAARF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Re-order the graduations after an addition. \par }{ Referenced by GCellGrid::_postCreate().}\par } {\xe \v getSize\:Katabatic::BaseGrid::Axis} {\xe \v Katabatic::BaseGrid::Axis\:getSize} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getSize () 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 Returns:} The number of graduations on the axis. \par }{ Referenced by GCellGrid::_postCreate().}\par } {\xe \v getGraduationNumber\:Katabatic::BaseGrid::Axis} {\xe \v Katabatic::BaseGrid::Axis\:getGraduationNumber} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getGraduationNumber ({\b DbU::Unit} {\i pos}, bool & {\i onGraduation}) const}} \par {\bkmkstart AAAAAAAARH} {\bkmkend AAAAAAAARH} { \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 graduation which is immediatly inferior or equal to {\f2 pos} . In case of strict equality, {\f2 onGraduation} is set to {\b true} . \par }} {\xe \v operator[]\:Katabatic::BaseGrid::Axis} {\xe \v Katabatic::BaseGrid::Axis\:operator[]} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} operator[] (unsigned int {\i index}) 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 {\b Returns:} The graduation at {\f2 index} . \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 Grid.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Grid.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Grid.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 BaseGrid Class Reference\par \pard\plain {\tc\tcl2 \v BaseGrid} {\xe \v BaseGrid} {\bkmkstart AAAAAAAAQR} {\bkmkend AAAAAAAAQR} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Abstract Base Class for Irregular {\b Grid}. }}\par Inheritance diagram for BaseGrid:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1BaseGrid__inherit__graph.png" \\d \\*MERGEFORMAT}{\fldrslt IMAGE}}\par } \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 Axis}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Graduations on a {\b BaseGrid} {\b Axis} (H or V). }\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 const {\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 unsigned int {\b getColumns} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getRows} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getRawSize} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getIndex} (unsigned int c, unsigned int r) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getRow} (unsigned int) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getColumn} (unsigned int) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Axis} & {\b getXGrads} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Axis} & {\b getYGrads} () const\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Protected 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 BaseGrid} (const {\b Box} &)\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 Base Class for Irregular {\b Grid}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid An abstract class for a 2-D matrix of objects. The grid is irregular in the sense that the horizontal and vertical cut lines may not be evenly spaced.\par The coordinates of cut lines in horizontal and vertical direction are stored {\b BaseGrid::Axis} structure.\par The {\b BaseGrid} contains all the non-template methods of the {\b Grid}, that is that do not depend of the matrix element type.\par The internal storage implemented in derived classes is expected to store "row by row" (rows are put one after another in the vector). \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 BaseGrid\:Katabatic::BaseGrid} {\xe \v Katabatic::BaseGrid\:BaseGrid} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b BaseGrid} (const {\b Box} & {\i bb}){\f2 [protected]}}} \par {\bkmkstart AAAAAAAAQS} {\bkmkend AAAAAAAAQS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Construct a new {\b BaseGrid} on area {\f2 bb} . Graduations, rows & columns are sets to zero. \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 destroy\:Katabatic::BaseGrid} {\xe \v Katabatic::BaseGrid\:destroy} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void destroy (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAQT} {\bkmkend AAAAAAAAQT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The user-level destructor. \par }} {\xe \v getBoundingBox\:Katabatic::BaseGrid} {\xe \v Katabatic::BaseGrid\:getBoundingBox} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Box} & getBoundingBox () const{\f2 [inline]}}} \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 Returns:} The grid bounding box. \par }} {\xe \v getColumns\:Katabatic::BaseGrid} {\xe \v Katabatic::BaseGrid\:getColumns} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getColumns () const{\f2 [inline]}}} \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 Returns:} The numbers of columns in the grid. \par }{ Referenced by GCellGrid::_postCreate(), KatabaticEngine::createDetailedGrid(), BaseGrid::getColumn(), BaseGrid::getIndex(), BaseGrid::getRawSize(), and BaseGrid::getRow().}\par } {\xe \v getRows\:Katabatic::BaseGrid} {\xe \v Katabatic::BaseGrid\:getRows} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getRows () const{\f2 [inline]}}} \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 Returns:} The numbers of rows in the grid. \par }{ Referenced by GCellGrid::_postCreate(), KatabaticEngine::createDetailedGrid(), and BaseGrid::getRawSize().}\par } {\xe \v getRawSize\:Katabatic::BaseGrid} {\xe \v Katabatic::BaseGrid\:getRawSize} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getRawSize () const{\f2 [inline]}}} \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 Returns:} The total number of elements in the grid (i.e. $ rows \times columns $) \par }{ References BaseGrid::getColumns(), and BaseGrid::getRows().}\par } {\xe \v getIndex\:Katabatic::BaseGrid} {\xe \v Katabatic::BaseGrid\:getIndex} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getIndex (unsigned int {\i c}, unsigned int {\i r}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAQY} {\bkmkend AAAAAAAAQY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid An helper function that compute the linear index in the element vector from a {\f2 } (c,r) coordinate pair: \[ index = c + r \times columns \] \par }{ References BaseGrid::getColumns().}\par { Referenced by Grid< GCell >::getGCellDown(), Grid< GCell >::getGCellLeft(), Grid< GCell >::getGCellRight(), and Grid< GCell >::getGCellUp().}\par } {\xe \v getRow\:Katabatic::BaseGrid} {\xe \v Katabatic::BaseGrid\:getRow} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getRow (unsigned int {\i i}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAQZ} {\bkmkend AAAAAAAAQZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid An helper function that compute the row number from the linear index in the vector: \[ row = index / columns \] \par }{ References BaseGrid::getColumns().}\par { Referenced by GCell::getRow().}\par } {\xe \v getColumn\:Katabatic::BaseGrid} {\xe \v Katabatic::BaseGrid\:getColumn} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getColumn (unsigned int {\i i}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARA} {\bkmkend AAAAAAAARA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid An helper function that compute the column number from the linear index in the vector: \[ column = index \div columns \] \par }{ References BaseGrid::getColumns().}\par { Referenced by GCell::getColumn().}\par } {\xe \v getXGrads\:Katabatic::BaseGrid} {\xe \v Katabatic::BaseGrid\:getXGrads} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Axis} & getXGrads () const{\f2 [inline]}}} \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 Returns:} The graduations on the X axis. \par }} {\xe \v getYGrads\:Katabatic::BaseGrid} {\xe \v Katabatic::BaseGrid\:getYGrads} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Axis} & getYGrads () 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 Returns:} The graduations on the Y axis. \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 Grid.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Grid.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Grid.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 BaseObserver Class Reference\par \pard\plain {\tc\tcl2 \v BaseObserver} {\xe \v BaseObserver} {\bkmkstart AAAAAAAARJ} {\bkmkend AAAAAAAARJ} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Observer} Design Pattern, {\b Observer} part. }}\par Inheritance diagram for BaseObserver:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1BaseObserver__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 {\b Observer} Design Pattern, {\b Observer} part. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This class is used as a non-template base class for the templatized {\b Observer} one. It is used to avoid propagating template to the whole {\b Observable} class. It only contains the {\b Observer::notify()} virtual method. \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\:Katabatic::BaseObserver} {\xe \v Katabatic::BaseObserver\:notify} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void notify (unsigned int {\i flags}){\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 The method which will be called whenever a change occurs on the {\b Observable}. \par }{ Referenced by Observable::notify().}\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 Observer.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Observer.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Observer.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 ChipTools Class Reference\par \pard\plain {\tc\tcl2 \v ChipTools} {\xe \v ChipTools} {\bkmkstart AAAAAAAARL} {\bkmkend AAAAAAAARL} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Utilities for Chip Level Design. }}\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 ChipTools} ({\b Cell} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isChip} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Cell} * {\b getCell} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Instance} * {\b getCore} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Box} & {\b getChipBb} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Box} & {\b getLeftPadsBb} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Box} & {\b getRightPadsBb} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Box} & {\b getTopPadsBb} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b Box} & {\b getBottomPadsBb} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const Torus & {\b getCorona} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b intersectVPads} (const {\b Box} &) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b intersectHPads} (const {\b Box} &) const\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 Utilities for Chip Level Design. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b ChipTools} class provides a small set of utilities to ease the managment of a complete chip following the Alliance top hierarchical structure. \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 ChipTools\:Katabatic::ChipTools} {\xe \v Katabatic::ChipTools\:ChipTools} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b ChipTools} ({\b Cell} * {\i cell})}} \par {\bkmkstart AAAAAAAARM} {\bkmkend AAAAAAAARM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a ChipTool for {\f2 cell} . \par }{ References Cell::getAbutmentBox(), Entity::getBoundingBox(), DataBase::getDB(), Box::getHeight(), Net::getHorizontals(), Technology::getLayer(), Instance::getMasterCell(), Instance::getName(), Cell::getName(), Cell::getNet(), DataBase::getTechnology(), Box::getWidth(), Box::getXMax(), Box::getXMin(), Box::getYMax(), Box::getYMin(), Box::inflate(), and ChipTools::isChip().}\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 isChip\:Katabatic::ChipTools} {\xe \v Katabatic::ChipTools\:isChip} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isChip () const{\f2 [inline]}}} \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 Returns:} {\b true} if the Cell is truly a top level design. If not, this object is useless and does nothing. \par }{ Referenced by ChipTools::ChipTools(), KatabaticEngine::createDetailedGrid(), and KatabaticEngine::isChip().}\par } {\xe \v getCell\:Katabatic::ChipTools} {\xe \v Katabatic::ChipTools\:getCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Cell} * getCell () const{\f2 [inline]}}} \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 Returns:} The top-level design. \par }} {\xe \v getCore\:Katabatic::ChipTools} {\xe \v Katabatic::ChipTools\:getCore} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Instance} * getCore () const{\f2 [inline]}}} \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 Returns:} The instance of the core, that is, the only instance that is {\i not} a pad... \par }} {\xe \v getChipBb\:Katabatic::ChipTools} {\xe \v Katabatic::ChipTools\:getChipBb} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Box} & getChipBb () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARQ} {\bkmkend AAAAAAAARQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The chip complete bounding box, this *is* simply the Cell bounding box. \par }} {\xe \v getLeftPadsBb\:Katabatic::ChipTools} {\xe \v Katabatic::ChipTools\:getLeftPadsBb} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Box} & getLeftPadsBb () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARR} {\bkmkend AAAAAAAARR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The bounding box enclosing all the pads on the left side of the chip.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: This box is computed from the chip bounding box and the pad height. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}} {\xe \v getRightPadsBb\:Katabatic::ChipTools} {\xe \v Katabatic::ChipTools\:getRightPadsBb} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Box} & getRightPadsBb () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARS} {\bkmkend AAAAAAAARS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The bounding box enclosing all the pads on the right side of the chip.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: This box is computed from the chip bounding box and the pad height. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}} {\xe \v getTopPadsBb\:Katabatic::ChipTools} {\xe \v Katabatic::ChipTools\:getTopPadsBb} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Box} & getTopPadsBb () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAART} {\bkmkend AAAAAAAART} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The bounding box enclosing all the pads on the top side of the chip.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: This box is computed from the chip bounding box and the pad height. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}} {\xe \v getBottomPadsBb\:Katabatic::ChipTools} {\xe \v Katabatic::ChipTools\:getBottomPadsBb} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Box} & getBottomPadsBb () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARU} {\bkmkend AAAAAAAARU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The bounding box enclosing all the pads on the bottom side of the chip.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: This box is computed from the chip bounding box and the pad height. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}} {\xe \v getCorona\:Katabatic::ChipTools} {\xe \v Katabatic::ChipTools\:getCorona} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const Torus & getCorona () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAARV} {\bkmkend AAAAAAAARV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The torus (in term of manhanttan distance) enclosed between the pad area and the core area. \par }} {\xe \v intersectVPads\:Katabatic::ChipTools} {\xe \v Katabatic::ChipTools\:intersectVPads} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool intersectVPads (const {\b Box} & {\i box}) const{\f2 [inline]}}} \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:} {\b true} if {\f2 box} intersect either the left or right pad box. \par }{ References Box::intersect().}\par } {\xe \v intersectHPads\:Katabatic::ChipTools} {\xe \v Katabatic::ChipTools\:intersectHPads} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool intersectHPads (const {\b Box} & {\i box}) const{\f2 [inline]}}} \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:} {\b true} if {\f2 box} intersect either the top or bottom pad box. \par }{ References Box::intersect().}\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 ChipTools.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid ChipTools.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid ChipTools.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 GCell::CompareByDensity Class Reference\par \pard\plain {\tc\tcl2 \v GCell::CompareByDensity} {\xe \v GCell::CompareByDensity} {\bkmkstart AAAAAAAAUQ} {\bkmkend AAAAAAAAUQ} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} Density Comparison Functor. }}\par { Inherits binary_function< GCell *, GCell *, bool >.}\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 CompareByDensity} (unsigned int 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 {\b GCell} Density Comparison Functor. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A comparison functor for {\b GCell}, compare by density on layer {\f2 depth} . \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 CompareByDensity\:Katabatic::GCell::CompareByDensity} {\xe \v Katabatic::GCell::CompareByDensity\:CompareByDensity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b CompareByDensity} (unsigned int {\i depth})}} \par {\bkmkstart AAAAAAAAUR} {\bkmkend AAAAAAAAUR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Build a density comparator for GCells on layer {\f2 depth} . \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 GCell.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid GCell.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid GCell.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 GCell::CompareByIndex Class Reference\par \pard\plain {\tc\tcl2 \v GCell::CompareByIndex} {\xe \v GCell::CompareByIndex} {\bkmkstart AAAAAAAAUS} {\bkmkend AAAAAAAAUS} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} Index Comparison Functor. }}\par { Inherits binary_function< const GCell *, const GCell *, bool >.}\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 GCell} Index Comparison Functor. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A comparison functor for {\b GCell}, compare by {\f2 index} (the linear index in the {\b GCellGrid} vector. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following file:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid GCell.h\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 GCell Class Reference\par \pard\plain {\tc\tcl2 \v GCell} {\xe \v GCell} {\bkmkstart AAAAAAAARY} {\bkmkend AAAAAAAARY} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Routing Global Cell. }}\par { Inherits ExtensionGo.}\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 CompareByDensity}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} Density Comparison Functor. }\par}}} \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid class {\b CompareByIndex}\par { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\i {{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} Index Comparison Functor. }\par}}} \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 GCell} {\b Key} - Density Cache. }\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 typedef set< {\b GCell} *, {\b CompareByIndex} > {\b SetIndex}\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 const {\b Name} & {\b getName} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isSaturated} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isSaturated} (unsigned int depth) 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 isAboveDensity} (float threshold) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b hasFreeTrack} (size_t depth, float reserve) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b GCellGrid} * {\b getGCellGrid} () 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 unsigned int {\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 getRow} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getColumn} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b GCell} * {\b getLeft} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b GCell} * {\b getRight} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b GCell} * {\b getUp} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b GCell} * {\b getDown} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b translate} (const {\b DbU::Unit} &, const {\b DbU::Unit} &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual {\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 {\b DbU::Unit} {\b getX} () 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 getY} () 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 getXMax} () 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 getYMax} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Interval} {\b getSide} (unsigned int) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid float {\b getHCapacity} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid float {\b getVCapacity} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid float {\b getDensity} (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 float {\b getCDensity} (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 float {\b getWDensity} (unsigned int depth, 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 DbU::Unit} {\b getBlockage} (unsigned int depth) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid float {\b getFragmentation} (unsigned int depth) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid float {\b getFeedthroughs} (unsigned int depth) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid float {\b getGlobalsCount} (unsigned int depth) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const vector< {\b AutoSegment} * > & {\b getHSegments} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const vector< {\b AutoSegment} * > & {\b getVSegments} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const vector< {\b AutoContact} * > & {\b getContacts} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments} {\b getHStartSegments} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments} {\b getVStartSegments} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments} {\b getHStopSegments} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments} {\b getVStopSegments} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments} {\b getStartSegments} (unsigned int direction)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegments} {\b getStopSegments} (unsigned int direction)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getRoutingPads} (set< {\b RoutingPad} *> &)\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 size_t {\b checkDensity} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b checkEdgeSaturation} (size_t hreserved, size_t vreserved) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b addBlockage} (unsigned int depth, {\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b addHSegment} ({\b AutoSegment} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b addVSegment} ({\b AutoSegment} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b addContact} ({\b AutoContact} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b removeVSegment} ({\b AutoSegment} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b removeHSegment} ({\b AutoSegment} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b removeContact} ({\b AutoContact} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b updateContacts} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b updateDensity} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b updateKey} (unsigned int depth)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b rpDesaturate} (set< {\b Net} *> &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b stepDesaturate} (unsigned int depth, set< {\b Net} *> &, {\b AutoSegment} *&moved, 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 stepNetDesaturate} (unsigned int depth, set< {\b Net} *> &globalNets, {\b SetIndex} &invalidateds)\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 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 {\b DbU::Unit} {\b getTopRightShrink} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static const {\b Name} & {\b getStaticName} ()\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 Routing Global Cell. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {\bkmkstart AAAAAAAARZ} {\bkmkend AAAAAAAARZ} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid GCell Description \par} {\tc\tcl2 \v GCell Description} Please note that there are two kind of Global Cells (or {\b GCell} for short):{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The {\b GCell} used by the global router Knik.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The {\b GCell} used by the detailed router ({\b Katabatic} & Kite). Although the information they hold is obviously related, they are two separate kind of objects.\par} The area of the design to be routed is divided in a regular grid of rectangular area, the {\b GCellGrid}. Each rectangular area is a {\b GCell}.\par The {\b GCell} contains the following informations:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The AutoSegments that begins or ends in it. The list of segments is not avalaible directly but through the AutoContacts that are owned by the {\b GCell}.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid The AutoSegments that go straight {\i through} it (or {\i over} it). Horizontal & Vertical segments are stored in two separeted list. Those two lists are sorted by layer depth (the deepest layers first).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid A lot of synthetic information about the density of tracks used in the {\b GCell}.\par} AutoContacts are affected to GCells, the area of the {\b GCell} is the one into which the {\b AutoContact} is allowed to be placed. It is this that way that the respect of the global routing choosen by Knik is enforced. See the {\b AutoContact} constraint box.\par When tracks are aligned with the {\b GCell} boundaries they one exactly on the boundary can belong to the {\b GCell} on either side of the boundary. But we want a clear and mutually exclusive ownership of each {\b GCell} area. So, we choose that one {\b GCell} do not own the topmost and rightmost track. And to implement it, we shrink top and right coordinates by the amount of {\b GCell::getTopRightShrink()}, which must be less than the track spacing.\par {\bkmkstart AAAAAAAASA} {\bkmkend AAAAAAAASA} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Saturation & Density Computation \par} {\tc\tcl3 \v Saturation & Density Computation} At any depth (i.e. layer), in the preferred routing direction, a {\b GCell} can pass a finite length of wire. For example on an horizontal preferred layer: \[ WL_{max} = width(GCell) \times Htracks(GCell) \] Then the density, is the ratio between $WL_{max}$ and the actually used wirelength: \[ Wdensity(depth) = \frac{WL_{used}(depth)}{WL_{max}(depth)} \] Normally, the ratio musn't exceed 1.0, but the occupied wire length computation, for now, doesn't merge overlapping wires belonging to the same net, so the ratio may be slightly inaccurate. Thus in some pathological cases may be greater than 1.0 whithout truly been overloaded.\par A Cell is considered as {\i saturated} if the overall density is above the saturation ratio given by {\b Session::getSaturateRatio()}.\par Contact density is calculated as follow: \[ Cont_{density} = \frac{|Contacts|}{Htracks \times Vtracks \times 4} \] It is a ratio over the number of actual contacts in the {\b GCell} and the maximal number. The maximal number being the product of the number of tracks in both direction and 4 stands for the hardwired number of layers (the depth).\par Should not be hardwired... {\i To be corrected in future versions.} \par} {\bkmkstart AAAAAAAASB} {\bkmkend AAAAAAAASB} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Feedthrough Computation \par} {\tc\tcl3 \v Feedthrough Computation} The feedtrough value is an estimate is of how many complete tracks have been used on a given layer of the {\b GCell}. It varies between zero and the number of track on the {\b GCell} (complete saturation). As an estimate, it doesn't tell you the actual number of free track, but how many you {\i may expect} assuming the routing is reasonably well done.\par Computation is done as follow: \par \trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clcbpat16\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr \brdrs\brdrw10 \cltxlrtb \cellx4374 \clcbpat16\clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr \brdrs\brdrw10 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {Wire type\cell }{Estimated Cost \cell } \pard \widctlpar\intbl\adjustright {\row } \trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr \brdrs\brdrw10 \cltxlrtb \cellx4374 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr \brdrs\brdrw10 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {Straight wire (feedthrough) \cell }{{\b 1.0} \cell } \pard \widctlpar\intbl\adjustright {\row } \trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr \brdrs\brdrw10 \cltxlrtb \cellx4374 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr \brdrs\brdrw10 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {Beginning or ending global wire \cell }{{\b 0.5} \cell } \pard \widctlpar\intbl\adjustright {\row } \trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr \brdrs\brdrw10 \cltxlrtb \cellx4374 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr \brdrs\brdrw10 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {Local wire. \cell }{{\b 1/3} \cell } \pard \widctlpar\intbl\adjustright {\row } \trowd \trgaph108\trleft-108\trbrdrt\brdrs\brdrw10 \trbrdrl\brdrs\brdrw10 \trbrdrb\brdrs\brdrw10 \trbrdrr\brdrs\brdrw10 \trbrdrh\brdrs\brdrw10 \trbrdrv\brdrs\brdrw10 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr \brdrs\brdrw10 \cltxlrtb \cellx4374 \clvertalt\clbrdrt\brdrs\brdrw10 \clbrdrl\brdrs\brdrw10 \clbrdrb\brdrs\brdrw10 \clbrdrr \brdrs\brdrw10 \cltxlrtb \cellx8748 \pard \widctlpar\intbl\adjustright {Blockage wire \cell }{The exact percentage of the track \cell } \pard \widctlpar\intbl\adjustright {\row } \pard\plain \par \par} {\bkmkstart AAAAAAAASC} {\bkmkend AAAAAAAASC} {{\pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Track Computation \par} {\tc\tcl3 \v Track Computation} The number of track that can go through a {\b GCell} in the horizontal direction is computed as follow: \[ Htracks = \frac{heigth(GCell)}{Vpitch} + 1 \]\par The pitch is assumed to be the same for every layer and is hardwired to 5.0 lambda.\par This is a bad architectural choice. The informations pertaining to routing should be held at Kite level, not be hardwired and the pitch should be made variable with the layer... {\i To be corrected in future versions} .\par} \par} {\bkmkstart AAAAAAAASD} {\bkmkend AAAAAAAASD} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid GCell Lazy Evaluation \par} {\tc\tcl2 \v GCell Lazy Evaluation} To save processing time, the densities are not recomputed every time a segment is modified (added, removed or moved). Instead a lazy evaluation mechanism is used. Densities are recomputed each time a density is queried {\i and} the lazy evaluation {\i not} explicitly disabled (flag NoUpdate).\par} {\bkmkstart AAAAAAAASE} {\bkmkend AAAAAAAASE} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid GCell Sorting Key \par} {\tc\tcl2 \v GCell Sorting Key} In order to perform a lexicographical sort on the tuple $(density(depth),id)$ of a {\b GCell}, a specific slave object {\b GCell::Key} is introduced. It is the density on one specific depth, not the average density.\par} {\bkmkstart AAAAAAAASF} {\bkmkend AAAAAAAASF} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid GCell Desaturation / Layer Assignment \par} {\tc\tcl2 \v GCell Desaturation / Layer Assignment} In addition to it's geometrical and density functionality, the {\b GCell} provides {\i desaturation} capabilities. Desaturation is the operation of moving up feedthough {\b AutoSegment} from the bottom layers towards the upper ones in order to balance the densities in the different densities. Thoses operations provides building blocks for the layer assignment stage which is provided by the Kabatic tool.\par Two strategies are avalaibles, moving one global {\b AutoSegment} at a time with {\b GCell::stepDesaturate()} or, when one {\b AutoSegment} is moved up, move up the whole net trunk with {\b GCell::stepNetDesaturate()}.\par} {\bkmkstart AAAAAAAASG} {\bkmkend AAAAAAAASG} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid GCell Implantation \par} {\tc\tcl2 \v GCell Implantation} {\b GCell} derives from Hurricane::ExtensionGo to allow a graphical rendering of the routing density. \par} }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Typedef Documentation\par \pard\plain {\xe \v SetIndex\:Katabatic::GCell} {\xe \v Katabatic::GCell\:SetIndex} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b typedef set< {\b GCell} *, {\b CompareByIndex} > {\b SetIndex}}} \par {\bkmkstart AAAAAAAASH} {\bkmkend AAAAAAAASH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Shorthand for a set of {\b GCell} sorted on their index. \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 getAllocateds\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getAllocateds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getAllocateds (){\f2 [static]}}} \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 number of allocated GCells. \par }} {\xe \v getTopRightShrink\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getTopRightShrink} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getTopRightShrink (){\f2 [static]}}} \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 amount of shrink on the top and right boundaries. \par }} {\xe \v getStaticName\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getStaticName} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Name} & getStaticName (){\f2 [static]}}} \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 name of the Go slice: {\f2 "Katabatic::GCell"} .\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid Hurricane::ExtensionGo \par }}} {\xe \v getName\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getName} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Name} & getName () 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 name of the Go slice: {\f2 "Katabatic::GCell"} .\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid Hurricane::ExtensionGo \par }}{ Referenced by GCell::checkDensity().}\par } {\xe \v isSaturated\:Katabatic::GCell} {\xe \v Katabatic::GCell\:isSaturated} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isSaturated () const{\f2 [inline]}}} \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:} {\b true} if at least one layer exceed a saturation of {\f2 1.0} (more wirelength that it can hold). \par }{ Referenced by GCell::checkDensity(), GCell::stepDesaturate(), and GCell::updateDensity().}\par } {\xe \v isSaturated\:Katabatic::GCell} {\xe \v Katabatic::GCell\:isSaturated} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isSaturated (unsigned int {\i depth}) const}} \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:} {\b true} if the saturation ratio of layer {\f2 depth} is over the threshold defined for the GCells. \par }{ References GCell::getDensity(), and Session::getSaturateRatio().}\par } {\xe \v isValid\:Katabatic::GCell} {\xe \v Katabatic::GCell\:isValid} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isValid () const{\f2 [inline]}}} \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:} {\b true} if all the AutoContact/AutoSegment of the {\b GCell} are valids. \par }{ Referenced by GCell::checkDensity(), GCell::getCDensity(), GCell::getDensity(), GCell::getFeedthroughs(), GCell::getFragmentation(), GCell::getGlobalsCount(), GCell::getWDensity(), GCell::hasFreeTrack(), GCell::isAboveDensity(), and GCell::updateDensity().}\par } {\xe \v isAboveDensity\:Katabatic::GCell} {\xe \v Katabatic::GCell\:isAboveDensity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isAboveDensity (float {\i threshold}) const}} \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:} {\b true} if the overall saturation ratio greater than {\f2 threshold} . \par }{ References GCell::getDensity(), GCell::isValid(), and GCell::updateDensity().}\par } {\xe \v hasFreeTrack\:Katabatic::GCell} {\xe \v Katabatic::GCell\:hasFreeTrack} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool hasFreeTrack (size_t {\i depth}, float {\i reserve}) const}} \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:} {\b true} if there should be enough wire length to pass a wire completly trough this {\b GCell}. \par }{ References GCell::getHCapacity(), GCell::getIndex(), RoutingGauge::getLayerDepth(), Layer::getName(), Session::getRoutingGauge(), RoutingGauge::getRoutingLayer(), GCell::getVCapacity(), GCell::isValid(), Katabatic::KbHorizontal, Katabatic::KbVertical, and GCell::updateDensity().}\par } {\xe \v getGCellGrid\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getGCellGrid} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GCellGrid} * getGCellGrid () const{\f2 [inline]}}} \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 {\b Grid} of which {\b GCell} is part of. \par }{ Referenced by GCell::checkEdgeSaturation(), GCell::getDensity(), GCell::getDown(), GCell::getLeft(), GCell::getRight(), GCell::getUp(), and GCell::stepNetDesaturate().}\par } {\xe \v getDepth\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getDepth} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDepth () 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 depth (i.e. number of routing layers) of the {\b GCell}. \par }} {\xe \v getIndex\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getIndex} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getIndex () 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 linear index of the {\b GCell} in the {\b GCellGrid} vector.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b GCellGrid} for the meaning of the index. \par }}{ Referenced by AutoSegment::canMoveUp(), GCell::hasFreeTrack(), and GCell::stepDesaturate().}\par } {\xe \v getRow\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getRow} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getRow () const}} \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 row of the {\b GCell} in the {\b GCellGrid}. \par }{ References BaseGrid::getRow().}\par { Referenced by GCell::checkDensity(), and AutoSegment::computeOptimal().}\par } {\xe \v getColumn\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getColumn} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getColumn () const}} \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 Column of the {\b GCell} in the {\b GCellGrid}. \par }{ References BaseGrid::getColumn().}\par { Referenced by GCell::checkDensity(), and AutoSegment::computeOptimal().}\par } {\xe \v getLeft\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getLeft} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GCell} * getLeft () const}} \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 left neighbor of the {\b GCell} ({\f2 NULL} if it is the leftmost {\b GCell}). \par }{ References GCell::getGCellGrid(), and Grid< GCellT >::getGCellLeft().}\par { Referenced by AutoVertical::canMoveULeft(), and AutoVertical::moveULeft().}\par } {\xe \v getRight\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getRight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GCell} * getRight () const}} \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 right neighbor of the {\b GCell} ({\f2 NULL} if it is the rightmost {\b GCell}). \par }{ References GCell::getGCellGrid(), and Grid< GCellT >::getGCellRight().}\par { Referenced by AutoHorizontal::_makeDogleg(), AutoHorizontal::_postCreate(), AutoHorizontal::_preDestroy(), AutoHorizontal::canMoveULeft(), AutoHorizontal::canMoveURight(), AutoVertical::canMoveURight(), GCell::checkEdgeSaturation(), AutoHorizontal::getGCells(), AutoSegment::makeDogleg(), AutoHorizontal::moveULeft(), AutoHorizontal::moveURight(), and AutoVertical::moveURight().}\par } {\xe \v getUp\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getUp} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GCell} * getUp () const}} \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 top neighbor of the {\b GCell} ({\f2 NULL} if it is the topmost {\b GCell}). \par }{ References GCell::getGCellGrid(), and Grid< GCellT >::getGCellUp().}\par { Referenced by AutoVertical::_makeDogleg(), AutoVertical::_postCreate(), AutoVertical::_preDestroy(), AutoVertical::canMoveULeft(), AutoHorizontal::canMoveURight(), AutoVertical::canMoveURight(), GCell::checkEdgeSaturation(), AutoVertical::getGCells(), AutoSegment::makeDogleg(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), and AutoVertical::moveURight().}\par } {\xe \v getDown\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getDown} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GCell} * getDown () const}} \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 Returns:} The bottom neighbor of the {\b GCell} ({\f2 NULL} if it is the bottommost {\b GCell}). \par }{ References Grid< GCellT >::getGCellDown(), and GCell::getGCellGrid().}\par { Referenced by AutoHorizontal::canMoveULeft(), and AutoHorizontal::moveULeft().}\par } {\xe \v translate\:Katabatic::GCell} {\xe \v Katabatic::GCell\:translate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void translate (const {\b DbU::Unit} & , const {\b DbU::Unit} & ){\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 Required to exists as a {\b Hurricane::Go} derived class. But must never be used... \par }} {\xe \v getBoundingBox\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getBoundingBox} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Box} getBoundingBox () 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 Returns:} The bounding box of the {\b GCell}, with the top right shrink applied. \par }{ Referenced by AutoSegment::AutoSegment(), AutoSegment::computeOptimal(), and AutoContactTerminal::getNativeConstraintBox().}\par } {\xe \v getX\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getX} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getX () const{\f2 [inline]}}} \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 Returns:} The lower left X coordinate of the {\b GCell} box. \par }{ References Box::getXMin().}\par { Referenced by AutoHorizontal::_makeDogleg(), AutoHorizontal::_postCreate(), AutoHorizontal::_preDestroy(), AutoContact::getCBXMax(), AutoContact::getCBXMin(), AutoSegment::getOrigin(), AutoContact::setCBXMax(), and AutoContact::setCBXMin().}\par } {\xe \v getY\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getY} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getY () const{\f2 [inline]}}} \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 lower left Y coordinate of the {\b GCell} box. \par }{ References Box::getYMin().}\par { Referenced by AutoVertical::_makeDogleg(), AutoVertical::_postCreate(), AutoVertical::_preDestroy(), AutoContact::getCBYMax(), AutoContact::getCBYMin(), AutoSegment::getOrigin(), AutoContact::setCBYMax(), and AutoContact::setCBYMin().}\par } {\xe \v getXMax\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getXMax} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getXMax () const{\f2 [inline]}}} \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 upper right X coordinate of the {\b GCell} box (top right shrink applied). \par }{ References Box::getXMax().}\par { Referenced by AutoHorizontal::_makeDogleg(), AutoSegment::getExtremity(), and AutoContact::setCBXMax().}\par } {\xe \v getYMax\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getYMax} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getYMax () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAATF} {\bkmkend AAAAAAAATF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The upper right Y coordinate of the {\b GCell} box (top right shrink applied). \par }{ References Box::getYMax().}\par { Referenced by AutoVertical::_makeDogleg(), AutoSegment::getExtremity(), and AutoContact::setCBYMax().}\par } {\xe \v getSide\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getSide} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getSide (unsigned int {\i direction}) const}} \par {\bkmkstart AAAAAAAATG} {\bkmkend AAAAAAAATG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The interval corresponding to the side position of the {\b GCell} box, in {\f2 direction} . \par }{ References Box::getXMax(), Box::getXMin(), Box::getYMax(), Box::getYMin(), Katabatic::KbHorizontal, and Katabatic::KbVertical.}\par { Referenced by AutoHorizontal::_canSlacken(), AutoVertical::_canSlacken(), AutoSegment::makeDogleg(), AutoHorizontal::moveULeft(), AutoVertical::moveULeft(), AutoHorizontal::moveURight(), AutoVertical::moveURight(), and AutoSegment::toConstraintAxis().}\par } {\xe \v getHCapacity\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getHCapacity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getHCapacity () const}} \par {\bkmkstart AAAAAAAATH} {\bkmkend AAAAAAAATH} { \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 number of track that can go through the {\b GCell} in the horizontal direction. For a detailed explanation of the computation see {\b Track Computation}. \par }}{ References Box::getHeight().}\par { Referenced by GCell::hasFreeTrack(), and GCell::updateDensity().}\par } {\xe \v getVCapacity\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getVCapacity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getVCapacity () const}} \par {\bkmkstart AAAAAAAATI} {\bkmkend AAAAAAAATI} { \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 number of track that can go through the {\b GCell} in the vertical direction. For a detailed explanation of the computation see {\b Track Computation}. \par }}{ References Box::getWidth().}\par { Referenced by GCell::hasFreeTrack(), and GCell::updateDensity().}\par } {\xe \v getDensity\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getDensity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getDensity (unsigned int {\i flags} = {\f2 0}) const}} \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 average density of the {\b GCell}, for all the depths.\par {\b Saturation & Density Computation}, {\b GCell Lazy Evaluation}. \par }{ References GCellGrid::AverageHDensity, GCellGrid::AverageHVDensity, GCellGrid::AverageVDensity, GCellGrid::getDensityMode(), GCell::getGCellGrid(), GCell::isValid(), GCellGrid::MaxDensity, GCellGrid::MaxHDensity, GCellGrid::MaxHVDensity, GCellGrid::MaxVDensity, and GCell::updateDensity().}\par { Referenced by GCell::isAboveDensity(), and GCell::isSaturated().}\par } {\xe \v getCDensity\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getCDensity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getCDensity (unsigned int {\i flags} = {\f2 0}) const{\f2 [inline]}}} \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 density of contacts.\par {\b Saturation & Density Computation}, {\b GCell Lazy Evaluation}. \par }{ References GCell::isValid(), and GCell::updateDensity().}\par } {\xe \v getWDensity\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getWDensity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getWDensity (unsigned int {\i depth}, unsigned int {\i flags} = {\f2 0}) const{\f2 [inline]}}} \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 density of wires at {\f2 depth} .\par {\b Saturation & Density Computation}, {\b GCell Lazy Evaluation}. \par }{ References GCell::isValid(), and GCell::updateDensity().}\par { Referenced by AutoHorizontal::canMoveULeft(), AutoVertical::canMoveULeft(), AutoHorizontal::canMoveURight(), and AutoVertical::canMoveURight().}\par } {\xe \v getBlockage\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getBlockage} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getBlockage (unsigned int {\i depth}) const{\f2 [inline]}}} \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 total length of blockage wire on layer at {\f2 depth} . \par }} {\xe \v getFragmentation\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getFragmentation} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getFragmentation (unsigned int {\i depth}) const{\f2 [inline]}}} \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 longest free fragment size on layer {\f2 depth} (in percent). \par }{ References GCell::isValid(), and GCell::updateDensity().}\par { Referenced by AutoSegment::canMoveUp().}\par } {\xe \v getFeedthroughs\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getFeedthroughs} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getFeedthroughs (unsigned int {\i depth}) const{\f2 [inline]}}} \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 estimate number of {\i occupied} tracks on layer {\f2 depth} .\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b Feedthrough Computation} \par }}{ References GCell::isValid(), and GCell::updateDensity().}\par } {\xe \v getGlobalsCount\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getGlobalsCount} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getGlobalsCount (unsigned int {\i depth}) const{\f2 [inline]}}} \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 number of global wires that go completly through the {\b GCell} at layer {\f2 depth} . This do not includes the global wires that begins or ends in the {\b GCell}. \par }{ References GCell::isValid(), and GCell::updateDensity().}\par } {\xe \v getHSegments\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getHSegments} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const vector< {\b AutoSegment} * > & getHSegments () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAATQ} {\bkmkend AAAAAAAATQ} { \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 vector of all horizontal AutoSegments that completly goes through the {\b GCell}. \par }}} {\xe \v getVSegments\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getVSegments} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const vector< {\b AutoSegment} * > & getVSegments () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAATR} {\bkmkend AAAAAAAATR} { \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 vector of all vertical AutoSegments that completly goes through the {\b GCell}. \par }}} {\xe \v getContacts\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getContacts} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const vector< {\b AutoContact} * > & getContacts () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAATS} {\bkmkend AAAAAAAATS} { \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 vector of all AutoContacts owned by the {\b GCell}. \par }}} {\xe \v getHStartSegments\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getHStartSegments} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments} getHStartSegments ()}} \par {\bkmkstart AAAAAAAATT} {\bkmkend AAAAAAAATT} { \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 Collection of the horizontal AutoSegments that starts from this {\b GCell}. \par }}{ References Katabatic::KbHorizontal, and Katabatic::KbSource.}\par { Referenced by GCell::getStartSegments().}\par } {\xe \v getVStartSegments\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getVStartSegments} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments} getVStartSegments ()}} \par {\bkmkstart AAAAAAAATU} {\bkmkend AAAAAAAATU} { \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 Collection of the vertical AutoSegments that starts from this {\b GCell}. \par }}{ References Katabatic::KbSource, and Katabatic::KbVertical.}\par { Referenced by GCell::getStartSegments().}\par } {\xe \v getHStopSegments\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getHStopSegments} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments} getHStopSegments ()}} \par {\bkmkstart AAAAAAAATV} {\bkmkend AAAAAAAATV} { \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 Collection of the horizontal AutoSegments that stops in this {\b GCell}. \par }}{ References Katabatic::KbHorizontal, and Katabatic::KbTarget.}\par { Referenced by GCell::getStopSegments().}\par } {\xe \v getVStopSegments\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getVStopSegments} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments} getVStopSegments ()}} \par {\bkmkstart AAAAAAAATW} {\bkmkend AAAAAAAATW} { \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 Collection of the vertical AutoSegments that stops in this {\b GCell}. \par }}{ References Katabatic::KbTarget, and Katabatic::KbVertical.}\par { Referenced by GCell::getStopSegments().}\par } {\xe \v getStartSegments\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getStartSegments} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments} getStartSegments (unsigned int {\i direction}){\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 \par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Returns:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid A Collection of the horizontal or vertical AutoSegments that starts from this {\b GCell} according to {\f2 direction} . \par }}{ References GCell::getHStartSegments(), GCell::getVStartSegments(), and Katabatic::KbHorizontal.}\par } {\xe \v getStopSegments\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getStopSegments} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegments} getStopSegments (unsigned int {\i direction}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAATY} {\bkmkend AAAAAAAATY} { \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 Collection of the horizontal or vertical AutoSegments that stops in this {\b GCell} according to {\f2 direction} . \par }}{ References GCell::getHStopSegments(), GCell::getVStopSegments(), and Katabatic::KbHorizontal.}\par } {\xe \v getRoutingPads\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getRoutingPads} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getRoutingPads (set< {\b RoutingPad} *> & {\i rps})}} \par {\bkmkstart AAAAAAAATZ} {\bkmkend AAAAAAAATZ} { \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 size of the RoutingPad set.\par }Fills the {\f2 rps} set with all the RoutingPads that appears in this {\b GCell}. (looks at all the anchors of the owned {\b AutoContact}) \par }{ Referenced by GCell::rpDesaturate().}\par } {\xe \v getKey\:Katabatic::GCell} {\xe \v Katabatic::GCell\:getKey} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Key} & getKey () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAUA} {\bkmkend AAAAAAAAUA} { \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 sorting key of the {\b GCell}.\par }{{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b GCell Sorting Key} \par }}} {\xe \v checkDensity\:Katabatic::GCell} {\xe \v Katabatic::GCell\:checkDensity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t checkDensity () const}} \par {\bkmkstart AAAAAAAAUB} {\bkmkend AAAAAAAAUB} { \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 {\f2 1} if the {\b GCell} is saturated, 0 otherwise.\par }Check, if the {\b GCell} is saturated, layer by layer. Issue a warning if that is the case. \par }{ References Session::doWarnGCellOverload(), GCell::getColumn(), GCell::getName(), Session::getRoutingGauge(), GCell::getRow(), Session::isInDemoMode(), GCell::isSaturated(), GCell::isValid(), and GCell::updateDensity().}\par { Referenced by GCell::updateDensity().}\par } {\xe \v checkEdgeSaturation\:Katabatic::GCell} {\xe \v Katabatic::GCell\:checkEdgeSaturation} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool checkEdgeSaturation (size_t {\i hreserved}, size_t {\i vreserved}) const}} \par {\bkmkstart AAAAAAAAUC} {\bkmkend AAAAAAAAUC} { \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 {\b true} if the Up/Right edge is over the {\f2 threshold} .\par }Check if the number of AutoSegments crossing the Up & Right edges of the {\b GCell} exceed {\f2 threshold} . The {\f2 thresold} must be expressed as a percentage of the full capacity of the edges. The overload is computed as a whole and not depth by depth. \par }{ References GCell::getGCellGrid(), GCellGrid::getHEdgeCapacity(), GCell::getRight(), GCell::getUp(), GCellGrid::getVEdgeCapacity(), AutoSegment::isLocal(), and Session::lookup().}\par } {\xe \v addBlockage\:Katabatic::GCell} {\xe \v Katabatic::GCell\:addBlockage} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void addBlockage (unsigned int {\i depth}, {\b DbU::Unit} {\i length})}} \par {\bkmkstart AAAAAAAAUD} {\bkmkend AAAAAAAAUD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Adds {\f2 length} of wire blockage to layer {\f2 depth} . \par }{ References DbU::getValueString().}\par } {\xe \v addHSegment\:Katabatic::GCell} {\xe \v Katabatic::GCell\:addHSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void addHSegment ({\b AutoSegment} * {\i segment}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAUE} {\bkmkend AAAAAAAAUE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Adds {\f2 segment} to the list of horizontal feedthroughs. \par }{ Referenced by AutoHorizontal::_postCreate(), AutoVertical::moveULeft(), and AutoVertical::moveURight().}\par } {\xe \v addVSegment\:Katabatic::GCell} {\xe \v Katabatic::GCell\:addVSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void addVSegment ({\b AutoSegment} * {\i segment}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAUF} {\bkmkend AAAAAAAAUF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Adds {\f2 segment} to the list of vertical feedthroughs. \par }{ Referenced by AutoVertical::_postCreate(), AutoHorizontal::moveULeft(), and AutoHorizontal::moveURight().}\par } {\xe \v addContact\:Katabatic::GCell} {\xe \v Katabatic::GCell\:addContact} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void addContact ({\b AutoContact} * {\i contact}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAUG} {\bkmkend AAAAAAAAUG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Adds {\f2 contact} to the list of contacts owned by this {\b GCell}. \par }{ Referenced by AutoContact::setGCell().}\par } {\xe \v removeVSegment\:Katabatic::GCell} {\xe \v Katabatic::GCell\:removeVSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void removeVSegment ({\b AutoSegment} * {\i segment})}} \par {\bkmkstart AAAAAAAAUH} {\bkmkend AAAAAAAAUH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Removes {\f2 segment} to the list of vertical feedthroughs. \par }{ Referenced by AutoVertical::_makeDogleg(), AutoVertical::_preDestroy(), AutoHorizontal::moveULeft(), and AutoHorizontal::moveURight().}\par } {\xe \v removeHSegment\:Katabatic::GCell} {\xe \v Katabatic::GCell\:removeHSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void removeHSegment ({\b AutoSegment} * {\i segment})}} \par {\bkmkstart AAAAAAAAUI} {\bkmkend AAAAAAAAUI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Removes {\f2 segment} to the list of horizontal feedthroughs. \par }{ Referenced by AutoHorizontal::_makeDogleg(), AutoHorizontal::_preDestroy(), AutoVertical::moveULeft(), and AutoVertical::moveURight().}\par } {\xe \v removeContact\:Katabatic::GCell} {\xe \v Katabatic::GCell\:removeContact} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void removeContact ({\b AutoContact} * {\i contact})}} \par {\bkmkstart AAAAAAAAUJ} {\bkmkend AAAAAAAAUJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Removes {\f2 contact} to the list of contacts owned by this {\b GCell}. \par }{ References AutoContact::base().}\par } {\xe \v updateContacts\:Katabatic::GCell} {\xe \v Katabatic::GCell\:updateContacts} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateContacts ()}} \par {\bkmkstart AAAAAAAAUK} {\bkmkend AAAAAAAAUK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Force a geometry update on all the {\b AutoContact} of the {\b GCell}. \par }} {\xe \v updateDensity\:Katabatic::GCell} {\xe \v Katabatic::GCell\:updateDensity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t updateDensity ()}} \par {\bkmkstart AAAAAAAAUL} {\bkmkend AAAAAAAAUL} { \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 GCell} is saturated.\par Update the various densities of the {\b GCell}. No actual computation is performed if the {\b GCell} is {\i not} invalidated. \par }{ References GCell::checkDensity(), GCell::getHCapacity(), Box::getHeight(), RoutingGauge::getLayerDepth(), Session::getRoutingGauge(), GCell::getVCapacity(), Box::getWidth(), Box::getXMax(), Box::getXMin(), Box::getYMax(), Box::getYMin(), GCell::isSaturated(), GCell::isValid(), Katabatic::KbHorizontal, and Katabatic::KbVertical.}\par { Referenced by GCell::checkDensity(), GCell::getCDensity(), GCell::getDensity(), GCell::getFeedthroughs(), GCell::getFragmentation(), GCell::getGlobalsCount(), GCell::getWDensity(), GCell::hasFreeTrack(), GCell::isAboveDensity(), GCell::stepDesaturate(), and GCell::stepNetDesaturate().}\par } {\xe \v updateKey\:Katabatic::GCell} {\xe \v Katabatic::GCell\:updateKey} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateKey (unsigned int {\i depth}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAUM} {\bkmkend AAAAAAAAUM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Update the {\b GCell} key with the new density at layer {\f2 depth} .\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b GCell Sorting Key}. \par }}{ References GCell::Key::update().}\par } {\xe \v rpDesaturate\:Katabatic::GCell} {\xe \v Katabatic::GCell\:rpDesaturate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool rpDesaturate (set< {\b Net} *> & {\i nets})}} \par {\bkmkstart AAAAAAAAUN} {\bkmkend AAAAAAAAUN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid If the number of RoutingPad in the first routing layer exceed the {\b Session::getSaturateRp()} threshold, force a desaturation of layer {\f2 depth} 1 until it is below 0.5.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b GCell Desaturation / Layer Assignment} \par }}{ References Session::getRoutingLayer(), GCell::getRoutingPads(), Session::getSaturateRp(), Katabatic::KbForceMove, and GCell::stepDesaturate().}\par } {\xe \v stepDesaturate\:Katabatic::GCell} {\xe \v Katabatic::GCell\:stepDesaturate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool stepDesaturate (unsigned int {\i depth}, set< {\b Net} *> & {\i globalNets}, {\b AutoSegment} *& {\i moved}, unsigned int {\i flags} = {\f2 0})}} \par {\bkmkstart AAAAAAAAUO} {\bkmkend AAAAAAAAUO} { \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 depth} \cell }{The depth to desaturate. \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 globalNets} \cell }{The set of Nets of which at least one segment has been moved up. \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 moved} \cell }{The moved up {\b AutoSegment}. \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 }{If KbForceMove is set, force one {\b AutoSegment} to move up, event if the {\b GCell} is not saturated in the relevant depth.\cell } {\row } } {\b Returns:} {\b true} if an {\b AutoSegment} has actually been moved up.\par Perform the atomic desaturation, that is move up one {\b AutoSegment} from layer {\f2 depth} to layer {\f2 depth+2} , longuests AutoSegments are moved first. Only global feedthrough AutoSegments are candidates to be moved up. The Net owning the moved up segment is added to the {\f2 globalNets} set. If the {\b GCell} is not saturated on layer {\f2 depth} , nothing is done. If the {\f2 forced} flag is set, one global {\b AutoSegment} is moved up regardless of the saturation status.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b GCell Desaturation / Layer Assignment} \par }}{ References GCell::getIndex(), RoutingGauge::getLayerDepth(), Session::getRoutingGauge(), GCell::isSaturated(), Katabatic::KbForceMove, Katabatic::KbHorizontal, Katabatic::KbVertical, and GCell::updateDensity().}\par { Referenced by GCell::rpDesaturate().}\par } {\xe \v stepNetDesaturate\:Katabatic::GCell} {\xe \v Katabatic::GCell\:stepNetDesaturate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool stepNetDesaturate (unsigned int {\i depth}, set< {\b Net} *> & {\i globalNets}, {\b GCell::SetIndex} & {\i invalidateds})}} \par {\bkmkstart AAAAAAAAUP} {\bkmkend AAAAAAAAUP} { \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 depth} \cell }{The depth to desaturate. \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 globalNets} \cell }{The set of Nets of which at least one segment has been moved up. \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 invalidateds} \cell }{The set of {\b GCell} ids that have been invalidateds.\cell } {\row } } {\b Returns:} {\b true} if a Net has been moved up.\par Perform a desaturation by whole Net trunk. Select the longest feedthrough {\b AutoSegment} in layer {\f2 depth} , then attempt to move up the whole Net (all it's global AutoSegments are moved up).\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid See also:\par}\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid {\b GCell Desaturation / Layer Assignment} \par }}{ References GCell::getGCellGrid(), RoutingGauge::getLayerDepth(), Session::getRoutingGauge(), Katabatic::KbHorizontal, Katabatic::KbVertical, and GCell::updateDensity().}\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 GCell.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid GCell.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid GCell.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 GCellDensitySet Class Reference\par \pard\plain {\tc\tcl2 \v GCellDensitySet} {\xe \v GCellDensitySet} {\bkmkstart AAAAAAAAUY} {\bkmkend AAAAAAAAUY} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} Set, sorted by density. }}\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 GCellDensitySet} (unsigned int depth)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b GCellDensitySet} (unsigned int depth, const std::vector< {\b GCell} *> &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b ~GCellDensitySet} ()\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 const std::set< {\b GCell} *, GCell::CompareByKey > & {\b getGCells} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b insert} ({\b GCell} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b erase} ({\b GCell} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b unqueue} ({\b GCell} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b requeue} ()\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 GCell} Set, sorted by density. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid A small container helper to manage a set of {\b GCell} sorted by density on a specific layer {\f2 depth} .\par The helper is implemented in term of a set. Once inserted in a set an element must not have is sorting key changed. But {\b GCell} density may change due to {\b AutoSegment} modifications during the lifetime of the set. To circumvent this problem, the {\b GCell} provide a key attribute to be used specifically with {\b GCellDensitySet}. This key act as a cached copy of the {\b GCell} density which is updated {\i only} by a call to {\b GCell::updateKey()} (and {\i not} {\b GCell::updateDensity()}). {\b GCell} which density have changed and key has to be updated must be signaled to set with the GCellDensityQueue::unqueue() method. When we want to update the sorting of the set on the new densities, we call {\b GCellDensitySet::requeue()} which, for each invalidated {\b GCell} do:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Remove the {\b GCell} from the set.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Update the key (call {\b GCell::updateKey()}).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Reinsert the {\b GCell} in the set (thus with the updated key).\par} Typical usage: { \par \pard\plain \s40\li0\widctlpar\adjustright \shading1000\cbpat8 \f2\fs16\cgrid GCellDensitySet gcells ( 2, *(getGCellGrid()->getGCellVector()) );\par \par while ( true ) \{\par bool optimized = false;\par \par std::set::const_iterator igcell = gcells.getGCells().begin();\par for ( ; igcell != gcells.getGCells().end() ; ++igcell ) \{\par if ( doSomeOptimization(*igcell) ) \{\par optimized = true;\par gcells.unqueue( *igcell );\par \}\par \}\par \par if (not optimized) break;\par \par gcells.requeue();\par \}\par } \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 GCellDensitySet\:Katabatic::GCellDensitySet} {\xe \v Katabatic::GCellDensitySet\:GCellDensitySet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GCellDensitySet} (unsigned int {\i depth})}} \par {\bkmkstart AAAAAAAAUZ} {\bkmkend AAAAAAAAUZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a new empty {\b GCellDensitySet}, sorting on density of layer {\f2 depth} . \par }} {\xe \v GCellDensitySet\:Katabatic::GCellDensitySet} {\xe \v Katabatic::GCellDensitySet\:GCellDensitySet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GCellDensitySet} (unsigned int {\i depth}, const std::vector< {\b GCell} *> & {\i gcells})}} \par {\bkmkstart AAAAAAAAVA} {\bkmkend AAAAAAAAVA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a new empty {\b GCellDensitySet}, sorting on density of layer {\f2 depth} . Load the queue with the GCells supplied in the {\f2 gcells} vector. \par }{ References GCellDensitySet::requeue().}\par } {\xe \v ~GCellDensitySet\:Katabatic::GCellDensitySet} {\xe \v Katabatic::GCellDensitySet\:~GCellDensitySet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b ~{\b GCellDensitySet} ()}} \par {\bkmkstart AAAAAAAAVB} {\bkmkend AAAAAAAAVB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Delete a {\b GCellDensitySet}, if the queue is not empty, issue a warning. \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\:Katabatic::GCellDensitySet} {\xe \v Katabatic::GCellDensitySet\:empty} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool empty () 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:} {\b true} if the queue is empty. \par }} {\xe \v size\:Katabatic::GCellDensitySet} {\xe \v Katabatic::GCellDensitySet\:size} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t size () 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 numbers of elements in the queue. \par }} {\xe \v getGCells\:Katabatic::GCellDensitySet} {\xe \v Katabatic::GCellDensitySet\:getGCells} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const std::set< {\b GCell} *, GCell::CompareByKey > & getGCells () 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 list of GCells currently in the queue. \par }} {\xe \v insert\:Katabatic::GCellDensitySet} {\xe \v Katabatic::GCellDensitySet\:insert} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t insert ({\b GCell} * {\i gcell}){\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 Insert {\f2 gcell} into the set. \par }} {\xe \v erase\:Katabatic::GCellDensitySet} {\xe \v Katabatic::GCellDensitySet\:erase} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t erase ({\b GCell} * {\i gcell}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAVG} {\bkmkend AAAAAAAAVG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Remove {\f2 gcell} from the set. \par }} {\xe \v unqueue\:Katabatic::GCellDensitySet} {\xe \v Katabatic::GCellDensitySet\:unqueue} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void unqueue ({\b GCell} * {\i gcell}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAVH} {\bkmkend AAAAAAAAVH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Invalidate {\f2 gcell} . The density of {\f2 gcell} may have changed and needs to be reinserted into the queue. It is temporarily set asides until the next call to {\b GCellDensitySet::requeue()}. \par }} {\xe \v requeue\:Katabatic::GCellDensitySet} {\xe \v Katabatic::GCellDensitySet\:requeue} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void requeue ()}} \par {\bkmkstart AAAAAAAAVI} {\bkmkend AAAAAAAAVI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Reinsert in the queue all the GCells that have been previously invalidated by a call to {\b GCellDensitySet::unqueue()}. This function calls {\b GCell::updateKey()} before reinserting the {\b GCell}. \par }{ Referenced by GCellDensitySet::GCellDensitySet().}\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 GCell.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid GCell.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid GCell.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 GCellGrid Class Reference\par \pard\plain {\tc\tcl2 \v GCellGrid} {\xe \v GCellGrid} {\bkmkstart AAAAAAAAVJ} {\bkmkend AAAAAAAAVJ} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} {\b Grid}. }}\par Inheritance diagram for GCellGrid:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1GCellGrid__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 DensityMode} \{ {\b AverageHVDensity} =1, {\b AverageHDensity} =2, {\b AverageVDensity} =3, {\b MaxHVDensity} =4, {\b MaxVDensity} =5, {\b MaxHDensity} =6, {\b MaxDensity} =7 \}\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 Cell} * {\b getCell} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b KatabaticEngine} * {\b getKatabatic} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid unsigned int {\b getDensityMode} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getHEdgeCapacity} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getVEdgeCapacity} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Interval} {\b getUSide} (unsigned int) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b checkDensity} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b updateDensity} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b updateContacts} (unsigned int flags={\b KbOpenSession})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setDensityMode} (unsigned int)\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Protected 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 _postCreate} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _preDestroy} ()\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Static Protected 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 GCellGrid} * {\b create} ({\b KatabaticEngine} *)\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 GCell} {\b Grid}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b GCell} {\b Grid} of {\b Katabatic}. Although the base template class {\b Grid} support irregular grid, the {\b GCellGrid} is regular, following the Knik global router GCells. Only the topmost row and leftmost column may have different height or width to cope with the design real size.\par Due to the regular nature of the grid, the horizontal & vertical edges capacities are all identical, and initialized from the {\b Katabatic} Configuration.\par The grid is build from the Knik global routing, so obviously a KnikEngine must be attached to the Cell when building the {\b GCellGrid}. An error is thrown otherwise. \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 DensityMode\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:DensityMode} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b enum {\b DensityMode}}} \par {\bkmkstart AAAAAAAAVK} {\bkmkend AAAAAAAAVK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Various ways of computing the overall density of a {\b GCell}. \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 AverageHVDensity\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:AverageHVDensity} {\qr AverageHVDensity{\bkmkstart AAAAAAAAVL} {\bkmkend AAAAAAAAVL} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The average density all depths accounted. \par }\cell }{\row } {\xe \v AverageHDensity\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:AverageHDensity} {\qr AverageHDensity{\bkmkstart AAAAAAAAVM} {\bkmkend AAAAAAAAVM} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The average density of horizontal layers. \par }\cell }{\row } {\xe \v AverageVDensity\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:AverageVDensity} {\qr AverageVDensity{\bkmkstart AAAAAAAAVN} {\bkmkend AAAAAAAAVN} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The average density of horizontal layers. \par }\cell }{\row } {\xe \v MaxHVDensity\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:MaxHVDensity} {\qr MaxHVDensity{\bkmkstart AAAAAAAAVO} {\bkmkend AAAAAAAAVO} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The maximum of the average horizontal & vertical densities taken as a whole. \par }\cell }{\row } {\xe \v MaxVDensity\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:MaxVDensity} {\qr MaxVDensity{\bkmkstart AAAAAAAAVP} {\bkmkend AAAAAAAAVP} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The maximum of the average vertical densities taken depth by depth. \par }\cell }{\row } {\xe \v MaxHDensity\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:MaxHDensity} {\qr MaxHDensity{\bkmkstart AAAAAAAAVQ} {\bkmkend AAAAAAAAVQ} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The maximum of the average horizontal densities taken depth by depth. \par }\cell }{\row } {\xe \v MaxDensity\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:MaxDensity} {\qr MaxDensity{\bkmkstart AAAAAAAAVR} {\bkmkend AAAAAAAAVR} \cell }{{\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The maximum of the average horizontal & vertical densities taken depth by depth. \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 getCell\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:getCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Cell} * getCell () const}} \par {\bkmkstart AAAAAAAAVS} {\bkmkend AAAAAAAAVS} { \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 }{ Referenced by GCellGrid::_postCreate().}\par } {\xe \v getKatabatic\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:getKatabatic} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b KatabaticEngine} * getKatabatic () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAVT} {\bkmkend AAAAAAAAVT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The associated {\b KatabaticEngine}. \par }} {\xe \v getDensityMode\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:getDensityMode} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getDensityMode () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAVU} {\bkmkend AAAAAAAAVU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The computation mode of the {\b GCell} densities. \par }{ Referenced by GCell::getDensity().}\par } {\xe \v getHEdgeCapacity\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:getHEdgeCapacity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getHEdgeCapacity () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAVV} {\bkmkend AAAAAAAAVV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The horizontal edge capacity. As the matrix is regular it is identical for all horizontal edges. \par }{ Referenced by GCell::checkEdgeSaturation().}\par } {\xe \v getVEdgeCapacity\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:getVEdgeCapacity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getVEdgeCapacity () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAVW} {\bkmkend AAAAAAAAVW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The vertical edge capacity. As the matrix is regular it is identical for all vertical edges. \par }{ Referenced by GCell::checkEdgeSaturation().}\par } {\xe \v getUSide\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:getUSide} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Interval} getUSide (unsigned int {\i direction}) const}} \par {\bkmkstart AAAAAAAAVX} {\bkmkend AAAAAAAAVX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The side of the whole grid in {\f2 direction} . \par }{ References Box::getXMax(), Box::getXMin(), Box::getYMax(), Box::getYMin(), Katabatic::KbHorizontal, and Katabatic::KbVertical.}\par } {\xe \v checkDensity\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:checkDensity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t checkDensity () const}} \par {\bkmkstart AAAAAAAAVY} {\bkmkend AAAAAAAAVY} { \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 GCell} saturateds.\par Check all GCells for saturations. \par }{ References Grid< GCell >::getGCells().}\par } {\xe \v updateDensity\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:updateDensity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t updateDensity ()}} \par {\bkmkstart AAAAAAAAVZ} {\bkmkend AAAAAAAAVZ} { \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 GCell} saturateds.\par Force a density update on all the GCells. \par }{ References Grid< GCell >::getGCells().}\par } {\xe \v updateContacts\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:updateContacts} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void updateContacts (unsigned int {\i flags} = {\f2 {\b KbOpenSession}})}} \par {\bkmkstart AAAAAAAAWA} {\bkmkend AAAAAAAAWA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Force an update on all {\b AutoContact} on all the GCells. if {\f2 openSession} is {\b true} , enclose the update in a {\b Session}. \par }{ References Session::close(), Grid< GCell >::getGCells(), Katabatic::KbOpenSession, and Session::open().}\par { Referenced by KatabaticEngine::refresh().}\par } {\xe \v setDensityMode\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:setDensityMode} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setDensityMode (unsigned int {\i mode}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWB} {\bkmkend AAAAAAAAWB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Sets the density computation mode. \par }} {\xe \v _postCreate\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:_postCreate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _postCreate (){\f2 [protected]}, {\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAWC} {\bkmkend AAAAAAAAWC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform the {\b GCell} & {\b GCell} vector allocation.{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Read the horizontal and vertical cut lines from Knik and translate them into {\b BaseGrid::Axis}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid From the {\b BaseGrid::Axis}, deduces the exact positions of the GCells and allocate them.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The {\b GCell} allocation is done in a "row by row" fashion consistent with {\b BaseGrid} implicit assumptions. \par} }{ Reimplemented from {\b BaseGrid} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQR \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par { References BaseGrid::Axis::addGraduation(), GCellGrid::getCell(), BaseGrid::getColumns(), BaseGrid::getRows(), BaseGrid::Axis::getSize(), and BaseGrid::Axis::sort().}\par } {\xe \v _preDestroy\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:_preDestroy} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void _preDestroy (){\f2 [protected]}, {\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAWD} {\bkmkend AAAAAAAAWD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The GCells are deleted at this point. \par }{ Reimplemented from {\b BaseGrid} ({\i p.{\field\fldedit {\*\fldinst PAGEREF AAAAAAAAQR \\*MERGEFORMAT}{\fldrslt pagenum}}}).}\par } {\xe \v create\:Katabatic::GCellGrid} {\xe \v Katabatic::GCellGrid\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GCellGrid} * create ({\b KatabaticEngine} * {\i ktbt}){\f2 [static]}, {\f2 [protected]}}} \par {\bkmkstart AAAAAAAAWE} {\bkmkend AAAAAAAAWE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid API-space contructor. \par }{ References grid().}\par { Referenced by KatabaticEngine::createDetailedGrid().}\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 GCellGrid.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid GCellGrid.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid GCellGrid.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 GCellTopology Class Reference\par \pard\plain {\tc\tcl2 \v GCellTopology} {\xe \v GCellTopology} {\bkmkstart AAAAAAAABF} {\bkmkend AAAAAAAABF} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Build the wiring for a Net inside a GCell ({\b internal} ). }}\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 void {\b doRp_AutoContacts} ({\b GCell} *, {\b Component} *, {\b AutoContact} *&source, {\b AutoContact} *&target, unsigned int flags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b AutoContact} * {\b doRp_Access} ({\b GCell} *, {\b Component} *, unsigned int flags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b AutoContact} * {\b doRp_AccessPad} ({\b RoutingPad} *, unsigned int flags)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b doRp_StairCaseH} ({\b GCell} *, {\b Component} *rp1, {\b Component} *rp2)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b doRp_StairCaseV} ({\b GCell} *, {\b Component} *rp1, {\b Component} *rp2)\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Private 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 _do_xG} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_xG_1Pad} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_1G_1M1} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_1G_xM1} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_xG_xM1_xM3} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_xG_1M1_1M2} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_xG_xM2} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_1G_1M3} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b _do_xG_xM3} ()\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 Build the wiring for a Net inside a GCell ({\b internal} ). \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid As this class is called to initially construct the {\b Katabatic} wiring, it must build a {\b connex} wiring. That is without gaps in layer depth, because the topology restauration mechanism ({\b AutoContact::updateTopology()}) of the AutoContact cannot work until all AutoSegments are revalidated at least once. The topology restauration work by creating doglegs which in turn, call the canonization, which needs all the caches to be up to date. \par }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} The documentation for this class was generated from the following file:{\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid LoadGrByNet.cpp\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 Grid< GCellT > Class Template Reference\par \pard\plain {\tc\tcl2 \v Grid< GCellT >} {\xe \v Grid< GCellT >} {\bkmkstart AAAAAAAAWF} {\bkmkend AAAAAAAAWF} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Template Class for Regular {\b Grid}. }}\par Inheritance diagram for Grid< GCellT >:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1Grid__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 GCellT * {\b getGCell} (unsigned int index) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid GCellT * {\b getGCell} (const {\b Point} p) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid GCellT * {\b getGCell} (const {\b Point} p1, const {\b Point} p2) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid GCellT * {\b getGCellLeft} (const GCellT *gcell) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid GCellT * {\b getGCellRight} (const GCellT *gcell) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid GCellT * {\b getGCellUp} (const GCellT *gcell) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid GCellT * {\b getGCellDown} (const GCellT *gcell) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b GenericCollection}< GCellT * > {\b getGCells} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b GenericCollection}< GCellT * > {\b getGCellsColumn} (unsigned int column, unsigned int rowStart, unsigned int rowStop)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b GenericCollection}< GCellT * > {\b getGCellsRow} (unsigned int row, unsigned int columnStart, unsigned int columnStop)\par } \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Protected 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 Grid} (const {\b Box} &)\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 { \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid template\par class Katabatic::Grid< GCellT >\par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Template Class for Regular {\b Grid}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Contains all general purpose methods depending on the {\b GCell} type and geometrical computations. The internal storage is still not implemented in this class. \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 Grid\:Katabatic::Grid} {\xe \v Katabatic::Grid\:Grid} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Grid} (const {\b Box} & {\i bb}){\f2 [inline]}, {\f2 [protected]}}} \par {\bkmkstart AAAAAAAAWG} {\bkmkend AAAAAAAAWG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Grid} constructor. \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 getGCell\:Katabatic::Grid} {\xe \v Katabatic::Grid\:getGCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b CGellT * getGCell (unsigned int {\i index}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWH} {\bkmkend AAAAAAAAWH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The grid object at linear index {\f2 index} in the vector. If {\f2 index} is out of bounds, return {\f2 NULL} . \par }{ Referenced by GCellTopology::doRp_AccessPad(), GCellTopology::doRp_AutoContacts(), and anonymous_namespace\{LoadGrByNet.cpp\}::singleGCell().}\par } {\xe \v getGCell\:Katabatic::Grid} {\xe \v Katabatic::Grid\:getGCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b CGellT * getGCell (const {\b Point} {\i p}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWI} {\bkmkend AAAAAAAAWI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The grid object which is under position {\f2 p} . \par }} {\xe \v getGCell\:Katabatic::Grid} {\xe \v Katabatic::Grid\:getGCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b CGellT * getGCell (const {\b Point} {\i p1}, const {\b Point} {\i p2}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWJ} {\bkmkend AAAAAAAAWJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The grid object which is under position {\f2 p1} and {\f2 p2} . Not very clear though. \par }} {\xe \v getGCellLeft\:Katabatic::Grid} {\xe \v Katabatic::Grid\:getGCellLeft} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b CGellT * getGCellLeft (const GCellT * {\i gcell}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWK} {\bkmkend AAAAAAAAWK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The left neighbor of {\f2 gcell} , {\f2 NULL} if it is the leftmost one. \par }{ Referenced by GCell::getLeft().}\par } {\xe \v getGCellRight\:Katabatic::Grid} {\xe \v Katabatic::Grid\:getGCellRight} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b CGellT * getGCellRight (const GCellT * {\i gcell}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWL} {\bkmkend AAAAAAAAWL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The rigth neighbor of {\f2 gcell} , {\f2 NULL} if it is the rightmost one. \par }{ Referenced by GCell::getRight().}\par } {\xe \v getGCellUp\:Katabatic::Grid} {\xe \v Katabatic::Grid\:getGCellUp} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b CGellT * getGCellUp (const GCellT * {\i gcell}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWM} {\bkmkend AAAAAAAAWM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The upper neighbor of {\f2 gcell} , {\f2 NULL} if it is the uppermost one. \par }{ Referenced by GCell::getUp().}\par } {\xe \v getGCellDown\:Katabatic::Grid} {\xe \v Katabatic::Grid\:getGCellDown} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b CGellT * getGCellDown (const GCellT * {\i gcell}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWN} {\bkmkend AAAAAAAAWN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The down neighbor of {\f2 gcell} , {\f2 NULL} if it is the downmost one. \par }{ Referenced by GCell::getDown().}\par } {\xe \v getGCells\:Katabatic::Grid} {\xe \v Katabatic::Grid\:getGCells} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GenericCollection}< CGellT * > getGCells (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWO} {\bkmkend AAAAAAAAWO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A GCellT Hurricane collection built upon the linear GCellT vector of the grid. \par }} {\xe \v getGCellsColumn\:Katabatic::Grid} {\xe \v Katabatic::Grid\:getGCellsColumn} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GenericCollection}< CGellT * > getGCellsColumn (unsigned int {\i column}, unsigned int {\i rowStart}, unsigned int {\i rowStop}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWP} {\bkmkend AAAAAAAAWP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A GCellT Hurricane collection that contains the part of {\f2 column} starting from {\f2 rowStart} to {\f2 rowStop} inclusive. \par }{ Referenced by KatabaticEngine::createDetailedGrid().}\par } {\xe \v getGCellsRow\:Katabatic::Grid} {\xe \v Katabatic::Grid\:getGCellsRow} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GenericCollection}< CGellT * > getGCellsRow (unsigned int {\i row}, unsigned int {\i columnStart}, unsigned int {\i columnStop}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWQ} {\bkmkend AAAAAAAAWQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} A GCellT Hurricane collection that contains the part of {\f2 row} starting from {\f2 columnStart} to {\f2 columnStop} inclusive. \par }{ Referenced by KatabaticEngine::createDetailedGrid().}\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 Grid.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Grid.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 KatabaticEngine Class Reference\par \pard\plain {\tc\tcl2 \v KatabaticEngine} {\xe \v KatabaticEngine} {\bkmkstart AAAAAAAAWR} {\bkmkend AAAAAAAAWR} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The {\b Katabatic} Tool. }}\par Inheritance diagram for KatabaticEngine:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1KatabaticEngine__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 typedef set< {\b Net} *, NetCompareByName > {\b NetSet}\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 isGMetal} (const {\b Layer} *) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isChip} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b isInDemoMode} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b doWarnOnGCellOverload} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b doDestroyBaseContact} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b doDestroyBaseSegment} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b doDestroyTool} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual const {\b Name} & {\b getName} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b EngineState} {\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 getFlags} (unsigned int mask) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Configuration * {\b getKatabaticConfiguration} ()\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 RoutingGauge} * {\b getRoutingGauge} () 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} (size_t depth) 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 getRoutingLayer} (size_t depth) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Layer} * {\b getContactLayer} (size_t depth) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b GCellGrid} * {\b getGCellGrid} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b NetSet} & {\b getRoutingNets} () 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 getGlobalThreshold} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid float {\b getSaturateRatio} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid size_t {\b getSaturateRp} () 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 getExtensionCap} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid const {\b ChipTools} & {\b getChipTools} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b xmlWriteGCellGrid} (ostream &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b xmlWriteGCellGrid} (const string &)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setState} ({\b EngineState} state)\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 void {\b setGlobalThreshold} ({\b DbU::Unit})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setSaturateRatio} (float)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b setSaturateRp} (size_t)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b printMeasures} (const string &) const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b refresh} (unsigned int flags={\b KbOpenSession})\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b createDetailedGrid} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b makePowerRails} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b loadGlobalRouting} (unsigned int method)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b slackenBorder} ({\b Box} bb, {\b Layer::Mask}, 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 slackenBlockIos} ({\b Instance} *core)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid bool {\b moveUpNetTrunk} ({\b AutoSegment} *, set< {\b Net} *> &globalNets, {\b GCell::SetIndex} &invalidateds)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b layerAssign} (unsigned int method)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b computeNetConstraints} ({\b Net} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b toOptimals} ({\b Net} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid virtual void {\b finalizeLayout} ()\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 KatabaticEngine} * {\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 const {\b Name} & {\b staticGetName} ()\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 Katabatic} Tool. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid \par {\bkmkstart AAAAAAAAWS} {\bkmkend AAAAAAAAWS} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid States of KatabaticEngine \par} {\tc\tcl2 \v States of KatabaticEngine} During it's lifecycle, the engine go through a serie of states. It only can go forward between states.{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b EngineCreation} : just after C++ object creation until the global routing is loaded.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b EngineGlobalLoaded} : {\i after} the global routing has been done. This state must be set by an external tool, {\b Katabatic} cannot know by itself when the global routing has been done (see Kite).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b EngineActive} : {\i after} the global routing has been converted into the {\b Katabatic} data structure. At this point the tool is ready to run.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b EngineDriving} : {\i during} the stage of stripping all the decorations the tool has added over the Hurricane data structure (mostly: {\b AutoContact} & {\b AutoSegment}).\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b EngineGutted} : {\i after} the tool decorations have been removed. The tool is now useless and can only be destroyed.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b EnginePreDestroying} : this special state is reached when going straight from EngineActive to the destructor, that is, skipping the EngineDriving state. That means we {\i do not} want to save whatever routing has been done. In that case, not only the tool decorations are destroyeds, but also the Hurricane data-structures they relies on (Contact, Segments).\par} \par} {\bkmkstart AAAAAAAAWT} {\bkmkend AAAAAAAAWT} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid KatabaticEngine Implementation Details \par} {\tc\tcl2 \v KatabaticEngine Implementation Details} Due to the size of the code and the fact that the main body of some methods do not need to be present in the class, the implementation of {\b KatabaticEngine} is split in several files. The list below summarize them:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 KatabaticEngine.cpp} : the core of the class, methods that really need their bodies here.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 PowerRails.cpp} : utilities to construct an abstract from all the power rails through the hierarchy.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 LayerAssign.cpp} : layer assignement related methods and helpers.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 LoadGrByNet.cpp} : global routing loader, transform global routing into {\b Katabatic} data-structure.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 NetConstraints.cpp} : compute the topological constraints of all AutoSegment/AutoContact of a Net.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 NetOptimals.cpp} : compute the optimal positions of all {\b AutoSegment} of a Net. \par} \par} }} {\pard\widctlpar\brdrb\brdrs\brdrw5\brsp20 \adjustright \par} \pard\plain \s3\sb240\sa60\keepn\widctlpar\adjustright \b\f1\cgrid Member Typedef Documentation\par \pard\plain {\xe \v NetSet\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:NetSet} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b set< {\b Net} *, NetCompareByName > {\b NetSet}}} \par {\bkmkstart AAAAAAAAWU} {\bkmkend AAAAAAAAWU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set of Net to be routed, alphabetically sorteds. \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\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:create} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b KatabaticEngine} * create ({\b Cell} * {\i cell}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAWV} {\bkmkend AAAAAAAAWV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a {\b KatabaticEngine} on {\f2 cell} . \par }} {\xe \v staticGetName\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:staticGetName} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Name} & staticGetName (){\f2 [static]}}} \par {\bkmkstart AAAAAAAAWW} {\bkmkend AAAAAAAAWW} { \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 KatabaticEngine} class of ToolEngine. \par }} {\xe \v isGMetal\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:isGMetal} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isGMetal (const {\b Layer} * {\i layer}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWX} {\bkmkend AAAAAAAAWX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} {\b true} if {\f2 layer} is one of the special (fake) metals used to build the global routing. \par }{ Referenced by AutoSegment::create().}\par } {\xe \v isChip\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:isChip} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isChip () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWY} {\bkmkend AAAAAAAAWY} { \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 hierarchy top-level of the Cell matches the one of a complete design (i.e. pads and one core instance). \par }{ References ChipTools::isChip().}\par } {\xe \v isInDemoMode\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:isInDemoMode} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isInDemoMode () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAWZ} {\bkmkend AAAAAAAAWZ} { \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 is in demo mode, that is suppress almost all warning and debug messages. \par }{ Referenced by Session::isInDemoMode().}\par } {\xe \v doWarnOnGCellOverload\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:doWarnOnGCellOverload} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool doWarnOnGCellOverload () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXA} {\bkmkend AAAAAAAAXA} { \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 should issue a warning when a {\b GCell} is overloaded (overload could be transient). \par }{ Referenced by Session::doWarnGCellOverload().}\par } {\xe \v doDestroyBaseContact\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:doDestroyBaseContact} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool doDestroyBaseContact () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXB} {\bkmkend AAAAAAAAXB} { \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 EngineDestroyBaseContact is set, meaning that when an {\b AutoContact} is destroyed, the Contact it decorates is destroyed altogether. \par }} {\xe \v doDestroyBaseSegment\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:doDestroyBaseSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool doDestroyBaseSegment () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXC} {\bkmkend AAAAAAAAXC} { \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 EngineDestroyBaseSegment is set, meaning that when an {\b AutoSegment} is destroyed, the Segment it decorates is destroyed altogether. \par }} {\xe \v doDestroyTool\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:doDestroyTool} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool doDestroyTool () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXD} {\bkmkend AAAAAAAAXD} { \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 state is beyond EngineStateGutted, that is, only waits for {\f2 {\b destroy()}} to be called. \par }{ References Katabatic::EngineGutted.}\par } {\xe \v getName\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getName} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Name} & getName () const{\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAXE} {\bkmkend AAAAAAAAXE} { \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 KatabaticEngine} class of ToolEngine. \par }{ Implements {\b ToolEngine}.}\par } {\xe \v getState\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b EngineState} getState () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXF} {\bkmkend AAAAAAAAXF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The state the tool is currently in. \par }} {\xe \v getFlags\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getFlags} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b unsigned int getFlags (unsigned int {\i mask}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXG} {\bkmkend AAAAAAAAXG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\i anded} combination of the tool flags and {\f2 mask} . \par }} {\xe \v getKatabaticConfiguration\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getKatabaticConfiguration} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b Configuration * getKatabaticConfiguration (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXH} {\bkmkend AAAAAAAAXH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The Configuration of {\b Katabatic}. In this class it is redundant with {\b getConfiguration()}, but may be useful in derived classes. \par }} {\xe \v getConfiguration\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getConfiguration} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b Configuration * getConfiguration (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAXI} {\bkmkend AAAAAAAAXI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The Configuration of the current ToolEngine. \par }} {\xe \v getRoutingGauge\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getRoutingGauge} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingGauge} * getRoutingGauge () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXJ} {\bkmkend AAAAAAAAXJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The RoutingGauge (Configuration shortcut). \par }} {\xe \v getLayerGauge\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getLayerGauge} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingLayerGauge} * getLayerGauge (size_t {\i depth}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXK} {\bkmkend AAAAAAAAXK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The RoutingLayerGauge associated to {\f2 depth} (Configuration shortcut). \par }} {\xe \v getRoutingLayer\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getRoutingLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Layer} * getRoutingLayer (size_t {\i depth}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXL} {\bkmkend AAAAAAAAXL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The routing Layer associated to {\f2 depth} (Configuration shortcut). \par }} {\xe \v getContactLayer\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getContactLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Layer} * getContactLayer (size_t {\i depth}) const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXM} {\bkmkend AAAAAAAAXM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The contact Layer associated to {\f2 depth} (Configuration shortcut). \par }} {\xe \v getGCellGrid\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getGCellGrid} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GCellGrid} * getGCellGrid () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXN} {\bkmkend AAAAAAAAXN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The {\b GCellGrid}. \par }{ Referenced by GCellTopology::doRp_AccessPad(), GCellTopology::doRp_AutoContacts(), and anonymous_namespace\{LoadGrByNet.cpp\}::singleGCell().}\par } {\xe \v getRoutingNets\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getRoutingNets} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b NetSet} & getRoutingNets () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXO} {\bkmkend AAAAAAAAXO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The set of nets to be routeds. \par }} {\xe \v getGlobalThreshold\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getGlobalThreshold} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getGlobalThreshold () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXP} {\bkmkend AAAAAAAAXP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The length above which a global wire is moved up in the layer assignment stage (Configuration shortcut). \par }} {\xe \v getSaturateRatio\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getSaturateRatio} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getSaturateRatio () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXQ} {\bkmkend AAAAAAAAXQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The ratio above which a {\b GCell} is considered to be saturated (Configuration shortcut). \par }{ Referenced by Session::getSaturateRatio().}\par } {\xe \v getSaturateRp\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getSaturateRp} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getSaturateRp () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXR} {\bkmkend AAAAAAAAXR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The number of RoutingPad above which a {\b GCell} is saturated, causing extras global segments to be moved up. (Configuration shortcut). \par }{ Referenced by Session::getSaturateRp().}\par } {\xe \v getExtensionCap\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getExtensionCap} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getExtensionCap () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXS} {\bkmkend AAAAAAAAXS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The wires extension cap, same for all layers for the time beeing (Configuration shortcut). \par }} {\xe \v getChipTools\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:getChipTools} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b ChipTools} & getChipTools () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXT} {\bkmkend AAAAAAAAXT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The chip tools (for whole designs). \par }{ Referenced by KatabaticEngine::createDetailedGrid().}\par } {\xe \v xmlWriteGCellGrid\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:xmlWriteGCellGrid} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void xmlWriteGCellGrid (ostream & {\i o})}} \par {\bkmkstart AAAAAAAAXU} {\bkmkend AAAAAAAAXU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Write in a stream all informations on the GCells in XML format. \par }{ Referenced by KatabaticEngine::xmlWriteGCellGrid().}\par } {\xe \v xmlWriteGCellGrid\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:xmlWriteGCellGrid} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void xmlWriteGCellGrid (const string & {\i fileName})}} \par {\bkmkstart AAAAAAAAXV} {\bkmkend AAAAAAAAXV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Write in a file all informations on the GCells in XML format. \par }{ References KatabaticEngine::xmlWriteGCellGrid().}\par } {\xe \v setState\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:setState} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setState ({\b EngineState} {\i state}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXW} {\bkmkend AAAAAAAAXW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Force the state of the tool. Must be used with caution, as no sanity checks are performeds. This method is normally invoked from inside the {\b KatabaticEngine} various methods. \par }} {\xe \v setFlags\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:setFlags} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setFlags (unsigned int {\i flags}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXX} {\bkmkend AAAAAAAAXX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Set the flags given in {\f2 flags} . \par }{ Referenced by Session::setKatabaticFlags().}\par } {\xe \v unsetFlags\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:unsetFlags} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void unsetFlags (unsigned int {\i flags}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXY} {\bkmkend AAAAAAAAXY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Reset the flags given in {\f2 flags} . \par }} {\xe \v setGlobalThreshold\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:setGlobalThreshold} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setGlobalThreshold ({\b DbU::Unit} {\i threshold}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAXZ} {\bkmkend AAAAAAAAXZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid (Configuration shortcut). \par }} {\xe \v setSaturateRatio\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:setSaturateRatio} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setSaturateRatio (float {\i ratio}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAYA} {\bkmkend AAAAAAAAYA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid (Configuration shortcut). \par }} {\xe \v setSaturateRp\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:setSaturateRp} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setSaturateRp (size_t {\i threshold}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAYB} {\bkmkend AAAAAAAAYB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid (Configuration shortcut). \par }} {\xe \v printMeasures\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:printMeasures} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void printMeasures (const string & {\i tag}) const}} \par {\bkmkstart AAAAAAAAYC} {\bkmkend AAAAAAAAYC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Print memory & time measurement on ``cmess1``. If {\f2 tag} is not empty, also adds the measurement to the internal table (with {\f2 tag} as label). \par }{ Referenced by KatabaticEngine::finalizeLayout().}\par } {\xe \v refresh\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:refresh} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void refresh (unsigned int {\i flags} = {\f2 {\b KbOpenSession}})}} \par {\bkmkstart AAAAAAAAYD} {\bkmkend AAAAAAAAYD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid In case the tool is associated with a graphic display, trigger a full redraw of the Cell. Slow the router but allow to see work in progress... If {\f2 flags} {\i do not} contains {\f2 KbOpenSession} the refresh operation will not be enclosed inside it's own session. This assumes that a session is already opened. \par }{ References GCellGrid::updateContacts().}\par } {\xe \v createDetailedGrid\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:createDetailedGrid} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void createDetailedGrid (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAYE} {\bkmkend AAAAAAAAYE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Allocate the {\b GCellGrid}. \par }{ References GCellGrid::create(), KatabaticEngine::getChipTools(), BaseGrid::getColumns(), Grid< GCellT >::getGCellsColumn(), Grid< GCellT >::getGCellsRow(), BaseGrid::getRows(), ChipTools::isChip(), and Session::revalidate().}\par } {\xe \v makePowerRails\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:makePowerRails} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void makePowerRails ()}} \par {\bkmkstart AAAAAAAAYF} {\bkmkend AAAAAAAAYF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Detect all the aligned segments of same width that compose power rails, unificate them and copy them at the design top level. \par }} {\xe \v loadGlobalRouting\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:loadGlobalRouting} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void loadGlobalRouting (unsigned int {\i method}){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAYG} {\bkmkend AAAAAAAAYG} { \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 method} \cell }{the loading algorithm \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 nets} \cell }{the set of nets to route.\cell } {\row } } Convert the global routing into the initial detailed routing. For the time beeing, only one loading algorithm is available: {\i net by net} (EngineLoadGrByNet). Only Net given in {\f2 nets} are routeds. If {\f2 nets} is empty then all ordinary nets are routeds. In either cases the set of nets to route is pruned from any power, ground or clock signals.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: The tool state must be {\b EngineGlobalLoaded} {\i before} calling this method\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid and will be set to {\b EngineActive} on exit. \par }}{ References Katabatic::EngineActive, and Katabatic::EngineGlobalLoaded.}\par } {\xe \v slackenBorder\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:slackenBorder} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void slackenBorder ({\b Box} {\i bb}, {\b Layer::Mask} {\i mask}, unsigned int {\i flags})}} \par {\bkmkstart AAAAAAAAYH} {\bkmkend AAAAAAAAYH} { \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 bb} \cell }{The bounding box, defines the edges. \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 mask} \cell }{Consider only layers that are fully included in that mask. \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 }{Consider only segment in that direction.\cell } {\row } } Perform a preventive break on all global segments going through the {\i vertical} left and right edges of the {\f2 bb} box. The set of global segments to be broken could be further restricted using {\f2 mask} and {\f2 flags} .\par The Semantic of {\f2 flags} is not clear, must review the code more closely. \par }{ References Box::getXMax(), Box::getXMin(), Box::getYMax(), and Box::getYMin().}\par } {\xe \v slackenBlockIos\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:slackenBlockIos} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void slackenBlockIos ({\b Instance} * {\i core})}} \par {\bkmkstart AAAAAAAAYI} {\bkmkend AAAAAAAAYI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform a preventive break on horizontal segments in the {\b GCell} immediatly {\i outside} the instance {\f2 core} area in the routing layer of index {\f2 1} .\par This method is too much hardwired to the {\f2 SxLib} gauge. It's effect is to break all {\b METAL2} outside the core (in a chip). \par }{ References Entity::getBoundingBox(), Instance::getName(), Constant::Horizontal, and Box::inflate().}\par } {\xe \v moveUpNetTrunk\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:moveUpNetTrunk} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool moveUpNetTrunk ({\b AutoSegment} * {\i seed}, set< {\b Net} *> & {\i globalNets}, {\b GCell::SetIndex} & {\i invalidateds})}} \par {\bkmkstart AAAAAAAAYJ} {\bkmkend AAAAAAAAYJ} { \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 seed} \cell }{The {\b AutoSegment} to take the net from. \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 globalNets} \cell }{The set of nets that has been moved up. \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 invalidateds} \cell }{The set of GCells that have been invalidated. {\b Returns:} {\b true} if the net trunk have been moved up.\cell } {\row } } Try to move up a whole net trunk. The net is supplied through the {\f2 seed} argument (the segment that triggers the move). If the net is actually moved up, it is added to {\f2 globalNets} and all GCells that have been invalidateds are added to {\f2 invalidateds} .\par An individual {\b AutoSegment} of the net is moved up if it's length is greater that {\f2 150} lambdas, that is, three times the side of a {\b GCell}. This is hard-wired and should be parametrized in the future. \par }} {\xe \v layerAssign\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:layerAssign} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void layerAssign (unsigned int {\i method})}} \par {\bkmkstart AAAAAAAAYK} {\bkmkend AAAAAAAAYK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform the layer assignment. The global routing loading stage uses only the two bottom most layers, this method spread them on all the availables routing layers, according to {\b GCell} and RoutingPad density criterions.\par Two algorithms are availables:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b EngineLayerAssignByLength} : the global wires are moved up one by one.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b EngineLayerAssignByTrunk} : if one global wire of a net is to be moved up, then all the global trunk of the net is moved along. This methods gives the best results for now. \par} }} {\xe \v computeNetConstraints\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:computeNetConstraints} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void computeNetConstraints ({\b Net} * {\i net})}} \par {\bkmkstart AAAAAAAAYL} {\bkmkend AAAAAAAAYL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Compute the box constraints on AutoContacts (and therefore those applied to AutoSegments). Constraints comes from AutoContacts anchoreds on RoutingPads and transmitted through {\b AutoContactHTee} or {\b AutoContactVTee}. Constraints are applied to all AutoContacts of an aligned set.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: The {\f2 net} must have been canonized before this function to be called. \par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid \par }}} {\xe \v toOptimals\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:toOptimals} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void toOptimals ({\b Net} * {\i net})}} \par {\bkmkstart AAAAAAAAYM} {\bkmkend AAAAAAAAYM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Move all {\b AutoSegment} of {\f2 net} so that their axis are inside their optimals interval. If a {\b AutoSegment} is already inside the interval is not moved, otherwise it is put on the nearest bound of the optimal interval. \par }} {\xe \v finalizeLayout\:Katabatic::KatabaticEngine} {\xe \v Katabatic::KatabaticEngine\:finalizeLayout} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void finalizeLayout (){\f2 [virtual]}}} \par {\bkmkstart AAAAAAAAYN} {\bkmkend AAAAAAAAYN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Transform the {\b Katabatic} wires into the Hurricane data-structure. Mostly by removing the AutoSegment/AutoContact {\i without} removing their Hurricane conterparts. May also fill gaps that may have appeared.\par {{\s5\sb90\sa30\keepn\widctlpar\adjustright \b\f1\fs20\cgrid Remark: The tool state must be {\b EngineActive} {\i before} calling this method\par }\pard\plain \s62\li720\widctlpar\ql\adjustright \fs20\cgrid and will be set to {\b EngineGutted} on exit. \par }}{ References Katabatic::EngineDriving, Katabatic::EngineGutted, and KatabaticEngine::printMeasures().}\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 KatabaticEngine.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid ChipTools.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid LoadGrByNet.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid KatabaticEngine.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid KatabaticEngine.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 GCell::Key Class Reference\par \pard\plain {\tc\tcl2 \v GCell::Key} {\xe \v GCell::Key} {\bkmkstart AAAAAAAAUT} {\bkmkend AAAAAAAAUT} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b GCell} {\b Key} - Density Cache. }}\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 Key} ({\b GCell} *, unsigned int depth)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid float {\b getDensity} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b GCell} * {\b getGCell} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b update} (unsigned int 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 {\b GCell} {\b Key} - Density Cache. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid This class is used to create a {\b GCell} internal cache on density, mainly to be used by {\b GCellDensitySet}. \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 Key\:Katabatic::GCell::Key} {\xe \v Katabatic::GCell::Key\:Key} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Key} ({\b GCell} * {\i owner}, unsigned int {\i depth}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAUU} {\bkmkend AAAAAAAAUU} { \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 owner} \cell }{The {\b GCell} owning the key. \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 {\f2 depth} of the density to use.\cell } {\row } } {\b Key} constructor, with an initial value for the cached density. \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 getDensity\:Katabatic::GCell::Key} {\xe \v Katabatic::GCell::Key\:getDensity} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getDensity () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAUV} {\bkmkend AAAAAAAAUV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The value of the cached density. \par }} {\xe \v getGCell\:Katabatic::GCell::Key} {\xe \v Katabatic::GCell::Key\:getGCell} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b GCell} * getGCell () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAUW} {\bkmkend AAAAAAAAUW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The owning {\b GCell}. \par }} {\xe \v update\:Katabatic::GCell::Key} {\xe \v Katabatic::GCell::Key\:update} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void update (unsigned int {\i depth}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAUX} {\bkmkend AAAAAAAAUX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} Update the density \par }{ Referenced by GCell::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 GCell.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid GCell.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 LocatorHelper Class Reference\par \pard\plain {\tc\tcl2 \v LocatorHelper} {\xe \v LocatorHelper} {\bkmkstart AAAAAAAAYO} {\bkmkend AAAAAAAAYO} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Locator Helper Collection's Locators. }}\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 LocatorHelper} ({\b AutoContact} *, 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 isValid} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b AutoSegment} * {\b getSegment} () const\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b progress} ()\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 Locator Helper Collection's Locators. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Provide a small uniform walktough over the AutoSegments anchored on AutoContacts. The {\f2 flags} argument allows to choose between direction and include perpandiculars (in that case all segments are processeds).\par {\bkmkstart AAAAAAAAYP} {\bkmkend AAAAAAAAYP} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Implementation Details \par} {\tc\tcl2 \v Implementation Details} As, at most, two horizontals and two verticals may be anchored on any {\b AutoContact} subtype, the locator helper perform a walk through a virtual table of 4 elements. The two first are the horizontals, the two last the verticals. The meaning of this index is consistent whith the {\f2 index} argument of {\b AutoContact::getSegment()}. When a segment is not present in an {\b AutoContact}, the {\f2 {\b getSegment()}} returns {\f2 NULL} and the {\b LocatorHelper::progress()} function will skip it.\par The private methods:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 LocatorHelper::_min()} \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 LocatorHelper::_max()} \par} Computes the bounds of {\f2 _index} according to the value of {\f2 _flags:} { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 KbHorizontal} : {\f2 0} to less than {\f2 2} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 KbVertical} : {\f2 2} to less than {\f2 4} .\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 KbHorizontal|KbVertical} : {\f2 0} to less than {\f2 4} . \par} \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 LocatorHelper\:Katabatic::LocatorHelper} {\xe \v Katabatic::LocatorHelper\:LocatorHelper} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b LocatorHelper} ({\b AutoContact} * {\i contact}, unsigned int {\i flags} = {\f2 0}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAYQ} {\bkmkend AAAAAAAAYQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Create a helper to iterate over the AutoSegments anchored on {\f2 contact} . The {\f2 flags} arguments allow to select:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid The direction: {\b Katabatic::KbHorizontal} or {\b Katabatic::KbVertical}.\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Perpandicular inclusion: {\b Katabatic::KbWithPerpands}.\par} When setting KbWithPerpands, all the segments will be iterated over. It may seems a somewhat contorted way of doing things, the reason is the ability to share (an pass) flags directly between different functions. \par }{ References AutoContact::getSegment(), and LocatorHelper::progress().}\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 isValid\:Katabatic::LocatorHelper} {\xe \v Katabatic::LocatorHelper\:isValid} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isValid () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAYR} {\bkmkend AAAAAAAAYR} { \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 an {\b AutoSegment} to be processed. \par }} {\xe \v getSegment\:Katabatic::LocatorHelper} {\xe \v Katabatic::LocatorHelper\:getSegment} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * getSegment () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAYS} {\bkmkend AAAAAAAAYS} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The current {\b AutoSegment}. {\f2 NULL} if the loop is over. \par }{ References AutoContact::getSegment().}\par } {\xe \v progress\:Katabatic::LocatorHelper} {\xe \v Katabatic::LocatorHelper\:progress} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void progress (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAYT} {\bkmkend AAAAAAAAYT} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} Go to the next {\b AutoSegment}. \par }{ References AutoContact::getSegment().}\par { Referenced by LocatorHelper::LocatorHelper().}\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 AutoContact.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid AutoContact.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 Observable Class Reference\par \pard\plain {\tc\tcl2 \v Observable} {\xe \v Observable} {\bkmkstart AAAAAAAAYU} {\bkmkend AAAAAAAAYU} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Observer} Design Pattern, Subject part. }}\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 Observable} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid template T * {\b getObserver} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b addObserver} ({\b BaseObserver} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid void {\b removeObserver} ({\b BaseObserver} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid 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 {\b Observer} Design Pattern, Subject part. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Observable} is the implementation of the {\i subject} part of the {\b Observer} design pattern. For the time beeing it's a simplificated version that allows only one {\b Observer} to watch the subject.\par {\b Observable} is designed to be an attribute of the subject, not one of it's base class.\par This implantation is completly generic and has nothing specific to {\b Katabatic}. It may be moved sometimes in Hurricane at Property level in {\b Hurricane::DBo}.\par {\b Note to Myself:} {\b Observer} pattern is the one behind signal/slots. \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 Observable\:Katabatic::Observable} {\xe \v Katabatic::Observable\:Observable} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Observable} (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAYV} {\bkmkend AAAAAAAAYV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Default and only constructor. The copy constructor is disabled (made private and unimplemented). \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 getObserver\:Katabatic::Observable} {\xe \v Katabatic::Observable\:getObserver} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b T * getObserver (){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAYW} {\bkmkend AAAAAAAAYW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The (only) observer, {\f2 NULL} if there is none. It is the object of which the {\b Observer} is an attribute, that is, it's {\i owner} , and not the {\b Observer} itself which is returned. \par }} {\xe \v addObserver\:Katabatic::Observable} {\xe \v Katabatic::Observable\:addObserver} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void addObserver ({\b BaseObserver} * {\i observer}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAYX} {\bkmkend AAAAAAAAYX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Adds an observer. If more than one is added, throw an error. \par }} {\xe \v removeObserver\:Katabatic::Observable} {\xe \v Katabatic::Observable\:removeObserver} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void removeObserver ({\b BaseObserver} * {\i observer}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAYY} {\bkmkend AAAAAAAAYY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Removes an observer. If the observer do not belong to this observable, throw an exception. \par }} {\xe \v notify\:Katabatic::Observable} {\xe \v Katabatic::Observable\:notify} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void notify (unsigned int {\i flags}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAYZ} {\bkmkend AAAAAAAAYZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Used by the subject to signal a change in it's state to the observers. The {\f2 flags} parameter can be used to indicates what kind of change is occuring. Values for {\f2 flags} are defined between the subject and the observers. \par }{ References BaseObserver::notify().}\par { Referenced by AutoSegment::_invalidate(), AutoSegment::_postCreate(), AutoSegment::_preDestroy(), and AutoSegment::revalidate().}\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 Observer.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Observer.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 Observer< T > Class Template Reference\par \pard\plain {\tc\tcl2 \v Observer< T >} {\xe \v Observer< T >} {\bkmkstart AAAAAAAAZA} {\bkmkend AAAAAAAAZA} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Observer} Design Pattern, {\b Observer} part. }}\par Inheritance diagram for Observer< T >:{ \pard\plain \par\pard \qc {\field\flddirty {\*\fldinst INCLUDEPICTURE "classKatabatic_1_1Observer__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 Observer} (const T *owner)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid T * {\b getOwner} () const\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 { \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid template\par class Katabatic::Observer< T >\par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Observer} Design Pattern, {\b Observer} part. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b First, a warning about names:} although this class is named {\b Observer}, it is intended to be an attribute nested inside the whole object which is indeed, the true {\b Observer}. This nesting object is called, most of the time the {\b owner} in the following. But sometimes, for simplification it may also be called the {\b Observer}.\par {\bkmkstart AAAAAAAAZB} {\bkmkend AAAAAAAAZB} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Observer Implementation Notes \par} {\tc\tcl2 \v Observer Implementation Notes} To retrieve the {\i owner} from the {\b Observer} attribute, we uses the offset from the attribute in the {\i owner} . This offset is computed once and for all the first time the template constructor is called. \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 Observer\:Katabatic::Observer} {\xe \v Katabatic::Observer\:Observer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Observer} (const T * {\i owner}){\f2 [inline]}}} \par {\bkmkstart AAAAAAAAZC} {\bkmkend AAAAAAAAZC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid The owner of the oberver is needed to compute, on the first creation only, the offset of the {\b Observer} attribute inside the {\f2 owner} complete object. \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 getOwner\:Katabatic::Observer} {\xe \v Katabatic::Observer\:getOwner} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b T * getOwner () const{\f2 [inline]}}} \par {\bkmkstart AAAAAAAAZD} {\bkmkend AAAAAAAAZD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The owner of the observer. \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 Observer.h\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Observer.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 AAAAAAAAZE} {\bkmkend AAAAAAAAZE} \par { {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Modification {\b Session} for {\b Katabatic}. }}\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 bool {\b isInDemoMode} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static bool {\b doWarnGCellOverload} ()\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 Technology} * {\b getTechnology} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b KatabaticEngine} * {\b getKatabatic} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static const Configuration * {\b getConfiguration} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static float {\b getSaturateRatio} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static size_t {\b getSaturateRp} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b DbU::Unit} {\b getExtensionCap} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b RoutingGauge} * {\b getRoutingGauge} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static const {\b Layer} * {\b getRoutingLayer} (size_t)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static const {\b Layer} * {\b getContactLayer} (size_t)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static size_t {\b getSegmentStackSize} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static size_t {\b getContactStackSize} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static const vector< {\b AutoSegment} * > & {\b getInvalidateds} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static const vector< {\b AutoSegment} * > & {\b getRevalidateds} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static const vector< {\b AutoSegment} * > & {\b getDoglegs} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static const set< {\b Net} * > & {\b getNetsModificateds} ()\par \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 KatabaticEngine} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b close} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b setKatabaticFlags} (unsigned int)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b dogleg} ({\b AutoSegment} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b revalidateTopology} ()\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b setInvalidateMask} (unsigned int)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b invalidate} ({\b Net} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b invalidate} ({\b AutoContact} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b invalidate} ({\b AutoSegment} *)\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 void {\b link} ({\b AutoContact} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b link} ({\b AutoSegment} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b unlink} ({\b AutoContact} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static void {\b unlink} ({\b AutoSegment} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b AutoContact} * {\b lookup} ({\b Contact} *)\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid static {\b AutoSegment} * {\b lookup} ({\b 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 Modification {\b Session} for {\b Katabatic}. \par } {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid To perform modifications, the {\b Katabatic} data structure uses a session mechanism built on top of the {\b Hurricane::UpdateSession} one. Sessions obeys very simples rules:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Only one {\b Session} can be opened at a time with {\b Session::open()}.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Subsequent calls to {\b Session::open()} returns the currently opened session until {\b Session::close()} is called.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Revalidation can take place whithout closing the {\b Session} by calling {\b Session::revalidate()}.\par} The task of a {\b Session} is to keep track of the {\b AutoContact} and {\b AutoSegment} that have been modificateds (i.e. invalidated) and, to restore connexity and/or topology when closed.\par Two kinds of revalidation could be performed: { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Geometrical} : only positions of AutoContacts and AutoSegments extensions are recomputed. \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\b Topological} : a whole net have been invalidated because of a dogleg creation or a move up/move down of a segment. { \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Dogleg} : needs to insert the newly created AutoSegments and AutoContacts. \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b Move up/Move down} : may needs to create additional dogleg to restore connexity (gaps), and then insert them like above. \par} After a topological mofication has been done, the net needs to be re-canonized then the geometrical step takes place. \par} The kind of revalidation needed is automatically detected by the {\b Session}.\par In addition to it's main purpose, {\b Session} also provides cached access to frequently needed variables either from Hurricane or {\b Katabatic} Configuration and access to the {\b AutoContact} & {\b AutoSegment} LUTs of {\b KatabaticEngine}.\par From a software point of view, {\b Session} is a singleton object.\par {\bkmkstart AAAAAAAAZF} {\bkmkend AAAAAAAAZF} {{\pard\plain \s2\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs28\kerning28\cgrid Session Algorithm \par} {\tc\tcl2 \v Session Algorithm} Main attributes of a {\b Session}:{ \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 _netInvalidateds} , nets on which topology has changed.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 _autoSegments} , that have been moved or createds.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 _autoContacts} , that have been created or one of their slave segment has moved.\par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid {\f2 _revalidateds} , the list of AutoSegments that have just been revalidated (after calling {\f2 {\b revalidate()}} ).\par} Schematic description of how a {\b Session} works:\par { \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid If at least one net has been invalidated, meaning that it's topology has changed, perform {\f2 _revalidateTopology()} . { \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Update net topology: correct the topology of each contacts, making dogleg when needed. The {\b AutoContact} segment caching is updated at this point. \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Compute net constraints (on AutoContacts & AutoSegments). \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Compute net optimal positions (on AutoSegments). \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Compute the state of the segments regarding to terminals. \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Canonize sets of aligneds segments. The canonical segment is the one with the lowest {\f2 id} . \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid If the segments has just been created, put it on its optimal axis. \par} This stage can add itself more invalidated AutoSegments and AutoContacts as it create doglegs.\par \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Revalidate geometry of AutoContacts. That is, expand or shrink the extremities of the invalidated AutoSegments. Note that AutoSegments are already at on their final axis position.\par \par \pard\plain \s80\fi-360\li360\widctlpar\jclisttab\tx360{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pndec }\ls1\adjustright \fs20\cgrid Revalidate AutoSegments. Just before this stage, they are on the correct axis and their extensions are also correct, so we may update the caching of their characteristics (mostly the extension). \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 isInDemoMode\:Katabatic::Session} {\xe \v Katabatic::Session\:isInDemoMode} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool isInDemoMode (){\f2 [static]}}} \par {\bkmkstart AAAAAAAAZG} {\bkmkend AAAAAAAAZG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Katabatic} shortcut. \par }{ References KatabaticEngine::isInDemoMode().}\par { Referenced by GCell::checkDensity().}\par } {\xe \v doWarnGCellOverload\:Katabatic::Session} {\xe \v Katabatic::Session\:doWarnGCellOverload} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b bool doWarnGCellOverload (){\f2 [static]}}} \par {\bkmkstart AAAAAAAAZH} {\bkmkend AAAAAAAAZH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Katabatic} shortcut. \par }{ References KatabaticEngine::doWarnOnGCellOverload().}\par { Referenced by GCell::checkDensity().}\par } {\xe \v get\:Katabatic::Session} {\xe \v Katabatic::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 AAAAAAAAZI} {\bkmkend AAAAAAAAZI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Return the {\b Session} singleton, if no session is currently open throw an exception carrying {\f2 message} . \par }} {\xe \v getTechnology\:Katabatic::Session} {\xe \v Katabatic::Session\:getTechnology} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Technology} * getTechnology (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAZJ} {\bkmkend AAAAAAAAZJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Hurricane shortcut. \par }} {\xe \v getKatabatic\:Katabatic::Session} {\xe \v Katabatic::Session\:getKatabatic} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b KatabaticEngine} * getKatabatic (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAZK} {\bkmkend AAAAAAAAZK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Katabatic} shortcut. \par }{ Referenced by AutoSegment::create(), GCellTopology::doRp_AccessPad(), GCellTopology::doRp_AutoContacts(), AutoSegment::makeDogleg(), and Session::open().}\par } {\xe \v getConfiguration\:Katabatic::Session} {\xe \v Katabatic::Session\:getConfiguration} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const Configuration * getConfiguration (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAZL} {\bkmkend AAAAAAAAZL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Katabatic} shortcut. \par }{ Referenced by AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), and AutoSegment::canMoveUp().}\par } {\xe \v getSaturateRatio\:Katabatic::Session} {\xe \v Katabatic::Session\:getSaturateRatio} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b float getSaturateRatio (){\f2 [static]}}} \par {\bkmkstart AAAAAAAAZM} {\bkmkend AAAAAAAAZM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Katabatic} shortcut. \par }{ References KatabaticEngine::getSaturateRatio().}\par { Referenced by GCell::isSaturated().}\par } {\xe \v getSaturateRp\:Katabatic::Session} {\xe \v Katabatic::Session\:getSaturateRp} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getSaturateRp (){\f2 [static]}}} \par {\bkmkstart AAAAAAAAZN} {\bkmkend AAAAAAAAZN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Katabatic} shortcut. \par }{ References KatabaticEngine::getSaturateRp().}\par { Referenced by GCell::rpDesaturate().}\par } {\xe \v getExtensionCap\:Katabatic::Session} {\xe \v Katabatic::Session\:getExtensionCap} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b DbU::Unit} getExtensionCap (){\f2 [static]}}} \par {\bkmkstart AAAAAAAAZO} {\bkmkend AAAAAAAAZO} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Katabatic} shortcut. \par }{ Referenced by AutoHorizontal::checkPositions(), AutoVertical::checkPositions(), AutoHorizontal::updatePositions(), and AutoVertical::updatePositions().}\par } {\xe \v getRoutingGauge\:Katabatic::Session} {\xe \v Katabatic::Session\:getRoutingGauge} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b RoutingGauge} * getRoutingGauge (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAZP} {\bkmkend AAAAAAAAZP} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Katabatic} shortcut. \par }{ Referenced by AutoHorizontal::_makeDogleg(), AutoVertical::_makeDogleg(), AutoHorizontal::canMoveULeft(), AutoVertical::canMoveULeft(), AutoSegment::canMoveUp(), AutoHorizontal::canMoveURight(), AutoVertical::canMoveURight(), AutoSegment::canPivotDown(), AutoSegment::canPivotUp(), GCell::checkDensity(), Session::getContactLayer(), Session::getRoutingLayer(), GCell::hasFreeTrack(), AutoSegment::makeDogleg(), anonymous_namespace\{LoadGrByNet.cpp\}::singleGCell(), GCell::stepDesaturate(), GCell::stepNetDesaturate(), GCell::updateDensity(), AutoContactVTee::updateTopology(), AutoContactTurn::updateTopology(), AutoContactHTee::updateTopology(), and AutoContactTerminal::updateTopology().}\par } {\xe \v getRoutingLayer\:Katabatic::Session} {\xe \v Katabatic::Session\:getRoutingLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Layer} * getRoutingLayer (size_t {\i depth}){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAZQ} {\bkmkend AAAAAAAAZQ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Katabatic} shortcut. \par }{ References Session::getRoutingGauge(), and RoutingGauge::getRoutingLayer().}\par { Referenced by GCellTopology::_do_xG_1M1_1M2(), GCellTopology::_do_xG_xM1_xM3(), AutoSegment::create(), GCellTopology::doRp_AccessPad(), AutoSegment::reduceDoglegLayer(), and GCell::rpDesaturate().}\par } {\xe \v getContactLayer\:Katabatic::Session} {\xe \v Katabatic::Session\:getContactLayer} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const {\b Layer} * getContactLayer (size_t {\i depth}){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAZR} {\bkmkend AAAAAAAAZR} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Katabatic} shortcut. \par }{ References RoutingGauge::getContactLayer(), and Session::getRoutingGauge().}\par { Referenced by GCellTopology::_do_1G_1M3(), GCellTopology::_do_1G_xM1(), GCellTopology::_do_xG(), GCellTopology::_do_xG_1M1_1M2(), GCellTopology::_do_xG_1Pad(), GCellTopology::_do_xG_xM1_xM3(), GCellTopology::_do_xG_xM2(), GCellTopology::_do_xG_xM3(), GCellTopology::doRp_Access(), GCellTopology::doRp_AccessPad(), GCellTopology::doRp_AutoContacts(), GCellTopology::doRp_StairCaseH(), GCellTopology::doRp_StairCaseV(), and anonymous_namespace\{LoadGrByNet.cpp\}::singleGCell().}\par } {\xe \v getSegmentStackSize\:Katabatic::Session} {\xe \v Katabatic::Session\:getSegmentStackSize} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getSegmentStackSize (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAZS} {\bkmkend AAAAAAAAZS} { \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 AutoSegment} in the invalidated stack. \par }} {\xe \v getContactStackSize\:Katabatic::Session} {\xe \v Katabatic::Session\:getContactStackSize} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t getContactStackSize (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAZT} {\bkmkend AAAAAAAAZT} { \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 AutoSegment} in the invalidated stack. \par }} {\xe \v getInvalidateds\:Katabatic::Session} {\xe \v Katabatic::Session\:getInvalidateds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const vector< {\b AutoSegment} * > & getInvalidateds (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAZU} {\bkmkend AAAAAAAAZU} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The stack (vector) of invalidateds AutoSegments. \par }} {\xe \v getRevalidateds\:Katabatic::Session} {\xe \v Katabatic::Session\:getRevalidateds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const vector< {\b AutoSegment} * > & getRevalidateds (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAZV} {\bkmkend AAAAAAAAZV} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The stack (vector) of AutoSegments that have been revalidateds. \par }} {\xe \v getDoglegs\:Katabatic::Session} {\xe \v Katabatic::Session\:getDoglegs} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const vector< {\b AutoSegment} * > & getDoglegs (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAZW} {\bkmkend AAAAAAAAZW} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The vector of AutoSegments part of a newly created dogleg. The dogleg creation functions in {\b AutoHorizontal} and {\b AutoVertical} put a triplet (for example in horizontal direction {\f2 } (h1,v1,h2) ) for each dogleg composed of:{ \par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b h1} the segment {\i before} the dogleg (which is also the original one).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b v1} the segment {\b perpandicular} (new).\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid {\b h2} the segment {\b after} (new). \par} }{ Referenced by AutoSegment::makeDogleg().}\par } {\xe \v getNetsModificateds\:Katabatic::Session} {\xe \v Katabatic::Session\:getNetsModificateds} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b const set< {\b Net} * > & getNetsModificateds (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAAAZX} {\bkmkend AAAAAAAAZX} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Returns:} The set of Nets that needs either a topological update or a new canonization. \par }} {\xe \v open\:Katabatic::Session} {\xe \v Katabatic::Session\:open} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b Session} * open ({\b KatabaticEngine} * {\i ktbt}){\f2 [static]}}} \par {\bkmkstart AAAAAAAAZY} {\bkmkend AAAAAAAAZY} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Opens a new session or returns the already opened one, if any. \par }{ References Session::getKatabatic().}\par { Referenced by GCellGrid::updateContacts().}\par } {\xe \v close\:Katabatic::Session} {\xe \v Katabatic::Session\:close} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void close (){\f2 [static]}}} \par {\bkmkstart AAAAAAAAZZ} {\bkmkend AAAAAAAAZZ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Close the {\b Session}, triggering the revalidation of the AutoSegemnts and AutoContacts. If no {\b Session} is opened, throws an execption. \par }{ Referenced by GCellGrid::updateContacts().}\par } {\xe \v setKatabaticFlags\:Katabatic::Session} {\xe \v Katabatic::Session\:setKatabaticFlags} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setKatabaticFlags (unsigned int {\i flags}){\f2 [static]}}} \par {\bkmkstart AAAAAAABAA} {\bkmkend AAAAAAABAA} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid {\b Katabatic} shortcut. \par }{ References KatabaticEngine::setFlags().}\par } {\xe \v dogleg\:Katabatic::Session} {\xe \v Katabatic::Session\:dogleg} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void dogleg ({\b AutoSegment} * {\i autoSegment}){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAABAB} {\bkmkend AAAAAAABAB} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Adds an {\b AutoSegment} to the dogleg vector. \par }{ Referenced by AutoHorizontal::_makeDogleg(), and AutoVertical::_makeDogleg().}\par } {\xe \v revalidateTopology\:Katabatic::Session} {\xe \v Katabatic::Session\:revalidateTopology} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void revalidateTopology (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAABAC} {\bkmkend AAAAAAABAC} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Revalidate Net that have been invalidateds and re-canonize them. \par }} {\xe \v setInvalidateMask\:Katabatic::Session} {\xe \v Katabatic::Session\:setInvalidateMask} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void setInvalidateMask (unsigned int {\i flags}){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAABAD} {\bkmkend AAAAAAABAD} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Tells what kind of revalidation must be performed. \par }} {\xe \v invalidate\:Katabatic::Session} {\xe \v Katabatic::Session\:invalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void invalidate ({\b Net} * {\i net}){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAABAE} {\bkmkend AAAAAAABAE} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Schedule {\f2 net} for a full revalidation, topological correction and canonization. \par }{ Referenced by AutoSegment::_invalidate(), and AutoSegment::_postCreate().}\par } {\xe \v invalidate\:Katabatic::Session} {\xe \v Katabatic::Session\:invalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void invalidate ({\b AutoContact} * {\i contact}){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAABAF} {\bkmkend AAAAAAABAF} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Schedule {\f2 contact} for revalidation. \par }} {\xe \v invalidate\:Katabatic::Session} {\xe \v Katabatic::Session\:invalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void invalidate ({\b AutoSegment} * {\i segment}){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAABAG} {\bkmkend AAAAAAABAG} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Schedule {\f2 segment} for revalidation. \par }} {\xe \v revalidate\:Katabatic::Session} {\xe \v Katabatic::Session\:revalidate} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b size_t revalidate (){\f2 [inline]}, {\f2 [static]}}} \par {\bkmkstart AAAAAAABAH} {\bkmkend AAAAAAABAH} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Perform the revalidation. Returns the sum of AutoContacts and AutoSegemnts that have been revalidated. \par }{ Referenced by KatabaticEngine::createDetailedGrid().}\par } {\xe \v link\:Katabatic::Session} {\xe \v Katabatic::Session\:link} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void link ({\b AutoContact} * {\i ac}){\f2 [static]}}} \par {\bkmkstart AAAAAAABAI} {\bkmkend AAAAAAABAI} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Adds {\f2 ac} in the {\b AutoContact} lookup table (allow to retrieve an {\b AutoContact} by it's base Contact). \par }{ Referenced by AutoSegment::_postCreate().}\par } {\xe \v link\:Katabatic::Session} {\xe \v Katabatic::Session\:link} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void link ({\b AutoSegment} * {\i as}){\f2 [static]}}} \par {\bkmkstart AAAAAAABAJ} {\bkmkend AAAAAAABAJ} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Adds {\f2 as} in the {\b AutoSegment} lookup table (allow to retrieve an {\b AutoSegment} by it's base Segment). \par }} {\xe \v unlink\:Katabatic::Session} {\xe \v Katabatic::Session\:unlink} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void unlink ({\b AutoContact} * {\i ac}){\f2 [static]}}} \par {\bkmkstart AAAAAAABAK} {\bkmkend AAAAAAABAK} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Removes {\f2 ac} from the {\b AutoContact} lookup table. \par }{ Referenced by AutoSegment::_preDestroy().}\par } {\xe \v unlink\:Katabatic::Session} {\xe \v Katabatic::Session\:unlink} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b void unlink ({\b AutoSegment} * {\i as}){\f2 [static]}}} \par {\bkmkstart AAAAAAABAL} {\bkmkend AAAAAAABAL} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Removes {\f2 as} from the {\b AutoSegment} lookup table. \par }} {\xe \v lookup\:Katabatic::Session} {\xe \v Katabatic::Session\:lookup} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoContact} * lookup ({\b Contact} * {\i contact}){\f2 [static]}}} \par {\bkmkstart AAAAAAABAM} {\bkmkend AAAAAAABAM} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Lookup the {\b AutoContact} associated with {\f2 contact} . {\f2 NULL} if not found. \par }{ Referenced by AutoSegment::AutoSegment(), GCell::checkEdgeSaturation(), AutoSegment::create(), AutoSegment::getAutoSource(), AutoSegment::getAutoTarget(), AutoSegment::getOppositeAnchor(), and AutoSegment::getPerpandicularsBound().}\par } {\xe \v lookup\:Katabatic::Session} {\xe \v Katabatic::Session\:lookup} \pard\plain \s4\sb240\sa60\keepn\widctlpar\adjustright \b\f1\fs20\cgrid { {\b {\b AutoSegment} * lookup ({\b Segment} * {\i segment}){\f2 [static]}}} \par {\bkmkstart AAAAAAABAN} {\bkmkend AAAAAAABAN} { \pard\plain \s51\li360\sa60\sb30\qj\widctlpar\qj\adjustright \fs20\cgrid {\s17\sa60\sb30\widctlpar\qj \fs22\cgrid Lookup the {\b AutoSegment} associated with {\f2 segment} . {\f2 NULL} if not found. \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.cpp\par \pard\plain \s81\fi-360\li720\widctlpar\jclisttab\tx720{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pndec }\ls2\adjustright \fs20\cgrid Session.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}} }