<ahref="#pub-methods">Public Member Functions</a>|
<ahref="classKite_1_1DataNegociate-members.html">List of all members</a></div>
<divclass="headertitle">
<divclass="title">DataNegociate Class Reference</div></div>
</div><!--header-->
<divclass="contents">
<p>Algorimthmic datas associated the <aclass="el"href="classKite_1_1TrackSegment.html"title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a>.
<divclass="textblock"><p>Algorimthmic datas associated the <aclass="el"href="classKite_1_1TrackSegment.html"title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a>. </p>
<p>The <aclass="el"href="classKite_1_1DataNegociate.html"title="Algorimthmic datas associated the TrackSegment. ">DataNegociate</a> object contains all the informations the negociation algorithm needs to know about a <aclass="el"href="classKite_1_1TrackSegment.html"title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a>. Those informations mostly describe the slackening and ripup state of that segment.</p>
<li>The ripup count in the current state. The count is reset to zero at each state transition.</li>
<li>The slackening state (see <aclass="el"href="classKite_1_1DataNegociate.html#ab7ccb6fc1f298728995250a3bbcf18c7">DataNegociate::SlackState</a>). The state indicate the <b>next</b> topological modification to be applied on the segment should the ripup count reach it's maximal value.</li>
<li>The associated <aclass="el"href="classKite_1_1RoutingEvent.html"title="Atomic Placement Request for a TrackSegment. ">RoutingEvent</a>. If no <aclass="el"href="classKite_1_1RoutingEvent.html"title="Atomic Placement Request for a TrackSegment. ">RoutingEvent</a> is present, it means the segment has been either successufully placed or the algorithm has given up trying to. If present, it is a <em>pending</em> request for placement.</li>
<li><code>leftMinExtend</code>, the potential minimal position of the segment left extension. May not be reachable due to other topological constraints.</li>
<li><code>rightMinExtend</code>, the potential minimal position of the segment right extension.</li>
<li><code>terminals</code>, the number of terminals attached to this segment.</li>
<li><code>attractors</code>, a table of coordinates of the end points of the perpandiculars to this segment. Used to compute the wiring delta if we move the axis of the segment.</li>
<li><code>perpandiculars</code>, a <code>vector</code> of the perpandicular <aclass="el"href="classKite_1_1TrackElement.html"title="Abstract Class for all Elements inserted inside a Track. ">TrackElement</a>. This is a fast-access cache. It must be updated each time the topology of the net is modificated.</li>
<li><code>perpandicularFree</code>, the free interval defined by the perpandiculars, that is for the sgement axis.</li>
<p>All those informations are computed and updated by the <aclass="el"href="classKite_1_1DataNegociate.html#ac5c54df7ed3b930268c8d7752c101725">DataNegociate::update()</a> method, which relies on:</p><ul>
<p><spanclass="red">They must be reviewed as they do not take advantage of the new</span><spanclass="red">AutoSegment structuration.</span></p>
<p>For every perpandicular set of AutoSegment to the <aclass="el"href="classKite_1_1TrackSegment.html"title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a> we want to place, get the coordinates of the extremity not connected to the segment and put that coordinate into a table associated with it's <em>spin</em>. The <em>spin</em> tells if the extremity is attracting the segment <em>up</em> or <em>down</em> (for an horizontal segment). The <em>spin</em> is incremented for up and decremented for down. After all the extremities have been processeds, we took into account only the coordinates with a non-zero spin, which means they truly attract the segment (whatever the direction).</p>
<p> The <em>wiring delta</em> is the total wire length needed to connect from the attractors to the segment, should it be placed on <code>axis</code>.</p>
<p>Main changes in <aclass="el"href="classKite_1_1DataNegociate.html"title="Algorimthmic datas associated the TrackSegment. ">DataNegociate</a> class design:</p><ul>
<li>Merge in the separate class <code>Cost</code>.</li>
<li>Suppress the <code>SlackState::Desalignate</code>, due to the simplificated structure of the AutoSegment/AutoContacts (no more collapseds, or forced alignements). </li>
<p>Describe the various stages of a <aclass="el"href="classKite_1_1TrackSegment.html"title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a> slackening. The numerical values are choosen so we can increment them as a counter. </p>
<tr><thcolspan="2">Enumerator</th></tr><tr><tdclass="fieldname"><aid="ab7ccb6fc1f298728995250a3bbcf18c7a19d8d157762b2b73c5274e4865523d29"></a>RipupPerpandiculars </td><tdclass="fielddoc"><p>Force perpandiculars to be riped up as well as the <aclass="el"href="classKite_1_1TrackSegment.html"title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a>, then schedule the placement of the <aclass="el"href="classKite_1_1TrackSegment.html"title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a><em>before</em> it's perpandiculars. </p>
<tr><tdclass="fieldname"><aid="ab7ccb6fc1f298728995250a3bbcf18c7a548e204a4e2ffae50774910737f11380"></a>Minimize </td><tdclass="fielddoc"><p>If the <aclass="el"href="classKite_1_1TrackSegment.html"title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a> is made of multiple TrackSegments with a forced alignement, suppress the alignement constraint.</p>
<p><spanclass="red">This should be deprecated now</span>. Try to displace the perpandiculars so the <aclass="el"href="classKite_1_1TrackSegment.html"title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a> is reduced to it's minimal length. </p>
<tr><tdclass="fieldname"><aid="ab7ccb6fc1f298728995250a3bbcf18c7a361bca46d5e7bdf02f50f7ecaa6018a9"></a>Dogleg </td><tdclass="fielddoc"><p>Break the segment into two smaller ones. </p>
<tr><tdclass="fieldname"><aid="ab7ccb6fc1f298728995250a3bbcf18c7a0d4bff02b3163821c0e5f7ad9dd55f36"></a>Slacken </td><tdclass="fielddoc"><p>Create additional wiring so threre is no more contraints transmitted by the perpandiculars or the terminal contacts. </p>
<tr><tdclass="fieldname"><aid="ab7ccb6fc1f298728995250a3bbcf18c7ae08187cba35efd6229ab8acfd003a600"></a>ConflictSolveByHistory </td><tdclass="fielddoc"><p>Try to solve a conflict between a set of global segments by analysing the event/ripup history. See <aclass="el"href="classKite_1_1SegmentFsm.html#a0d9a9926ae67cc7998799347f135e28a">SegmentFsm::conflictSolveByHistory()</a>. </p>
<tr><tdclass="fieldname"><aid="ab7ccb6fc1f298728995250a3bbcf18c7afce071be0ba39626ed1c865789da598b"></a>ConflictSolveByPlaceds </td><tdclass="fielddoc"><p>Try to solve a conflict between a set of global segments by analysing the current track context. See <aclass="el"href="classKite_1_1SegmentFsm.html#a9c0fa6a9067b6e027e24f38330f627dc">SegmentFsm::conflictSolveByPlaceds()</a>. </p>
<tr><tdclass="fieldname"><aid="ab7ccb6fc1f298728995250a3bbcf18c7aa54078da5ffb3463f7d6f291b0b0725e"></a>LocalVsGlobal </td><tdclass="fielddoc"><p><spanclass="red">To be reviewed</span>. </p>
<tr><tdclass="fieldname"><aid="ab7ccb6fc1f298728995250a3bbcf18c7adfd76a7d65b56ed7ecc0eedf921d6f82"></a>MoveUp </td><tdclass="fielddoc"><p>The segment is to be moved up (if possible). </p>
<tr><tdclass="fieldname"><aid="ab7ccb6fc1f298728995250a3bbcf18c7a9fc7197613f3435d906edf69a73acf38"></a>MaximumSlack </td><tdclass="fielddoc"><p>The final state, topological modifications are exhausteds, if it cannot place at this point, it never will. </p>
<tr><tdclass="fieldname"><aid="ab7ccb6fc1f298728995250a3bbcf18c7ac64569bb9cffe0532bc43b52d7b6c383"></a>Unimplemented </td><tdclass="fielddoc"><p>Used only during the development stage, telling that the state is not available yet. </p>
<tr><tdclass="fieldname"><aid="ab7ccb6fc1f298728995250a3bbcf18c7a27b403019a93f9f127cf64a0688a8288"></a>Repair </td><tdclass="fielddoc"><p>The router is in repair mode. </p>
<p><b>Returns:</b><b>true</b> if there is a pending <aclass="el"href="classKite_1_1RoutingEvent.html"title="Atomic Placement Request for a TrackSegment. ">RoutingEvent</a> for this <aclass="el"href="classKite_1_1TrackSegment.html"title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a>. </p>
<pclass="reference">Referenced by <aclass="el"href="classKite_1_1NegociateWindow.html#a51ba8e6a122c0cb93174027658cade63">NegociateWindow::addRoutingEvent()</a>, and <aclass="el"href="classKite_1_1TrackSegment.html#a0ffe603ec7d46f21f5e56ccbe84c03fb">TrackSegment::reschedule()</a>.</p>
<p><b>Returns:</b> The pending <aclass="el"href="classKite_1_1RoutingEvent.html"title="Atomic Placement Request for a TrackSegment. ">RoutingEvent</a>. <code>NULL</code> will be returned if there is no pending event, meaning that the segment has been placed. </p>
<pclass="reference">Referenced by <aclass="el"href="classKite_1_1SegmentAction.html#a324f17f0f5a09b76344eb2e003695d74">SegmentAction::doAction()</a>, <aclass="el"href="classKite_1_1Manipulator.html#af7b3305693dab195d0c5d075821fbb30">Manipulator::makeDogleg()</a>, <aclass="el"href="classKite_1_1Manipulator.html#a8b5b69fd5762d5a0cbc4ceea4d1b68c1">Manipulator::relax()</a>, <aclass="el"href="classKite_1_1TrackSegment.html#a0ffe603ec7d46f21f5e56ccbe84c03fb">TrackSegment::reschedule()</a>, <aclass="el"href="classKite_1_1RoutingEvent.html#abf2d02f18f96183fc6e78f3e6dc8cbf6">RoutingEvent::reschedule()</a>, and <aclass="el"href="classKite_1_1TrackSegment.html#acc245ce084989d1c34816d0e61b9d510">TrackSegment::swapTrack()</a>.</p>
<p><b>Returns:</b> The associated <aclass="el"href="classKite_1_1TrackSegment.html"title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a>. </p>
<p><b>Returns:</b> The minimum extend possible of the segment's source (left) ending. Computed by <aclass="el"href="classKite_1_1DataNegociate.html#ac5c54df7ed3b930268c8d7752c101725">DataNegociate::update()</a>. </p>
<pclass="reference">Referenced by <aclass="el"href="classKite_1_1Manipulator.html#a7140b507da2cab137d968a037bed19df">Manipulator::insertInTrack()</a>.</p>
<p><b>Returns:</b> The minimum extend possible of the segment's target (right) ending. Computed by <aclass="el"href="classKite_1_1DataNegociate.html#ac5c54df7ed3b930268c8d7752c101725">DataNegociate::update()</a>. </p>
<pclass="reference">Referenced by <aclass="el"href="classKite_1_1Manipulator.html#a7140b507da2cab137d968a037bed19df">Manipulator::insertInTrack()</a>.</p>
<p><b>Returns:</b> The number of terminal to which this segment is connected Computed by <aclass="el"href="classKite_1_1DataNegociate.html#ac5c54df7ed3b930268c8d7752c101725">DataNegociate::update()</a>.</p>
<p><spanclass="red">Must be refined: direct or indirect?</span>. </p>
<p><b>Returns:</b> The current state (see <aclass="el"href="classKite_1_1DataNegociate.html#ab7ccb6fc1f298728995250a3bbcf18c7">DataNegociate::SlackState</a>). </p>
<pclass="reference">Referenced by <aclass="el"href="classKite_1_1RoutingEvent.html#a40ec2b23684a0e6e6d7ac9783a269037">RoutingEvent::getState()</a>, <aclass="el"href="classKite_1_1Manipulator.html#a7140b507da2cab137d968a037bed19df">Manipulator::insertInTrack()</a>, and <aclass="el"href="classKite_1_1Manipulator.html#a147c24aa53f561c10d5d24b82b03448a">Manipulator::ripupPerpandiculars()</a>.</p>
<pclass="reference">Referenced by <aclass="el"href="classKite_1_1SegmentFsm.html#a9c0fa6a9067b6e027e24f38330f627dc">SegmentFsm::conflictSolveByPlaceds()</a>.</p>
<pclass="reference">Referenced by <aclass="el"href="classKite_1_1Manipulator.html#acae2506c976194aef762d27900c97b02">Manipulator::canRipup()</a>, <aclass="el"href="classKite_1_1SegmentAction.html#a324f17f0f5a09b76344eb2e003695d74">SegmentAction::doAction()</a>, and <aclass="el"href="classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f">RoutingEvent::process()</a>.</p>
<dlclass="section return"><dt>Returns</dt><dd>A composite number combining the state and the ripup count: <code>(state<<4)+ripup</code>. </dd></dl>
<p>Set or reset the slacking state (see SlackState). If the <code>state</code> is the same as the current one, the state count is incremented. If the new state changes or <code>flags</code> contain KtReset, the state count is reset to one. </p>
<pclass="reference">Referenced by <aclass="el"href="classKite_1_1SegmentAction.html#a324f17f0f5a09b76344eb2e003695d74">SegmentAction::doAction()</a>, <aclass="el"href="classKite_1_1Manipulator.html#a8b5b69fd5762d5a0cbc4ceea4d1b68c1">Manipulator::relax()</a>, <aclass="el"href="classKite_1_1Manipulator.html#a9721ea909a9b11297dea855e1ba82a55">Manipulator::repackPerpandiculars()</a>, <aclass="el"href="classKite_1_1RoutingEvent.html#abf2d02f18f96183fc6e78f3e6dc8cbf6">RoutingEvent::reschedule()</a>, <aclass="el"href="classKite_1_1Manipulator.html#a147c24aa53f561c10d5d24b82b03448a">Manipulator::ripupPerpandiculars()</a>, and <aclass="el"href="classKite_1_1RoutingEvent.html#af7ce7f73feb28f3df8f3180632a2f731">RoutingEvent::setState()</a>.</p>
<p>Associate <code>event</code> to this <aclass="el"href="classKite_1_1TrackSegment.html"title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a>. </p>
<pclass="reference">Referenced by <aclass="el"href="classKite_1_1RoutingEvent.html#abf2d02f18f96183fc6e78f3e6dc8cbf6">RoutingEvent::reschedule()</a>, and <aclass="el"href="classKite_1_1RoutingEvent.html#ae2eddb4497661b6319616a70c4acd165">RoutingEvent::setSegment()</a>.</p>
<pclass="reference">Referenced by <aclass="el"href="classKite_1_1SegmentAction.html#a324f17f0f5a09b76344eb2e003695d74">SegmentAction::doAction()</a>.</p>
<pclass="reference">Referenced by <aclass="el"href="classKite_1_1SegmentAction.html#a324f17f0f5a09b76344eb2e003695d74">SegmentAction::doAction()</a>.</p>
<dlclass="section user"><dt>Remark: The constructor do not calls it. It is to the algorithm responsability</dt><dd>to call it before using the computed datas. </dd></dl>
<pclass="reference">Referenced by <aclass="el"href="classKite_1_1NegociateWindow.html#a329dbc5bc549e3fe354996368dbf7113">NegociateWindow::setGCells()</a>.</p>