<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.0//EN'> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"> <title>Kite - Detailed Router</title> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="SoC.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head> <h1 id="pagetop" class="header">Kite - Detailed Router</h1> <!-- <center class="header"> <table class="header"> <tr> <td><a href="customSummary.html">Summary</a></td> <td><a href="namespaces.html">Namespaces</a></td> <td><a href="customHierarchy.html">Class Hierarchy</a></td> <td><a href="annotated.html">Classes</a></td> <td><a href="functions.html">Member Index</a></td> </tr> </table> </center> --> <br> <body onload="javascript:toggleLevel(1)"> <!-- Generated by Doxygen 1.8.14 --> <script type="text/javascript" src="menudata.js"></script> <script type="text/javascript" src="menu.js"></script> <script type="text/javascript"> /* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&dn=gpl-2.0.txt GPL-v2 */ $(function() { initMenu('',false,false,'search.php','Search'); }); /* @license-end */</script> <div id="main-nav"></div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="namespaceKite.html">Kite</a></li><li class="navelem"><a class="el" href="classKite_1_1RoutingEventLoop.html">RoutingEventLoop</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#pub-methods">Public Member Functions</a> | <a href="classKite_1_1RoutingEventLoop-members.html">List of all members</a> </div> <div class="headertitle"> <div class="title">RoutingEventLoop Class Reference</div> </div> </div><!--header--> <div class="contents"> <p>Simple loop dectector for <a class="el" href="classKite_1_1RoutingEvent.html" title="Atomic Placement Request for a TrackSegment. ">RoutingEvent</a>. <a href="classKite_1_1RoutingEventLoop.html#details">More...</a></p> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a> Public Member Functions</h2></td></tr> <tr class="memitem:aa33efa06ccc2175e35eff7ac6dadffb6"><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classKite_1_1RoutingEventLoop.html#aa33efa06ccc2175e35eff7ac6dadffb6">RoutingEventLoop</a> (size_t depth=10, int limit=20)</td></tr> <tr class="separator:aa33efa06ccc2175e35eff7ac6dadffb6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a78155a2b0119ac92d377fa404e348a98"><td class="memItemLeft" align="right" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="classKite_1_1RoutingEventLoop.html#a78155a2b0119ac92d377fa404e348a98">isLooping</a> () const</td></tr> <tr class="separator:a78155a2b0119ac92d377fa404e348a98"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5744f7f01d26947fb0765bc5d1e2c3bd"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="classKite_1_1RoutingEventLoop.html#a5744f7f01d26947fb0765bc5d1e2c3bd">getMaxCount</a> () const</td></tr> <tr class="separator:a5744f7f01d26947fb0765bc5d1e2c3bd"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7411a9e20edba3f3eeceb237dec86ff3"><td class="memItemLeft" align="right" valign="top">const std::vector< Element > & </td><td class="memItemRight" valign="bottom"><a class="el" href="classKite_1_1RoutingEventLoop.html#a7411a9e20edba3f3eeceb237dec86ff3">getElements</a> () const</td></tr> <tr class="separator:a7411a9e20edba3f3eeceb237dec86ff3"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad684b7c05480897bdbd86a5fb8363c72"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classKite_1_1RoutingEventLoop.html#ad684b7c05480897bdbd86a5fb8363c72">update</a> (size_t id)</td></tr> <tr class="separator:ad684b7c05480897bdbd86a5fb8363c72"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9b6582ce996327c65bf532396ca11b61"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="classKite_1_1RoutingEventLoop.html#a9b6582ce996327c65bf532396ca11b61">erase</a> (size_t id)</td></tr> <tr class="separator:a9b6582ce996327c65bf532396ca11b61"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>Simple loop dectector for <a class="el" href="classKite_1_1RoutingEvent.html" title="Atomic Placement Request for a TrackSegment. ">RoutingEvent</a>. </p> <p>The <a class="el" href="classKite_1_1RoutingEventLoop.html" title="Simple loop dectector for RoutingEvent. ">RoutingEventLoop</a> can be roughly understood as a truncated histogram of the <code>depth</code> last (in the time meaning) greatest riped up elements.</p> <p>The loop detector keep track of the <code>depth</code> <a class="el" href="classKite_1_1TrackElement.html" title="Abstract Class for all Elements inserted inside a Track. ">TrackElement</a> with the greatest processing count. <a class="el" href="classKite_1_1TrackElement.html" title="Abstract Class for all Elements inserted inside a Track. ">TrackElement</a> are just identified through the <code>id</code> of their associated AutoSegment. Each entry in the loop table contains:</p><ul> <li>The <code>id</code> of the associated <a class="el" href="classKite_1_1TrackSegment.html" title="Derived Katabatic::AutoSegment for the router. ">TrackSegment</a> (<a class="elRef" doxygen="/dsk/l1/jpc/coriolis-2.x/src/coriolis/katabatic/doc/html/katabatic.tag:../katabatic/" href="../katabatic/classKatabatic_1_1AutoSegment.html">Katabatic::AutoSegment</a>).</li> <li>The <code>count</code> of times it has been processed</li> <li>The <code>timestamp</code> of the latest time it has been updated.</li> </ul> <p>The table (implemented as <code>vector<></code>) it kept sorted on the timestamp (decreasing). Whenever there is more than <code>depth</code> elements in the table, the oldest one are discarted (regardless of their count). Obviously, there are pathological cases into which a loop cannot be detected, but so far it has not happened so a more robust approach seems not necessary at this time.</p> <p>Whenever the count of an element reaches <code>countLimit</code>, the looping flag is set. It will remains set unless the faulty element is manually removed. </p> </div><h2 class="groupheader">Constructor & Destructor Documentation</h2> <a id="aa33efa06ccc2175e35eff7ac6dadffb6"></a> <h2 class="memtitle"><span class="permalink"><a href="#aa33efa06ccc2175e35eff7ac6dadffb6">◆ </a></span>RoutingEventLoop()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="classKite_1_1RoutingEventLoop.html">RoutingEventLoop</a> </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>depth</em> = <code>10</code>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>countLimit</em> = <code>20</code> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Construct a loop detector that handle <code>depth</code> differents segments and has a looping threshold of <code>countLimit</code>. </p> </div> </div> <h2 class="groupheader">Member Function Documentation</h2> <a id="a78155a2b0119ac92d377fa404e348a98"></a> <h2 class="memtitle"><span class="permalink"><a href="#a78155a2b0119ac92d377fa404e348a98">◆ </a></span>isLooping()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">bool isLooping </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span></span> </td> </tr> </table> </div><div class="memdoc"> <p><b>Returns:</b> <b>true</b> if the loop threshold has been reached for at least one element. </p> <p class="reference">Referenced by <a class="el" href="classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f">RoutingEvent::process()</a>.</p> </div> </div> <a id="a5744f7f01d26947fb0765bc5d1e2c3bd"></a> <h2 class="memtitle"><span class="permalink"><a href="#a5744f7f01d26947fb0765bc5d1e2c3bd">◆ </a></span>getMaxCount()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">int getMaxCount </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>The maximal count an element as reached so far. </p> <p class="reference">Referenced by <a class="el" href="classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f">RoutingEvent::process()</a>.</p> </div> </div> <a id="a7411a9e20edba3f3eeceb237dec86ff3"></a> <h2 class="memtitle"><span class="permalink"><a href="#a7411a9e20edba3f3eeceb237dec86ff3">◆ </a></span>getElements()</h2> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">const std::vector< Element > & getElements </td> <td>(</td> <td class="paramname"></td><td>)</td> <td> const</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">inline</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>The complete table elements. </p> <p class="reference">Referenced by <a class="el" href="classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f">RoutingEvent::process()</a>.</p> </div> </div> <a id="ad684b7c05480897bdbd86a5fb8363c72"></a> <h2 class="memtitle"><span class="permalink"><a href="#ad684b7c05480897bdbd86a5fb8363c72">◆ </a></span>update()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void update </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>id</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Update the loop, telling that element <code>id</code> has appreared one more time. </p> <p class="reference">Referenced by <a class="el" href="classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f">RoutingEvent::process()</a>.</p> </div> </div> <a id="a9b6582ce996327c65bf532396ca11b61"></a> <h2 class="memtitle"><span class="permalink"><a href="#a9b6582ce996327c65bf532396ca11b61">◆ </a></span>erase()</h2> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void erase </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>id</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Remove the entry related to element <code>id</code> in the table. The state of the table is fully recomputed after the removal (looping flag & maximum count).</p> <p>This method is used when a loop has been encountered, presumably on element <code>id</code>, and we want to continue. To avoid the loop detector yelling at each check, the associated <a class="el" href="classKite_1_1TrackElement.html" title="Abstract Class for all Elements inserted inside a Track. ">TrackElement</a> should be invalidated and it's reference removed from the table. </p> <p class="reference">Referenced by <a class="el" href="classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f">RoutingEvent::process()</a>.</p> </div> </div> <hr/>The documentation for this class was generated from the following files:<ul> <li><a class="el" href="RoutingEventLoop_8h_source.html">RoutingEventLoop.h</a></li> <li>RoutingEventLoop.cpp</li> <li>RoutingEventLoop.dox</li> </ul> </div><!-- contents --> <br> <hr> <table class="footer1"> <tr> <td class="LFooter"><small>Generated by doxygen 1.8.14 on Thu Nov 12 2020</small></td> <td class="RFooter"><a href='#pagetop'><small>Return to top of page</small></a></td> </tr> </table> <table class="footer2"> <tr> <td class="LFooter">Kite - Detailed Router</td> <td class="RFooter"><small>Copyright © 2008-2020 Sorbonne Universite. All rights reserved</small></td> </tr> </table> </body> </html>