coriolis/kite/doc/html/classKite_1_1RoutingEventLo...

259 lines
13 KiB
HTML

<!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&amp;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> &#124;
<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">&#160;</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">&#160;</td></tr>
<tr class="memitem:a78155a2b0119ac92d377fa404e348a98"><td class="memItemLeft" align="right" valign="top">bool&#160;</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">&#160;</td></tr>
<tr class="memitem:a5744f7f01d26947fb0765bc5d1e2c3bd"><td class="memItemLeft" align="right" valign="top">int&#160;</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">&#160;</td></tr>
<tr class="memitem:a7411a9e20edba3f3eeceb237dec86ff3"><td class="memItemLeft" align="right" valign="top">const std::vector&lt; Element &gt; &amp;&#160;</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">&#160;</td></tr>
<tr class="memitem:ad684b7c05480897bdbd86a5fb8363c72"><td class="memItemLeft" align="right" valign="top">void&#160;</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">&#160;</td></tr>
<tr class="memitem:a9b6582ce996327c65bf532396ca11b61"><td class="memItemLeft" align="right" valign="top">void&#160;</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">&#160;</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&lt;&gt;</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 &amp; Destructor Documentation</h2>
<a id="aa33efa06ccc2175e35eff7ac6dadffb6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa33efa06ccc2175e35eff7ac6dadffb6">&#9670;&nbsp;</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&#160;</td>
<td class="paramname"><em>depth</em> = <code>10</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>countLimit</em> = <code>20</code>&#160;</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">&#9670;&nbsp;</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">&#9670;&nbsp;</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">&#9670;&nbsp;</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&lt; Element &gt; &amp; 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">&#9670;&nbsp;</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&#160;</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">&#9670;&nbsp;</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&#160;</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 &amp; 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 &#169; 2008-2020 Sorbonne Universite. All rights reserved</small></td>
</tr>
</table>
</body>
</html>