2018-06-06 11:42:26 -05:00
<!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)" >
2018-10-18 11:10:01 -05:00
<!-- 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 >
2018-06-06 11:42:26 -05:00
< 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 >
2018-10-18 11:10:01 -05:00
< 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 >
2018-06-06 11:42:26 -05:00
< 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 >
2018-10-18 11:10:01 -05:00
< 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 >
2018-06-06 11:42:26 -05:00
< 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 >
2018-10-18 11:10:01 -05:00
< a id = "aa33efa06ccc2175e35eff7ac6dadffb6" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#aa33efa06ccc2175e35eff7ac6dadffb6" > ◆ < / a > < / span > RoutingEventLoop()< / h2 >
2018-06-06 11:42:26 -05:00
< 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 >
2018-10-18 11:10:01 -05:00
< a id = "a78155a2b0119ac92d377fa404e348a98" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a78155a2b0119ac92d377fa404e348a98" > ◆ < / a > < / span > isLooping()< / h2 >
2018-06-06 11:42:26 -05:00
< 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 >
2018-10-18 11:10:01 -05:00
< p class = "reference" > Referenced by < a class = "el" href = "classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f" > RoutingEvent::process()< / a > .< / p >
2018-06-06 11:42:26 -05:00
< / div >
< / div >
2018-10-18 11:10:01 -05:00
< a id = "a5744f7f01d26947fb0765bc5d1e2c3bd" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a5744f7f01d26947fb0765bc5d1e2c3bd" > ◆ < / a > < / span > getMaxCount()< / h2 >
2018-06-06 11:42:26 -05:00
< 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 >
2018-10-18 11:10:01 -05:00
< p class = "reference" > Referenced by < a class = "el" href = "classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f" > RoutingEvent::process()< / a > .< / p >
2018-06-06 11:42:26 -05:00
< / div >
< / div >
2018-10-18 11:10:01 -05:00
< a id = "a7411a9e20edba3f3eeceb237dec86ff3" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a7411a9e20edba3f3eeceb237dec86ff3" > ◆ < / a > < / span > getElements()< / h2 >
2018-06-06 11:42:26 -05:00
< 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 >
2018-10-18 11:10:01 -05:00
< p class = "reference" > Referenced by < a class = "el" href = "classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f" > RoutingEvent::process()< / a > .< / p >
2018-06-06 11:42:26 -05:00
< / div >
< / div >
2018-10-18 11:10:01 -05:00
< a id = "ad684b7c05480897bdbd86a5fb8363c72" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#ad684b7c05480897bdbd86a5fb8363c72" > ◆ < / a > < / span > update()< / h2 >
2018-06-06 11:42:26 -05:00
< 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 >
2018-10-18 11:10:01 -05:00
< p class = "reference" > Referenced by < a class = "el" href = "classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f" > RoutingEvent::process()< / a > .< / p >
2018-06-06 11:42:26 -05:00
< / div >
< / div >
2018-10-18 11:10:01 -05:00
< a id = "a9b6582ce996327c65bf532396ca11b61" > < / a >
< h2 class = "memtitle" > < span class = "permalink" > < a href = "#a9b6582ce996327c65bf532396ca11b61" > ◆ < / a > < / span > erase()< / h2 >
2018-06-06 11:42:26 -05:00
< 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 >
2018-10-18 11:10:01 -05:00
< p class = "reference" > Referenced by < a class = "el" href = "classKite_1_1RoutingEvent.html#a6add4f520081c698421481bf8fe0ad1f" > RoutingEvent::process()< / a > .< / p >
2018-06-06 11:42:26 -05:00
< / 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 >
2020-02-03 10:44:15 -06:00
< td class = "LFooter" > < small > Generated by doxygen 1.8.14 on Mon Feb 3 2020< / small > < / td >
2018-06-06 11:42:26 -05:00
< 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 >