258 lines
13 KiB
HTML
258 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.13 -->
|
|
<script type="text/javascript" src="menudata.js"></script>
|
|
<script type="text/javascript" src="menu.js"></script>
|
|
<script type="text/javascript">
|
|
$(function() {
|
|
initMenu('',false,false,'search.php','Search');
|
|
});
|
|
</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.13 on Mon May 14 2018</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-2016 UPMC. All rights reserved</small></td>
|
|
</tr>
|
|
</table>
|
|
</body>
|
|
</html>
|