<trclass="memitem:a1fbc0adb4c0b14632edc7c55f028cd4b"><tdclass="memItemLeft"align="right"valign="top">bool </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1AutoSegment.html#a1fbc0adb4c0b14632edc7c55f028cd4b">slacken</a> (unsigned int flags)</td></tr>
<trclass="memitem:a8b0d5044dce091d06b633848a6f8a66d"><tdclass="memItemLeft"align="right"valign="top"><aclass="el"href="classKatabatic_1_1AutoSegment.html">AutoSegment</a> * </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1AutoSegment.html#a8b0d5044dce091d06b633848a6f8a66d">canonize</a> (unsigned int flags=KbNoFlags)</td></tr>
<trclass="memitem:a23599eee5a07af377fbc8d47cda7e7b0"><tdclass="memItemLeft"align="right"valign="top">virtual void </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1AutoSegment.html#a23599eee5a07af377fbc8d47cda7e7b0">invalidate</a> (unsigned int flags=<aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a3f95c1f06fe0b58b44ccbc57d99f2a5d">KbPropagate</a>)</td></tr>
<trclass="memitem:a3881efebb7510d9b22e5f89bcd418954"><tdclass="memItemLeft"align="right"valign="top">void </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1AutoSegment.html#a3881efebb7510d9b22e5f89bcd418954">setAxis</a> (<aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/group__DbUGroup.html#ga4fbfa3e8c89347af76c9628ea06c4146">DbU::Unit</a>, unsigned int flags=KbNoFlags)</td></tr>
<trclass="memitem:a8ab41a962e18810808f4f065863b5a73"><tdclass="memItemLeft"align="right"valign="top">bool </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1AutoSegment.html#a8ab41a962e18810808f4f065863b5a73">toConstraintAxis</a> (unsigned int flags=<aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a45a219697151531a23e997b11118e08a">KbRealignate</a>)</td></tr>
<trclass="memitem:a750983d7154c94b54537127a3a18e14b"><tdclass="memItemLeft"align="right"valign="top">bool </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1AutoSegment.html#a750983d7154c94b54537127a3a18e14b">toOptimalAxis</a> (unsigned int flags=<aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a45a219697151531a23e997b11118e08a">KbRealignate</a>)</td></tr>
<trclass="memitem:a4430f9704a59e1d4f7c37d7166649510"><tdclass="memItemLeft"align="right"valign="top"><aclass="el"href="namespaceKatabatic.html#a2221b0ddbc24f331809fc86f98e38041">AutoSegments</a> </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1AutoSegment.html#a4430f9704a59e1d4f7c37d7166649510">getOnSourceContact</a> (unsigned int direction)</td></tr>
<trclass="memitem:aadbb84c0f1383f6a2addc2661e388583"><tdclass="memItemLeft"align="right"valign="top"><aclass="el"href="namespaceKatabatic.html#a2221b0ddbc24f331809fc86f98e38041">AutoSegments</a> </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1AutoSegment.html#aadbb84c0f1383f6a2addc2661e388583">getOnTargetContact</a> (unsigned int direction)</td></tr>
<trclass="memitem:aaca749f49cd03ca06449d5ea2104033a"><tdclass="memItemLeft"align="right"valign="top"><aclass="el"href="namespaceKatabatic.html#a2221b0ddbc24f331809fc86f98e38041">AutoSegments</a> </td><tdclass="memItemRight"valign="bottom"><aclass="el"href="classKatabatic_1_1AutoSegment.html#aaca749f49cd03ca06449d5ea2104033a">getAligneds</a> (unsigned int flags=KbNoFlags)</td></tr>
<divclass="textblock"><p>Abstract base class for <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a>. </p>
<h1><aclass="anchor"id="secASCreation"></a>
Creating AutoHorizontal & AutoVertical</h1>
<p><aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> is the abstract base class for <aclass="el"href="classKatabatic_1_1AutoHorizontal.html"title="Concrete Horizontal AutoSegment. ">AutoHorizontal</a> and <aclass="el"href="classKatabatic_1_1AutoVertical.html"title="Concrete Vertical AutoSegment. ">AutoVertical</a>. They are must be created only through the factory method: <aclass="el"href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>.</p>
Unique ID: to ease the enforcing of a deterministic behavior and to gain some independance from the pointers, each <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> is associated with an unique identifier. <spanclass="red"><b>IDs</b> are now directly taken from the <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html">Hurricane::Segment</a>.</span></li>
<li>
Source contact is always lesser than Target contact <code>(Xs,Ys) < (Xt,Yt)</code>. </li>
<li>
When assembled through <aclass="el"href="classKatabatic_1_1AutoContactVTee.html"title="AutoContact V-Tee (one H, two V) ">AutoContactVTee</a> or <aclass="el"href="classKatabatic_1_1AutoContactHTee.html"title="AutoContact H-Tee (two H, one V) ">AutoContactHTee</a>, 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 <em>canonical</em><aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> and is the one with the lowest <code>id</code>). </li>
<li>
<pclass="startli">When an aligned set contains at least one global, all the segments of the set are tagged <aclass="el"href="namespaceKatabatic.html#a94585537ee1724ea9315578ec54380f4a16ef6f2b6b9e44559e41f04c652919ad">Katabatic::SegWeakGlobal</a>. This is especially useful on local ones to know if they are part of a much longer wire.</p>
<pclass="endli">Conversely, a set of aligned may contains only local segments and thus will not have the flag set. </p>
</li>
<li>
To allow some optimization, the <aclass="el"href="namespaceKatabatic.html#a94585537ee1724ea9315578ec54380f4a637e0426170a532feac45548e009325d">Katabatic::SegNotAligned</a> 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. </li>
</ul>
<p><b>The Ever Fragmenting Data Structure</b></p>
<p>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).</p>
<h1><aclass="anchor"id="secASOperations"></a>
Operations on AutoSegments</h1>
<ul>
<li>
<b>Slackening.</b> Constraints transmited through either source or target <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a> are too tight (tighter than the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>), by adding straps in the perpandicular direction, the full slack of the segment is restored. </li>
<li>
<b>Layer Change.</b> One or two layers above or below the current layer. One up/down may means into the perpandicular routing direction. </li>
<li>
<b>Dogleg Creation.</b> 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. </li>
<li>
<b>Reduction/Raising.</b> When a segment is a short dogleg, no greater than one picth, it can use the layer of the perpandiculars. </li>
</ul>
<h1><aclass="anchor"id="secASInvalidate"></a>
Invalidate on AutoSegments</h1>
<p>The simple invalidation of an <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a><b>do not</b> invalidate it's source & target contact.</p>
<p>An axis position change or a layer change both invalidate the <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a><b>and</b> it's source & target contacts.</p>
<p>For the complete invalidation/revalidation mechanism see <aclass="el"href="classKatabatic_1_1Session.html#secSessionAlgo">Session Algorithm</a>.</p>
<p><aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> retains all attributes from Segment. The Segment itself beeing accessible through the <aclass="el"href="classKatabatic_1_1AutoSegment.html#ade416d0483aefe986988fa89a7cf6fcf">base()</a> methods. </p>
An unique <code>Id</code> (for determinism). </li>
<li>
The <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> from wich it starts from. It is the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> of the source <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a>. </li>
<li>
A state, combination of flags from <aclass="el"href="namespaceKatabatic.html#a94585537ee1724ea9315578ec54380f4">Katabatic::AutoSegmentFlag</a>. </li>
<li>
An interval for the optimal range of the <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> axis. </li>
<li>
An interval for user's defined constraint on the axis. </li>
<li>
The interval giving the complete length of the <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a>, that is, with all extentions cap taken into account. This interval is refered as the <em>span</em>. </li>
<li>
A small counter, of the number of reduced neighbors (never exceed two). </li>
</ul>
<h1><aclass="anchor"id="secASImplementation"></a>
Implementation Details</h1>
<p><aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> / <aclass="el"href="classKatabatic_1_1AutoHorizontal.html"title="Concrete Horizontal AutoSegment. ">AutoHorizontal</a>&<aclass="el"href="classKatabatic_1_1AutoVertical.html"title="Concrete Vertical AutoSegment. ">AutoVertical</a> are kind of decorators of <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html">Hurricane::Segment</a> (they do not scrictly respect the pattern).</p>
<p>Canonical <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> can should be considered as a kind of Composite.</p>
<p>Thoses objects are created using a Factory method.</p>
<h1><aclass="anchor"id="secASMethodsClassif"></a>
Methods Classification</h1>
<ul>
<li>
<em>Wrapper methods</em> on the underlying <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html">Hurricane::Segment</a>. </li>
</ul>
<ul>
<li>
<em>Atomic methods</em> on <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a>, that is, which applies exactly on the current <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a>. </li>
</ul>
<ul>
<li>
<em>Canonical methods</em> 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 <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> list parameters. <ul>
<em>Uniform access</em>, to simplify the managment of <aclass="el"href="classKatabatic_1_1AutoHorizontal.html"title="Concrete Horizontal AutoSegment. ">AutoHorizontal</a> and <aclass="el"href="classKatabatic_1_1AutoVertical.html"title="Concrete Vertical AutoSegment. ">AutoVertical</a> through <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a>, a set of uniformized methods is introduced. For instance, to avoid to check the dynamic type to choose to call <aclass="el"href="classKatabatic_1_1AutoSegment.html#ab160396298a1a51b9988ad246dc2a47f">getSourceX()</a> or <aclass="el"href="classKatabatic_1_1AutoSegment.html#a232af840ba84faa0b1411ba1c3a418f1">getSourceY()</a>, we may call <aclass="el"href="classKatabatic_1_1AutoSegment.html#aeaa1543880686755e389c4807128428f">getSourceU()</a>. Uniform methods are named by replacing <code>X/Y</code> with <code>U</code>. <ul>
<p><aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> constructor. It is not directly accessible, instead use one flavor of the <aclass="el"href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>. </p>
<p><aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> destructor. It is not directly accessible, instead use one flavor of the <aclass="el"href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>. </p>
<tr><tdclass="paramname">source</td><td>The source <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a>. </td></tr>
<tr><tdclass="paramname">target</td><td>The target <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a>. </td></tr>
<tr><tdclass="paramname">hurricaneSegment</td><td>The <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html">Hurricane::Segment</a> to decorate. </td></tr>
<p>Factory method to create <aclass="el"href="classKatabatic_1_1AutoHorizontal.html"title="Concrete Horizontal AutoSegment. ">AutoHorizontal</a> or <aclass="el"href="classKatabatic_1_1AutoVertical.html"title="Concrete Vertical AutoSegment. ">AutoVertical</a>. It is important to note that this function may modify the underlying <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html">Hurricane::Segment</a>.</p>
<li>Layer is set to the default (bottom) routing Layers.</li>
<li>Source & target anchor of <code>hurricaneSegment</code> are set on <code>source</code> and <code>target</code>. If the <code>hurricaneSegment</code> is already anchored and <code>source</code> or <code>target</code> are not the one decorating the anchors, an exception is thrown. </li>
<tr><tdclass="paramname">source</td><td>The source <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a>. </td></tr>
<tr><tdclass="paramname">target</td><td>The target <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a>. </td></tr>
<tr><tdclass="paramname">dir</td><td>Specify the segment direction. </td></tr>
<tr><tdclass="paramname">depth</td><td>The layer, given by it's depth in the RoutingGauge. </td></tr>
<p>Factory method to create <aclass="el"href="classKatabatic_1_1AutoHorizontal.html"title="Concrete Horizontal AutoSegment. ">AutoHorizontal</a> or <aclass="el"href="classKatabatic_1_1AutoVertical.html"title="Concrete Vertical AutoSegment. ">AutoVertical</a>. <code>flags</code> indicate the direction (KbHorizontal or KbVertical). The underlying <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/namespaceHurricane.html">Hurricane</a> segment is also created. </p>
<tdclass="memname"><aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html">Segment</a> * base </td>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#adcd751c3ec393fabdef5ede0ffff6f2d">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#adcd751c3ec393fabdef5ede0ffff6f2d">AutoHorizontal</a>.</p>
<tdclass="memname"><aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html">Segment</a> * base </td>
<p><b>Returns:</b> the decorated <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html">Hurricane::Segment</a>. </p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a9e651c17b47f82166a02865c9296a2df">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a9e651c17b47f82166a02865c9296a2df">AutoHorizontal</a>.</p>
<p><b>Returns:</b> If the decorated segment is a <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Horizontal.html">Hurricane::Horizontal</a>, return it. <code>NULL</code> otherwise. </p>
<p>Reimplemented in <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a659b8ed90de679564924afe07af478de">AutoHorizontal</a>.</p>
<p><b>Returns:</b> If the decorated segment is a <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Vertical.html">Hurricane::Vertical</a>, return it. <code>NULL</code> otherwise. </p>
<p>Reimplemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#ab6a809b6f3ef3cf5385fa35580e31e7a">AutoVertical</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Entity.html#a42bdf015f583be477cc54b48652b1007">Entity::getCell()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Component.html#a16607d07d915781dc4f5e6663cd7dd0a">Component::getNet()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0">AutoHorizontal::_makeDogleg()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a3715b38135ca24745f610bebd3407c10">AutoSegment::_postCreate()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Component.html#ab451ef19059e6e5bbb77ae391d02a039">Component::getLayer()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Component.html#aabb87b9ef71f71cea681a03a6213f616">Component::getBoundingBox()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#aa9d0303b444b44d7b8e47d42ac7151eb">Segment::getSourceHook()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#a0fe6cd20516eca2a0b5639ab886bd831">Segment::getTargetHook()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#a896f044b16daa2b24acacbe58d166dd8">Segment::getSource()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#afb5b4d8bddc75cd604c7a68aa5943c12">AutoSegment::getAutoSource()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a4430f9704a59e1d4f7c37d7166649510">AutoSegment::getOnSourceContact()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#a801c10f665297312d54ec756dd6b0013">Segment::getTarget()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a5a35baf84e1e3531c38a6132fb8118fb">AutoSegment::getAutoTarget()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#aadbb84c0f1383f6a2addc2661e388583">AutoSegment::getOnTargetContact()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#a41448cbe3f09da3ee0ff03c74ccc13e2">Segment::getOppositeAnchor()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#ac2d254eb530ff299dad804100198cc24">AutoSegment::getOppositeAnchor()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Component.html#a0f8299ed73705fd4fbf56589dcc7e074">Component::getX()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoVertical.html#a36c0eecad40d3559b5378caefec6a7e0">AutoVertical::_makeDogleg()</a>, and <aclass="el"href="classKatabatic_1_1AutoContactTerminal.html#a3e218f6934c51380fb15d0e2bd380071">AutoContactTerminal::updateGeometry()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Component.html#a727da3f127c3a7a0a09468219f98c3e6">Component::getY()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0">AutoHorizontal::_makeDogleg()</a>, and <aclass="el"href="classKatabatic_1_1AutoContactTerminal.html#a3e218f6934c51380fb15d0e2bd380071">AutoContactTerminal::updateGeometry()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#adb01934c4aa6faf6c18adee52fc27e16">Segment::getWidth()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#a9f6c42c2de0330aa6a486cdbf550cea1">Segment::getLength()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a6191fe9409cee6c5a0429ebb9e653ea4">AutoSegment::canReduce()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#abe32548ca8d41da334413928405fec87">AutoSegment::mustRaise()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#a0347e3bde8e2e90b05cffdaf2d048710">Segment::getSourceX()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#abf305dd4510de6fe6fae5286acbe285a">Segment::getSourceY()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#abba6713e109a0925c078a9785274f389">Segment::getTargetX()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0">AutoHorizontal::_makeDogleg()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#a27d530abcff9742b81c4b549db161b90">Segment::getTargetY()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#aceaa61242eb7275cf9c6a39cf1868c53">Segment::invert()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html#acd0b0cd25c824ba7f3b1ff2776c97cf1">Segment::setLayer()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0">AutoHorizontal::_makeDogleg()</a>, <aclass="el"href="classKatabatic_1_1AutoVertical.html#a36c0eecad40d3559b5378caefec6a7e0">AutoVertical::_makeDogleg()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#acecc9a1d55a271a4b1587d7872cfe133">AutoSegment::reduceDoglegLayer()</a>.</p>
<p><b>Returns:</b><b>true</b> if the <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html">Hurricane::Segment</a> is Horizontal. </p>
<p><b>Returns:</b><b>true</b> if the <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Segment.html">Hurricane::Segment</a> is Vertical. </p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a7654ca2b0787b8a9eac8629bf9218761">AutoSegment::computeOptimal()</a>, and <aclass="el"href="classKatabatic_1_1AutoContactTerminal.html#a2f7d64767002f3bf2bbdf2f8f0e80105">AutoContactTerminal::getSegment()</a>.</p>
<p><b>Returns:</b><b>true</b> if the segment is global (span over more than one <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>). </p>
<p><b>Returns:</b><b>true</b> if the segment is local (fully enclosed in one <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>). </p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a02e6ec81411b250d60dccc0da39964a6">AutoSegment::canMoveUp()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a1c810a1a6860202d94c670999546c4b8">AutoSegment::canPivotDown()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#af76432e1e58e015bde917134757003f9">AutoSegment::canPivotUp()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#aa21b16647c1750ba8b3eb9d99b12f073">AutoSegment::makeDogleg()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0">AutoHorizontal::_makeDogleg()</a>, and <aclass="el"href="classKatabatic_1_1AutoVertical.html#a36c0eecad40d3559b5378caefec6a7e0">AutoVertical::_makeDogleg()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#aaca749f49cd03ca06449d5ea2104033a">AutoSegment::getAligneds()</a>, <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a3f95c1f06fe0b58b44ccbc57d99f2a5d">Katabatic::KbPropagate</a>, and <aclass="el"href="namespaceKatabatic.html#a94585537ee1724ea9315578ec54380f4a93251a6b8197685e2aaf77a760851557">Katabatic::SegStrongTerminal</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a02e6ec81411b250d60dccc0da39964a6">AutoSegment::canMoveUp()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a1c810a1a6860202d94c670999546c4b8">AutoSegment::canPivotDown()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#af76432e1e58e015bde917134757003f9">AutoSegment::canPivotUp()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a02e6ec81411b250d60dccc0da39964a6">AutoSegment::canMoveUp()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a1c810a1a6860202d94c670999546c4b8">AutoSegment::canPivotDown()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#af76432e1e58e015bde917134757003f9">AutoSegment::canPivotUp()</a>.</p>
<p><b>Returns:</b><b>true</b> if segment is connected to turns and both perpandiculars segments are in the <em>top</em> layer (candidate for reduction). </p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a6191fe9409cee6c5a0429ebb9e653ea4">AutoSegment::canReduce()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#ad5a5ba75ef6654f9352cca1e4b0aff51">AutoSegment::isSpinTopOrBottom()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#abe32548ca8d41da334413928405fec87">AutoSegment::mustRaise()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#acecc9a1d55a271a4b1587d7872cfe133">AutoSegment::reduceDoglegLayer()</a>.</p>
<p><b>Returns:</b><b>true</b> if segment is connected to turns and both perpandiculars segments are in the <em>bottom</em> layer (candidate for reduction). </p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a6191fe9409cee6c5a0429ebb9e653ea4">AutoSegment::canReduce()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#ad5a5ba75ef6654f9352cca1e4b0aff51">AutoSegment::isSpinTopOrBottom()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#abe32548ca8d41da334413928405fec87">AutoSegment::mustRaise()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#acecc9a1d55a271a4b1587d7872cfe133">AutoSegment::reduceDoglegLayer()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a0330666095b102f61bc957eefae34c4f">AutoSegment::isSpinBottom()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#aaff91f5124850956e44501facf668556">AutoSegment::isSpinTop()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a6191fe9409cee6c5a0429ebb9e653ea4">AutoSegment::canReduce()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#acecc9a1d55a271a4b1587d7872cfe133">AutoSegment::reduceDoglegLayer()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a88ac40c065bce0ff97792d18b41b6a67">AutoSegment::revalidate()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a6a98d2e5839b880893703ad45db4e4c4">AutoSegment::_invalidate()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a23599eee5a07af377fbc8d47cda7e7b0">AutoSegment::invalidate()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a88ac40c065bce0ff97792d18b41b6a67">AutoSegment::revalidate()</a>.</p>
<p><b>Returns:</b><b>true</b> if segment has been changed of layer. Source and Target <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a> may need to be altered. </p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoContactTurn.html#af5bf1f5e71204ef84346e4e036175431">AutoContactTurn::updateTopology()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoContactTerminal.html#a3e218f6934c51380fb15d0e2bd380071">AutoContactTerminal::updateGeometry()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0">AutoHorizontal::_makeDogleg()</a>, <aclass="el"href="classKatabatic_1_1AutoVertical.html#a36c0eecad40d3559b5378caefec6a7e0">AutoVertical::_makeDogleg()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a8b0d5044dce091d06b633848a6f8a66d">AutoSegment::canonize()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a8acbe1037827da2c2fef71a18c5886c7">AutoSegment::getCanonical()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a3881efebb7510d9b22e5f89bcd418954">AutoSegment::setAxis()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a8ab41a962e18810808f4f065863b5a73">AutoSegment::toConstraintAxis()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a750983d7154c94b54537127a3a18e14b">AutoSegment::toOptimalAxis()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0">AutoHorizontal::_makeDogleg()</a>, and <aclass="el"href="classKatabatic_1_1AutoVertical.html#a36c0eecad40d3559b5378caefec6a7e0">AutoVertical::_makeDogleg()</a>.</p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#ab0c6fe24404afe19268a7b796fa74bec">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#ab0c6fe24404afe19268a7b796fa74bec">AutoHorizontal</a>.</p>
<li>Source & target are <aclass="el"href="classKatabatic_1_1AutoContactTurn.html"title="AutoContact Turn (one H, one V) ">AutoContactTurn</a>.</li>
<li>It is either <em>spin top</em> or <em>spin bottom</em>, that is connecting perpandiculars both in the same layer.</li>
<li>Has a length less or equal one pitch in the perpandicular direction.</li>
<li>Neither of the perpandicular are also reduceds. </li>
<p><b>Returns:</b> non-zero if the aligned set of segment can be broken <em>outside</em><code>interval</code>. The returned value could be zero (failure) or <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a67bb7c53bbbc73a0e2d1f3f3e16ab679">Katabatic::KbDoglegOnLeft</a> or <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217afe7fcb4c332f36e477433169b3d3f515">Katabatic::KbDoglegOnRight</a> menaing that the aligned set could be broken on the left of the <code>interval</code> (resp. right of it). </p>
<dlclass="section return"><dt>Returns</dt><dd><b>true</b> if the <em>global</em> segment can be moved on the left <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> (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:<ul>
<li>The segment mustn't be on the leftmost <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> (obvious...).</li>
<li>The segment must be global.</li>
<li>The source and target contacts must be AutoContactTurn(s).</li>
<li>At least one of the perpandicular must be global <b>and</b> connected through the <em>target</em>. That is, it's a global which extends toward left.</li>
<li>The <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> of maximum density on the left must remains below the current <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> of maximum density, with a margin of <code>reserve</code> (expressed in total saturation percentage). </li>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#aa9e85f38a842d1966eb72afccb446676">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#aa9e85f38a842d1966eb72afccb446676">AutoHorizontal</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd><b>true</b> if the <em>global</em> segment can be moved on the right <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> (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:<ul>
<li>The segment mustn't be on the leftmost <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> (obvious...).</li>
<li>The segment must be global.</li>
<li>The source and target contacts must be AutoContactTurn(s).</li>
<li>At least one of the perpandicular must be global <b>and</b> connected through the <em>source</em>. That is, it's a global which extends toward right.</li>
<li>The <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> of maximum density on the left must remains below the current <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> of maximum density, with a margin of <code>reserve</code> (expressed in total saturation percentage). </li>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a7559a856712400a9325665842e0bcd64">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a7559a856712400a9325665842e0bcd64">AutoHorizontal</a>.</p>
<tr><tdclass="paramname">reserve</td><td>Number of track that must remains free <em>after</em> the move. </td></tr>
<tr><tdclass="paramname">flags</td><td>Modificate the method behavior, see below. </td></tr>
</table>
</dd>
</dl>
<dlclass="section return"><dt>Returns</dt><dd><b>true</b> 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 <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> of the segment, at least <code>reserve</code> tracks are still avalaible <em>after</em> the segment has been moved up (<code>reserve</code> can be less than <code>1.0</code>).</dd></dl>
<li><code>KbAllowTerminal</code> : allow strong terminal to be moved up.</li>
<li><code>KbAllowLocal</code> : allow local segments to be moved up.</li>
<li><code>KbPropagate</code> : perform the check on the whole aligned set.</li>
<li><code>KbWithPerpands</code> : also check the density on the perpandiculars begin & end <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>, there must be at least a <code>0.5</code> density reserve on them. </li>
<p>Checks of the segment can be <em>pivoted</em> up. The difference between <code><aclass="el"href="classKatabatic_1_1AutoSegment.html#a02e6ec81411b250d60dccc0da39964a6">canMoveUp()</a></code> and <code><aclass="el"href="classKatabatic_1_1AutoSegment.html#af76432e1e58e015bde917134757003f9">canPivotUp()</a></code> lies in the fact that no perpandicular segment needs to be altered if the current segment is moved up. For example an <b>M3</b> segment connected to only <b>M4</b> can be pivoted up (in <b>M5</b>), but if connected to <b>M2</b>, it cannot.</p>
<p>Possible (bitwise) value for <code>flags</code> :</p>
<p>Checks of the segment can be <em>pivoted</em> down. The difference between <code>canMoveDown()</code> and <code><aclass="el"href="classKatabatic_1_1AutoSegment.html#a1c810a1a6860202d94c670999546c4b8">canPivotDown()</a></code> lies in the fact that no perpandicular segment needs to be altered if the current segment is moved down.</p>
<p>Possible (bitwise) value for <code>flags</code> :</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a676fcb7ece71d129b7a4d87a3f2e07aa">AutoSegment::_canSlacken()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#aaca749f49cd03ca06449d5ea2104033a">AutoSegment::getAligneds()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a017b1ead8e5988dd0e491cae93ac510c">AutoSegment::isGlobal()</a>.</p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#acfbdc94b1e84bd192087df53ead1f06f">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#acfbdc94b1e84bd192087df53ead1f06f">AutoHorizontal</a>.</p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a46576c7c5c5146f8fa53a821b0766994">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a46576c7c5c5146f8fa53a821b0766994">AutoHorizontal</a>.</p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> unique identifier. </p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a7c13d9795eafd477994961f8a0d962d0">AutoHorizontal::_preDestroy()</a>, and <aclass="el"href="classKatabatic_1_1AutoVertical.html#a7c13d9795eafd477994961f8a0d962d0">AutoVertical::_preDestroy()</a>.</p>
<p><b>Returns:</b><aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1a9045673c5d3c30b067100f1440ae1b">Katabatic::KbHorizontal</a> or <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a284cad95203a27172838b09e396e3590">Katabatic::KbVertical</a> according to the decorated segment. </p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a09d03fbca9ab891c2f25bdae7f89a899">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a09d03fbca9ab891c2f25bdae7f89a899">AutoHorizontal</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a0599f720e9aac305ecae20c7f4526c58">AutoSegment::getMinSpanU()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a5a63602ccc44f51012f10d138e1480c4">AutoSegment::getPerpandicularsBound()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a5ca22c853ee33a2b26367eaf29457766">AutoSegment::makeDogleg()</a>.</p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> into which the <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> starts (the one of the source). </p>
<tr><tdclass="paramname">gcells</td><td>A vector that will be filled by all the GCells that the segment overlap. In increasing order, from source to target. </td></tr>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#ab681dca7dc930e06cacc2de85bf99166">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#ab681dca7dc930e06cacc2de85bf99166">AutoHorizontal</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a02e6ec81411b250d60dccc0da39964a6">AutoSegment::canMoveUp()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a1c810a1a6860202d94c670999546c4b8">AutoSegment::canPivotDown()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#af76432e1e58e015bde917134757003f9">AutoSegment::canPivotUp()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a6f00fc7f0357778613214c4e57d9bc2f">AutoSegment::getSource()</a>, and <aclass="el"href="classKatabatic_1_1Session.html#acc20c1f675cc59f9a0068aba727eca47">Session::lookup()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#ac92a1ae33842aab5d067b393dd2596fe">AutoSegment::getTarget()</a>, and <aclass="el"href="classKatabatic_1_1Session.html#acc20c1f675cc59f9a0068aba727eca47">Session::lookup()</a>.</p>
<p><b>Returns:</b> The source or target <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a> opposite to <code>contact</code>. </p>
<p>References <aclass="el"href="classKatabatic_1_1AutoContact.html#a7f6571edacd5e4120cc9b87abd23082a">AutoContact::base()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a898ede38fc37409371bff9d7dc7f917a">AutoSegment::getOppositeAnchor()</a>, and <aclass="el"href="classKatabatic_1_1Session.html#acc20c1f675cc59f9a0068aba727eca47">Session::lookup()</a>.</p>
<tr><tdclass="paramname">bounds</td><td>A vector that will be filled by all the AutoSegments perpandicular to this one that induce a constraint. </td></tr>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#ae35b78590ed6aa546b626ef95f28c533">AutoSegment::getDirection()</a>, <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Component.html#a31b77ba995b667ea8dcde7d2044b5d65">Component::getSlaveComponents()</a>, <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Collection.html#a7a65ac0e7cb1a33b01b1179a5da093b6">GenericCollection< Type >::getSubSet()</a>, and <aclass="el"href="classKatabatic_1_1Session.html#acc20c1f675cc59f9a0068aba727eca47">Session::lookup()</a>.</p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> axis position. </p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a53877ff5ef48eb0030c2581a6eeb3c09">AutoSegment::base()</a>, <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Component.html#a0f8299ed73705fd4fbf56589dcc7e074">Component::getX()</a>, <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Component.html#a727da3f127c3a7a0a09468219f98c3e6">Component::getY()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#ac46ac3b48d712750c7888b48964ac189">AutoSegment::isHorizontal()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a7654ca2b0787b8a9eac8629bf9218761">AutoSegment::computeOptimal()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a3881efebb7510d9b22e5f89bcd418954">AutoSegment::setAxis()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a8ab41a962e18810808f4f065863b5a73">AutoSegment::toConstraintAxis()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a750983d7154c94b54537127a3a18e14b">AutoSegment::toOptimalAxis()</a>.</p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a><em>uniform</em> source position. (X for an horizontal and Y for a Vertical). </p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a3932d5ce9094ead510e4e33bd4e78e1a">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a3932d5ce9094ead510e4e33bd4e78e1a">AutoHorizontal</a>.</p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a><em>uniform</em> target position. (X for an horizontal and Y for a Vertical). </p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a8e5f2a51f56c6bdb74024ac77c08a22a">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a8e5f2a51f56c6bdb74024ac77c08a22a">AutoHorizontal</a>.</p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a><em>uniform</em> delta from source. (dX for an horizontal and dY for a Vertical). </p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a44998a5f0d71597006fe4f3ffed8e3d1">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a44998a5f0d71597006fe4f3ffed8e3d1">AutoHorizontal</a>.</p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a><em>uniform</em> delta from source. (dX for an horizontal and dY for a Vertical). </p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a4f505a59109fc6087696f483ccc7f9dc">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a4f505a59109fc6087696f483ccc7f9dc">AutoHorizontal</a>.</p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a><em>uniform</em> source (lowest) <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> coordinate. (dX for an horizontal and dY for a Vertical). </p>
<p>References <aclass="el"href="classKatabatic_1_1GCell.html#a852afe759ce2cb8cb9c0524fc1e23387">GCell::getX()</a>, <aclass="el"href="classKatabatic_1_1GCell.html#ac597d25a34a79fb4393211c70f5a1bc3">GCell::getY()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#ac46ac3b48d712750c7888b48964ac189">AutoSegment::isHorizontal()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a7654ca2b0787b8a9eac8629bf9218761">AutoSegment::computeOptimal()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a9bea24981e7eaafb5746015355bf44f7">AutoSegment::getOptimalMax()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a2786cefb5df6ac92dcbb081c55ae50e6">AutoSegment::getOptimalMin()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a90173ab4f35b98c6544f9482ccd93b5e">AutoSegment::setOptimalMax()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#af92b3d000552b630695879dd5d4736a1">AutoSegment::setOptimalMin()</a>.</p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a><em>uniform</em> target (greatest) <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> coordinate. (dX for an horizontal and dY for a Vertical). </p>
<p>References <aclass="el"href="classKatabatic_1_1GCell.html#ae58d4705ca2370ad5e0912d9e92e94da">GCell::getXMax()</a>, <aclass="el"href="classKatabatic_1_1GCell.html#a98f8c479d4789850a926d87443e56e00">GCell::getYMax()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#ac46ac3b48d712750c7888b48964ac189">AutoSegment::isHorizontal()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a7654ca2b0787b8a9eac8629bf9218761">AutoSegment::computeOptimal()</a>.</p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a><em>uniform</em> occupying interval (on X for horizontal and on Y for vertical). </p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a9409a4b64c21fa8b1517149728f0a4c1">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a9409a4b64c21fa8b1517149728f0a4c1">AutoHorizontal</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a43c865bcfcfd6132352a9ac8a84c25cd">AutoSegment::canDogleg()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a5ca22c853ee33a2b26367eaf29457766">AutoSegment::makeDogleg()</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>The <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a><em>uniform</em> minimum occupying interval, computed from the constraints of all the supporting aligned AutoContacts. (on X for horizontal and on Y for vertical). </dd></dl>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#ae35b78590ed6aa546b626ef95f28c533">AutoSegment::getDirection()</a>, <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Interval.html#ae264becc34395a6f5e92342ab0b0d5e4">Interval::getVMax()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Interval.html#a3d0e592c4f3cc32a2ead785e21a04dad">Interval::getVMin()</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>The Interval into witch the source <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a> can vary. By default all deduced constraints and user constraints are took into account. If <code>flags</code> contains <code>KbNativeConstraints</code> the constraint returned is only the enclosing <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </dd></dl>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a3c24695921b612a57c5ac60ff0aa3878">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a3c24695921b612a57c5ac60ff0aa3878">AutoHorizontal</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>The Interval into witch the target <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a> can vary. By default all deduced constraints and user constraints are took into account. If <code>flags</code> contains <code>KbNativeConstraints</code> the constraint returned is only the enclosing <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>. </dd></dl>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#aaa70ba865e312fb30f81fa7f973a0376">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#aaa70ba865e312fb30f81fa7f973a0376">AutoHorizontal</a>.</p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#aff207f4cc3c3682ed57369fdfe157d2d">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#aff207f4cc3c3682ed57369fdfe157d2d">AutoHorizontal</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a7654ca2b0787b8a9eac8629bf9218761">AutoSegment::computeOptimal()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a61a7442901868f6167e5b5303d8f1736">AutoSegment::getConstraints()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a15034a21dff23562fd70a83599a16d3a">AutoSegment::getSlack()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a8ab41a962e18810808f4f065863b5a73">AutoSegment::toConstraintAxis()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a750983d7154c94b54537127a3a18e14b">AutoSegment::toOptimalAxis()</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a7c2fed22b081f8d3b7a69abb457153ea">AutoSegment::getConstraints()</a>, <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Interval.html#ae264becc34395a6f5e92342ab0b0d5e4">Interval::getVMax()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Interval.html#a3d0e592c4f3cc32a2ead785e21a04dad">Interval::getVMin()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#aff207f4cc3c3682ed57369fdfe157d2d">AutoHorizontal::getConstraints()</a>, and <aclass="el"href="classKatabatic_1_1AutoVertical.html#aff207f4cc3c3682ed57369fdfe157d2d">AutoVertical::getConstraints()</a>.</p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> minimum axis optimal range. </p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#acedb5dbab9d0c872dc476fdbefff431c">AutoSegment::getOrigin()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/group__DbUGroup.html#gaa1ba98acc939ff1c370c18544a5e0dce">lambda()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#aaa87df41319c74dd180039708f68ff7e">AutoSegment::getCost()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#abc07fe91810925f4a0191cd245cc85b6">AutoSegment::getOptimal()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a750983d7154c94b54537127a3a18e14b">AutoSegment::toOptimalAxis()</a>.</p>
<p><b>Returns:</b> The <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> maximum axis optimal range. </p>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#acedb5dbab9d0c872dc476fdbefff431c">AutoSegment::getOrigin()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/group__DbUGroup.html#gaa1ba98acc939ff1c370c18544a5e0dce">lambda()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#aaa87df41319c74dd180039708f68ff7e">AutoSegment::getCost()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#abc07fe91810925f4a0191cd245cc85b6">AutoSegment::getOptimal()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a750983d7154c94b54537127a3a18e14b">AutoSegment::toOptimalAxis()</a>.</p>
<p>Inialize <code>i</code> with the <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> axis optimal range. </p>
<dlclass="section return"><dt>Returns</dt><dd>The cost if this segment is placed at <code>axis</code>. The cost is null if <code>axis</code> is inside the optimal interval and is the distance toward the nearest bound outside. </dd></dl>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a9bea24981e7eaafb5746015355bf44f7">AutoSegment::getOptimalMax()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a2786cefb5df6ac92dcbb081c55ae50e6">AutoSegment::getOptimalMin()</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>The canonical segment associated to this one. Additionnaly compute the source & target position of the whole set of aligned segments. </dd></dl>
<dlclass="section return"><dt>Returns</dt><dd>The canonical segment associated to this one. Additionnaly compute the source & target position of the whole set of aligned segments. </dd></dl>
<p>References <aclass="el"href="classKatabatic_1_1AutoSegment.html#a8acbe1037827da2c2fef71a18c5886c7">AutoSegment::getCanonical()</a>, <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Interval.html#ae264becc34395a6f5e92342ab0b0d5e4">Interval::getVMax()</a>, and <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/classHurricane_1_1Interval.html#a3d0e592c4f3cc32a2ead785e21a04dad">Interval::getVMin()</a>.</p>
<p>Set the <em>uniform</em><code>dU</code> from source anchor (dX for Horizontal, dY for Vertical). </p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a756616a1967c5ad8efd08be96d18f25d">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a756616a1967c5ad8efd08be96d18f25d">AutoHorizontal</a>.</p>
<p>Set the <em>uniform</em><code>dU</code> from target anchor (dX for Horizontal, dY for Vertical). </p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a9df2ef68c1fbf4159cc837be5c699b53">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a9df2ef68c1fbf4159cc837be5c699b53">AutoHorizontal</a>.</p>
<p>Recompute the terminal status of an <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a>. 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.</p>
<dlclass="section user"><dt>Remark:</dt><dd>The weakening is poorly done. After making a dogleg we do not know which of the segment must be weakened if not directly attached on a terminal. We must examinate source & target. </dd></dl>
<p>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 <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>, which are already ordered. </p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a59058f4593049c583c5b3698ff81b299">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a59058f4593049c583c5b3698ff81b299">AutoHorizontal</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a3715b38135ca24745f610bebd3407c10">AutoSegment::_postCreate()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a88ac40c065bce0ff97792d18b41b6a67">AutoSegment::revalidate()</a>.</p>
<p>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. </p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a9662a77c2ed8553d6a0312c5292060ad">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a9662a77c2ed8553d6a0312c5292060ad">AutoHorizontal</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#a3715b38135ca24745f610bebd3407c10">AutoSegment::_postCreate()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a88ac40c065bce0ff97792d18b41b6a67">AutoSegment::revalidate()</a>.</p>
<p>Constraints applies on the valid axis interval. Merge in <code>constraints</code> with the user's constraints. The resulting constraints is the intersection of the former user's contraints and the one given as argument. </p>
<p>References <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/group__DbUGroup.html#gadea6b9a6e84243f70f3a5e2725b2c6d8">getLambda()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#acedb5dbab9d0c872dc476fdbefff431c">AutoSegment::getOrigin()</a>.</p>
<p>References <aclass="elRef"doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/hurricane/doc/hurricane/html/hurricane.tag:../hurricane/"href="../hurricane/group__DbUGroup.html#gadea6b9a6e84243f70f3a5e2725b2c6d8">getLambda()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#acedb5dbab9d0c872dc476fdbefff431c">AutoSegment::getOrigin()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoSegment.html#ae64a61508d148cb4a0ee9b5ffb177659">AutoSegment::AutoSegment()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a7654ca2b0787b8a9eac8629bf9218761">AutoSegment::computeOptimal()</a>.</p>
<p>Mark this segment as valid (unset the Invalidated flag) and update positions. Unlike <aclass="el"href="classKatabatic_1_1AutoSegment.html#a23599eee5a07af377fbc8d47cda7e7b0">AutoSegment::invalidate()</a>, it's an atomic method. </p>
<tr><tdclass="paramname">from</td><td>The <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a><em>from</em> which we want to make a dogleg.</td></tr>
</table>
</dd>
</dl>
<p>This method is dedicated for the restauration of topology connexity on AutoContcact after a layer change on one of their connected <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a>.</p>
<li>Create a dogleg on the <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> (using the normal <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> variant).</li>
<li>Adjust the layers of the dogleg according whether we are going <em>up</em> or <em>down</em> from the <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a><code>from</code> to the segment.</li>
<li>Returns the new <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> connected to <code>from</code> (it may be the same as before, <b>if</b> the <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a> is the source of the segment). </li>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoContactTurn.html#af5bf1f5e71204ef84346e4e036175431">AutoContactTurn::updateTopology()</a>, and <aclass="el"href="classKatabatic_1_1AutoContactTerminal.html#af5bf1f5e71204ef84346e4e036175431">AutoContactTerminal::updateTopology()</a>.</p>
<p>Make a dogleg <em>in a set of aligned segments</em>, thus the dogleg may not be created on <code>this</code> segment but in one which span intersect <code>interval</code>.</p>
<p><b>Returns:</b> A set of flags telling if the break has occured on the left candidate (<aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a67bb7c53bbbc73a0e2d1f3f3e16ab679">Katabatic::KbDoglegOnLeft</a>) or right (<aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217afe7fcb4c332f36e477433169b3d3f515">Katabatic::KbDoglegOnRight</a>). 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.</p>
<p>Break the set of aligned segments so the break point is <em>outside</em><code>interval</code>. The break point so can occurs on the <em>left</em> of the interval (<aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a67bb7c53bbbc73a0e2d1f3f3e16ab679">Katabatic::KbDoglegOnLeft</a>) or on the <em>right</em> of the interval (<aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217afe7fcb4c332f36e477433169b3d3f515">Katabatic::KbDoglegOnRight</a>). When the set of aligned segments fully enclose <code>interval</code>, a choice has to be made between the left and right candidate. The rules are as follow:</p>
<li>A <em>left</em> candidate include the <em>min</em> of the interval into it's span.</li>
<li>A <em>right</em> candidate include the <em>max</em> of the interval into it's span.</li>
<li>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.</li>
<li>If the two candidates are avalaibles, we choose the one with the greated <em>native</em> constraints.</li>
<li>In case of strict equality, the left candidate is choosen.</li>
<p>Make a dogleg <em>in a set of aligned segments</em>, thus the dogleg may not be created on <code>this</code> segment but in the one which is under <code>doglegGCell</code>.</p>
<p><b>Returns:</b> A flag telling if the above or below layer was used for the perpandicular segment (<aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217af756099f1bbe259dd1bf22067dc40eac">Katabatic::KbUseAboveLayer</a> or <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a41cbd981337678e042354f340bfae25d">Katabatic::KbUseBelowLayer</a>). </p>
<p><b>This method is the workhorse for the various dogleg and topology restauration methods.</b> It is the atomic method that actually make the dogleg on <b>this</b> segment.</p>
<p><b>Returns:</b><aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217af756099f1bbe259dd1bf22067dc40eac">Katabatic::KbUseAboveLayer</a> if the dogleg is using the <em>above</em> layer (<aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a41cbd981337678e042354f340bfae25d">Katabatic::KbUseBelowLayer</a> for the below layer).</p>
<li>The segment is broken inside <code>doglegGCell</code>.</li>
<li>Two new segments are createds, one perpandicular and one parallel.</li>
<li>The original segment is always kept attached to the <em>source</em>. (the new parallel fragment is attached to the <em>target</em>).</li>
<li>The perpandicular segment is in the layer <em>above</em> by default. If we are already on the topmost routing layer, the <em>below</em> layer is used.</li>
<li>If the segment pass through the breaking <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>, it's axis is set into the center. If the segment is local, the axis is the middle of the segment.</li>
<li>The Local/Global kind of the original segment is updated. The local/global status is computed by the constructor of the <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> for the perpandicular and the new parallel.</li>
<li>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 <aclass="el"href="namespaceKatabatic.html#a94585537ee1724ea9315578ec54380f4a7b3e09b8ab4cf676fd308535d7fba892">Katabatic::SegWeakTerminal1</a>.</li>
<li>The perpandicular is obviously a canonical. If the broken segment is canonical, the original <b>is</b> 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).</li>
<li>The three segments are added to the session dogleg stack.</li>
</ul>
<p><spanclass="red">After this method call the net topology is guarantee to be valid.</span></p>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a36c0eecad40d3559b5378caefec6a7e0">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0">AutoHorizontal</a>.</p>
<p>Displace an Horizontal or Vertical segment to the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> below (a.k.a. lower or inferior). Rules for displacement:</p>
<li>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).</li>
<li>And, of course, the segment must not already by on the bottomost <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>...</li>
<li>Managing the status of the various perpandiculars. The stretched one are made global if needed. The shrinked one made local, if needed.</li>
<li>The supporting <aclass="el"href="classKatabatic_1_1AutoContact.html"title="Abstract base class for AutoContact. ">AutoContact</a> (source & target) are changed of <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a>.</li>
<li>If the segment is global, the go-through GCells are updateds.</li>
</ul>
<p><b>Returns:</b><b>true</b> if the move has succeeded.</p>
<divclass="image">
<imgsrc="moveULeft-1.png"alt="moveULeft-1.png"/>
<divclass="caption">
moveULeft() for an Horizontal</div></div>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a1fa2421b74bf0eb934b7002fd3da2321">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a1fa2421b74bf0eb934b7002fd3da2321">AutoHorizontal</a>.</p>
<p><b>This function do not manage an aligned set. It applies on <code>this</code> segment only.</b></p>
<p>Displace an Horizontal or Vertical segment to the <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> above (a.k.a. upper or superior). Rules for displacement:</p>
<dlclass="section see"><dt>See Also</dt><dd><aclass="el"href="classKatabatic_1_1AutoSegment.html#af8ca7b17e952f4b599aeeb2f4e5be395">AutoSegment::moveULeft()</a> for a complete description. </dd></dl>
<p>Implemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#aa469e37853e31f8b1bc817518c896d62">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#aa469e37853e31f8b1bc817518c896d62">AutoHorizontal</a>.</p>
<p>If the the <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> is attached trough source and/or target to a terminal with too tight constraints, create a dogleg on overconstrained extremities.</p>
<p>If <code>flags</code> contains <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a3f95c1f06fe0b58b44ccbc57d99f2a5d">Katabatic::KbPropagate</a>, 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).</p>
<p>If <code>flags</code> contains <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a1d6ccf82d04758a0922270d4f469066a">Katabatic::KbHalfSlacken</a>, the number of tracks under which the constraints are considered too tight is 3. Otherwise it is 10, that is a whole <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> 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).</p>
<p>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.</p>
<divclass="image">
<imgsrc="_slacken-1.png"alt="_slacken-1.png"/>
<divclass="caption">
slacken() for an Horizontal</div></div>
<p> The <code><aclass="el"href="classKatabatic_1_1AutoSegment.html#a1fbc0adb4c0b14632edc7c55f028cd4b">slacken()</a></code> method reject the slackening of short locals as shown in figure <b>2.a</b>. One way or another, we must connect to the terminal through <b>this</b> 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 <aclass="el"href="classKatabatic_1_1GCell.html"title="Routing Global Cell. ">GCell</a> and make subsequent routing more difficult.</p>
<p>The figures <b>2.b</b> and <b>2.c</b> shows the special case of slackening an horizontal from an <em>horizontal</em> terminal. In the original configuration, the slack on segment <code>id:10</code> 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 <code>id:10</code> we impose that the <em>source</em> contact is <b>fixed</b> on the terminal itself. That is, the segment <code>id:10</code> will be reduced to a zero-length and we made an immediate turn (see <b>2.c</b> ).</p>
<divclass="image">
<imgsrc="_slacken-2.png"alt="_slacken-2.png"/>
<divclass="caption">
slacken() for an Horizontal (special cases)</div></div>
<p>Perform the actual layer change on a reduced segment. This method is to be called juste before destroying the <aclass="el"href="namespaceKatabatic.html"title="The namespace dedicated to Katabatic. ">Katabatic</a> database.</p>
<p><b>Returns:</b><b>true</b> if a change occurs. </p>
<p><b>Returns:</b><b>true</b> if the operation did succeed. The layer will not be actually changed until the <aclass="el"href="namespaceKatabatic.html"title="The namespace dedicated to Katabatic. ">Katabatic</a> database is saved/destroyed.</p>
<li>Source & target are <aclass="el"href="classKatabatic_1_1AutoContactTurn.html"title="AutoContact Turn (one H, one V) ">AutoContactTurn</a>.</li>
<li>It is either <em>spin top</em> or <em>spin bottom</em>, that is connecting perpandiculars both in the same layer.</li>
<li>Has a length less or equal one pitch in the perpandicular direction.</li>
<li>Neither of the perpandicular are also reduceds.</li>
</ul>
<divclass="image">
<imgsrc="reduce-1.png"alt="reduce-1.png"/>
<divclass="caption">
Reduce Example</div></div>
<p> If segment <code>id:12</code> is reduced, it prevents <code>id:10</code>&<code>id:14</code> to be also reduced, by increasing the <code>_reduced</code> counter. In this example <code>id:14</code> is <em>spin top</em> and <code>id:12</code> is <em>spin bottom</em>.</p>
<p>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 <em>same layer</em> dogleg. Besides, the turn contact between them will be changed into a pure metal one, generating a disconnexion...</p>
<p>Find and set the canonical <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> 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.</p>
<p>The canonical <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> is the one with the lowest <code>Id</code>. This a way of ensuring reproductible results. Note that the canonical one may not be the <em>geometrically</em> lowest one.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0">AutoHorizontal::_makeDogleg()</a>, and <aclass="el"href="classKatabatic_1_1AutoVertical.html#a36c0eecad40d3559b5378caefec6a7e0">AutoVertical::_makeDogleg()</a>.</p>
<p>Invalidate this <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a>, or if the <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217a3f95c1f06fe0b58b44ccbc57d99f2a5d">Katabatic::KbPropagate</a> flags is set, the whole set of aligned segments.</p>
<dlclass="section user"><dt>Remark:</dt><dd>If <aclass="el"href="namespaceKatabatic.html"title="The namespace dedicated to Katabatic. ">Katabatic</a> is in the destruction stage, this function does nothing. </dd></dl>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a36c0eecad40d3559b5378caefec6a7e0">AutoHorizontal::_makeDogleg()</a>, <aclass="el"href="classKatabatic_1_1AutoVertical.html#a36c0eecad40d3559b5378caefec6a7e0">AutoVertical::_makeDogleg()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a3715b38135ca24745f610bebd3407c10">AutoSegment::_postCreate()</a>, <aclass="el"href="classKatabatic_1_1AutoContactVTee.html#af5bf1f5e71204ef84346e4e036175431">AutoContactVTee::updateTopology()</a>, <aclass="el"href="classKatabatic_1_1AutoContactTurn.html#af5bf1f5e71204ef84346e4e036175431">AutoContactTurn::updateTopology()</a>, and <aclass="el"href="classKatabatic_1_1AutoContactTerminal.html#af5bf1f5e71204ef84346e4e036175431">AutoContactTerminal::updateTopology()</a>.</p>
<tr><tdclass="paramname">processeds</td><td>A set of already processeds <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a>. Used by the caller function to avoid doing again the computation on an <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> from an already proccessed aligned set. Compute the optimal axis interval for the aligned set.</td></tr>
<p>Set the axis of an aligned set. This method does nothing if not called on the canonical <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> of the set. If the new value of the axis is equal to the previous one, nothing is done (non-canonical <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> are not looked after). To force an actual axis set, with invalidation of the whole <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> set, set the KbRealignate flag.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a1fa2421b74bf0eb934b7002fd3da2321">AutoHorizontal::moveULeft()</a>, <aclass="el"href="classKatabatic_1_1AutoVertical.html#a1fa2421b74bf0eb934b7002fd3da2321">AutoVertical::moveULeft()</a>, <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#aa469e37853e31f8b1bc817518c896d62">AutoHorizontal::moveURight()</a>, <aclass="el"href="classKatabatic_1_1AutoVertical.html#aa469e37853e31f8b1bc817518c896d62">AutoVertical::moveURight()</a>, <aclass="el"href="classKatabatic_1_1AutoSegment.html#a8ab41a962e18810808f4f065863b5a73">AutoSegment::toConstraintAxis()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#a750983d7154c94b54537127a3a18e14b">AutoSegment::toOptimalAxis()</a>.</p>
<p>If the <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> axis is outside the constraint interval, put it on nearest bound. This method is active only on canonical AutoSegments.</p>
<dlclass="section return"><dt>Returns</dt><dd><b>true</b> if an actual axis change is made.</dd></dl>
<p>If the <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> axis is outside the optimal interval, put it on nearest bound. This method is active only on canonical AutoSegments.</p>
<dlclass="section return"><dt>Returns</dt><dd><b>true</b> if an actual axis change is made.</dd></dl>
<p><b>Returns:</b> The Collection of <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> in <code>direction</code> that are on this segment source contact. </p>
<p><b>Returns:</b> The Collection of <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> in <code>direction</code> that are on this segment target contact. </p>
<p>The Collection of AutoSegments that are aligned on this one through <aclass="el"href="classKatabatic_1_1AutoContactHTee.html"title="AutoContact H-Tee (two H, one V) ">AutoContactHTee</a> or <aclass="el"href="classKatabatic_1_1AutoContactVTee.html"title="AutoContact V-Tee (one H, two V) ">AutoContactVTee</a>. If the <code>flags</code> contains <aclass="el"href="namespaceKatabatic.html#a2af2ad6b6441614038caf59d04b3b217ae2d033c8f78b61468c827de8db5fe839">Katabatic::KbWithPerpands</a>, the Collection will also includes the AutoSegments directly perpandiculars to the whole aligned set. </p>
<p>Perform sanity checks before allowing the actual creation of an <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a>. If an error occurs throw an exception.</p>
<p>Perform operations that, given the data structure cannot be done in the constructor. Also allows for sharing code with the derived classes. Currently:</p>
<li>Invalidate the whole net (topology change).</li>
<li>Insert the <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> in the lookup/Session machanism.</li>
<p>Reimplemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a3715b38135ca24745f610bebd3407c10">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a3715b38135ca24745f610bebd3407c10">AutoHorizontal</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a3715b38135ca24745f610bebd3407c10">AutoHorizontal::_postCreate()</a>, <aclass="el"href="classKatabatic_1_1AutoVertical.html#a3715b38135ca24745f610bebd3407c10">AutoVertical::_postCreate()</a>, and <aclass="el"href="classKatabatic_1_1AutoSegment.html#ab0cc9e57beeceec519cd4bd3e415569e">AutoSegment::create()</a>.</p>
<p>Perform operations that must be done before the actual destructor is called. Merely whidrawn the <aclass="el"href="classKatabatic_1_1AutoSegment.html"title="Abstract base class for AutoSegment. ">AutoSegment</a> from the lookup/Session mechanism. </p>
<p>Reimplemented in <aclass="el"href="classKatabatic_1_1AutoVertical.html#a7c13d9795eafd477994961f8a0d962d0">AutoVertical</a>, and <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a7c13d9795eafd477994961f8a0d962d0">AutoHorizontal</a>.</p>
<p>References <aclass="el"href="classKatabatic_1_1Observable.html#a52e577fb0c4f2e3650928334fb621c2f">Observable::notify()</a>, and <aclass="el"href="classKatabatic_1_1Session.html#a10c42636ea5786d898d530905ccb30d6">Session::unlink()</a>.</p>
<p>Referenced by <aclass="el"href="classKatabatic_1_1AutoHorizontal.html#a7c13d9795eafd477994961f8a0d962d0">AutoHorizontal::_preDestroy()</a>, and <aclass="el"href="classKatabatic_1_1AutoVertical.html#a7c13d9795eafd477994961f8a0d962d0">AutoVertical::_preDestroy()</a>.</p>
<p>Invalidate this segment. The segment is scheduled into the <aclass="el"href="classKatabatic_1_1Session.html"title="Modification Session for Katabatic. ">Session</a> revalidation mechanism. </p>