Files
ortools-clone/docs/cpp_graph/graph_8h.html
Laurent Perron 4536755f35 polish cpp doc
2019-07-12 13:13:30 -07:00

310 lines
38 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>OR-Tools</title>
<meta http-equiv="Content-Type" content="text/html;"/>
<meta charset="utf-8"/>
<!--<link rel='stylesheet' type='text/css' href="https://fonts.googleapis.com/css?family=Ubuntu:400,700,400italic"/>-->
<link rel="stylesheet" type="text/css" href="ortools.css" title="default" media="screen,print" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
</head>
<body>
<div id="banner-container">
<div id="banner">
<span id="sfml">OR-Tools 7.2</span>
</div>
</div>
<link rel="icon" href="https://developers.google.com/optimization/images/orLogo.png">
<div id="content">
<!-- Generated by Doxygen 1.8.15 -->
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_a7cc1eeded8f693d0da6c729bc88c45a.html">ortools</a></li><li class="navelem"><a class="el" href="dir_725f3a5915051842f84e3ea508be2a62.html">graph</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#namespaces">Namespaces</a> &#124;
<a href="#define-members">Macros</a> &#124;
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">graph.h File Reference</div> </div>
</div><!--header-->
<div class="contents">
<div class="textblock"><code>#include &lt;algorithm&gt;</code><br />
<code>#include &lt;cstddef&gt;</code><br />
<code>#include &lt;cstdlib&gt;</code><br />
<code>#include &lt;limits&gt;</code><br />
<code>#include &lt;new&gt;</code><br />
<code>#include &lt;vector&gt;</code><br />
<code>#include &quot;ortools/base/integral_types.h&quot;</code><br />
<code>#include &quot;ortools/base/logging.h&quot;</code><br />
<code>#include &quot;ortools/base/macros.h&quot;</code><br />
<code>#include &quot;<a class="el" href="iterators_8h_source.html">ortools/graph/iterators.h</a>&quot;</code><br />
</div><div class="textblock"><div class="dynheader">
Include dependency graph for graph.h:</div>
<div class="dyncontent">
<div class="center"><img src="graph_8h__incl.png" border="0" usemap="#graph_8h" alt=""/></div>
<map name="graph_8h" id="graph_8h">
<area shape="rect" title=" " alt="" coords="378,5,443,32"/>
<area shape="rect" title=" " alt="" coords="5,87,80,114"/>
<area shape="rect" title=" " alt="" coords="105,87,170,114"/>
<area shape="rect" title=" " alt="" coords="194,87,254,114"/>
<area shape="rect" title=" " alt="" coords="279,87,332,114"/>
<area shape="rect" title=" " alt="" coords="357,87,403,114"/>
<area shape="rect" title=" " alt="" coords="684,169,743,196"/>
<area shape="rect" title=" " alt="" coords="479,80,617,121"/>
<area shape="rect" title=" " alt="" coords="641,87,791,114"/>
<area shape="rect" title=" " alt="" coords="815,87,966,114"/>
<area shape="rect" href="iterators_8h.html" title=" " alt="" coords="990,87,1149,114"/>
<area shape="rect" title=" " alt="" coords="1038,169,1101,196"/>
</map>
</div>
</div><div class="textblock"><div class="dynheader">
This graph shows which files directly or indirectly include this file:</div>
<div class="dyncontent">
<div class="center"><img src="graph_8h__dep__incl.png" border="0" usemap="#graph_8hdep" alt=""/></div>
<map name="graph_8hdep" id="graph_8hdep">
<area shape="rect" title=" " alt="" coords="241,5,306,32"/>
<area shape="rect" href="christofides_8h.html" title=" " alt="" coords="37,80,137,107"/>
<area shape="rect" href="io_8h.html" title=" " alt="" coords="161,80,204,107"/>
<area shape="rect" href="max__flow_8h.html" title=" " alt="" coords="229,80,318,107"/>
<area shape="rect" href="min__cost__flow_8h.html" title=" " alt="" coords="343,80,460,107"/>
<area shape="rect" href="util_8h.html" title=" " alt="" coords="484,80,535,107"/>
<area shape="rect" href="one__tree__lower__bound_8h.html" title=" " alt="" coords="5,155,168,181"/>
</map>
</div>
</div>
<p><a href="graph_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1SVector.html">util::SVector&lt; T &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Forward declaration. <a href="classutil_1_1SVector.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1BaseGraph.html">util::BaseGraph&lt; NodeIndexType, ArcIndexType, HasReverseArcs &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Base class of all Graphs implemented here. <a href="classutil_1_1BaseGraph.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ListGraph.html">util::ListGraph&lt; NodeIndexType, ArcIndexType &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Basic graph implementation without reverse arc. <a href="classutil_1_1ListGraph.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1StaticGraph.html">util::StaticGraph&lt; NodeIndexType, ArcIndexType &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Most efficient implementation of a graph without reverse arcs: <a href="classutil_1_1StaticGraph.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcListGraph.html">util::ReverseArcListGraph&lt; NodeIndexType, ArcIndexType &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Extends the <a class="el" href="classutil_1_1ListGraph.html" title="Basic graph implementation without reverse arc.">ListGraph</a> by also storing the reverse arcs. <a href="classutil_1_1ReverseArcListGraph.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcStaticGraph.html">util::ReverseArcStaticGraph&lt; NodeIndexType, ArcIndexType &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classutil_1_1StaticGraph.html" title="Most efficient implementation of a graph without reverse arcs:">StaticGraph</a> with reverse arc. <a href="classutil_1_1ReverseArcStaticGraph.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcMixedGraph.html">util::ReverseArcMixedGraph&lt; NodeIndexType, ArcIndexType &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">This graph is a mix between the <a class="el" href="classutil_1_1ReverseArcListGraph.html" title="Extends the ListGraph by also storing the reverse arcs.">ReverseArcListGraph</a> and the <a class="el" href="classutil_1_1ReverseArcStaticGraph.html" title="StaticGraph with reverse arc.">ReverseArcStaticGraph</a>. <a href="classutil_1_1ReverseArcMixedGraph.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1SVector.html">util::SVector&lt; T &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Forward declaration. <a href="classutil_1_1SVector.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ListGraph_1_1OutgoingArcIterator.html">util::ListGraph&lt; NodeIndexType, ArcIndexType &gt;::OutgoingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ListGraph_1_1OutgoingHeadIterator.html">util::ListGraph&lt; NodeIndexType, ArcIndexType &gt;::OutgoingHeadIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1StaticGraph_1_1OutgoingArcIterator.html">util::StaticGraph&lt; NodeIndexType, ArcIndexType &gt;::OutgoingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcListGraph_1_1OutgoingArcIterator.html">util::ReverseArcListGraph&lt; NodeIndexType, ArcIndexType &gt;::OutgoingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcListGraph_1_1OppositeIncomingArcIterator.html">util::ReverseArcListGraph&lt; NodeIndexType, ArcIndexType &gt;::OppositeIncomingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcListGraph_1_1IncomingArcIterator.html">util::ReverseArcListGraph&lt; NodeIndexType, ArcIndexType &gt;::IncomingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcListGraph_1_1OutgoingOrOppositeIncomingArcIterator.html">util::ReverseArcListGraph&lt; NodeIndexType, ArcIndexType &gt;::OutgoingOrOppositeIncomingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcListGraph_1_1OutgoingHeadIterator.html">util::ReverseArcListGraph&lt; NodeIndexType, ArcIndexType &gt;::OutgoingHeadIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcStaticGraph_1_1OutgoingArcIterator.html">util::ReverseArcStaticGraph&lt; NodeIndexType, ArcIndexType &gt;::OutgoingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcStaticGraph_1_1OppositeIncomingArcIterator.html">util::ReverseArcStaticGraph&lt; NodeIndexType, ArcIndexType &gt;::OppositeIncomingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcStaticGraph_1_1IncomingArcIterator.html">util::ReverseArcStaticGraph&lt; NodeIndexType, ArcIndexType &gt;::IncomingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcStaticGraph_1_1OutgoingOrOppositeIncomingArcIterator.html">util::ReverseArcStaticGraph&lt; NodeIndexType, ArcIndexType &gt;::OutgoingOrOppositeIncomingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcMixedGraph_1_1OutgoingArcIterator.html">util::ReverseArcMixedGraph&lt; NodeIndexType, ArcIndexType &gt;::OutgoingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcMixedGraph_1_1OppositeIncomingArcIterator.html">util::ReverseArcMixedGraph&lt; NodeIndexType, ArcIndexType &gt;::OppositeIncomingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcMixedGraph_1_1IncomingArcIterator.html">util::ReverseArcMixedGraph&lt; NodeIndexType, ArcIndexType &gt;::IncomingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1ReverseArcMixedGraph_1_1OutgoingOrOppositeIncomingArcIterator.html">util::ReverseArcMixedGraph&lt; NodeIndexType, ArcIndexType &gt;::OutgoingOrOppositeIncomingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1CompleteGraph.html">util::CompleteGraph&lt; NodeIndexType, ArcIndexType &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classutil_1_1CompleteGraph.html" title="CompleteGraph implementation ---------------------------------------------— Nodes and arcs are implic...">CompleteGraph</a> implementation ---------------------------------------------&mdash; Nodes and arcs are implicit and not stored. <a href="classutil_1_1CompleteGraph.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1CompleteBipartiteGraph.html">util::CompleteBipartiteGraph&lt; NodeIndexType, ArcIndexType &gt;</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classutil_1_1CompleteBipartiteGraph.html" title="CompleteBipartiteGraph implementation ------------------------------------— Nodes and arcs are implic...">CompleteBipartiteGraph</a> implementation ------------------------------------&mdash; Nodes and arcs are implicit and not stored. <a href="classutil_1_1CompleteBipartiteGraph.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">class &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classutil_1_1CompleteBipartiteGraph_1_1OutgoingArcIterator.html">util::CompleteBipartiteGraph&lt; NodeIndexType, ArcIndexType &gt;::OutgoingArcIterator</a></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="namespaces"></a>
Namespaces</h2></td></tr>
<tr class="memitem:namespaceutil"><td class="memItemLeft" align="right" valign="top"> &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html">util</a></td></tr>
<tr class="memdesc:namespaceutil"><td class="mdescLeft">&#160;</td><td class="mdescRight">Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a48a8a7aa004fc40d0d1d0ba63311cece"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="graph_8h.html#a48a8a7aa004fc40d0d1d0ba63311cece">DEFINE_RANGE_BASED_ARC_ITERATION</a>(c, t, e)</td></tr>
<tr class="memdesc:a48a8a7aa004fc40d0d1d0ba63311cece"><td class="mdescLeft">&#160;</td><td class="mdescRight">Macros to wrap old style iteration into the new range-based for loop style. <a href="#a48a8a7aa004fc40d0d1d0ba63311cece">More...</a><br /></td></tr>
<tr class="separator:a48a8a7aa004fc40d0d1d0ba63311cece"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa560f5e55268f818d5e5f43ed31e19a0"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="graph_8h.html#aa560f5e55268f818d5e5f43ed31e19a0">DEFINE_STL_ITERATOR_FUNCTIONS</a>(iterator_class_name)</td></tr>
<tr class="memdesc:aa560f5e55268f818d5e5f43ed31e19a0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adapt our old iteration style to support range-based for loops. <a href="#aa560f5e55268f818d5e5f43ed31e19a0">More...</a><br /></td></tr>
<tr class="separator:aa560f5e55268f818d5e5f43ed31e19a0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ae76339cb2dcd3bc05ad762146f91fdda"><td class="memItemLeft" align="right" valign="top">typedef ListGraph&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#ae76339cb2dcd3bc05ad762146f91fdda">util::Graph</a></td></tr>
<tr class="memdesc:ae76339cb2dcd3bc05ad762146f91fdda"><td class="mdescLeft">&#160;</td><td class="mdescRight">Defining the simplest Graph interface as Graph for convenience. <a href="namespaceutil.html#ae76339cb2dcd3bc05ad762146f91fdda">More...</a><br /></td></tr>
<tr class="separator:ae76339cb2dcd3bc05ad762146f91fdda"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:a9470623ca7db3c4a62ce3b326c6b07d8"><td class="memTemplParams" colspan="2">template&lt;class IntVector , class Array , class ElementType &gt; </td></tr>
<tr class="memitem:a9470623ca7db3c4a62ce3b326c6b07d8"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a9470623ca7db3c4a62ce3b326c6b07d8">util::PermuteWithExplicitElementType</a> (const IntVector &amp;permutation, Array *array_to_permute, ElementType unused)</td></tr>
<tr class="memdesc:a9470623ca7db3c4a62ce3b326c6b07d8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Permutes the elements of array_to_permute: element #i will be moved to position permutation[i]. <a href="namespaceutil.html#a9470623ca7db3c4a62ce3b326c6b07d8">More...</a><br /></td></tr>
<tr class="separator:a9470623ca7db3c4a62ce3b326c6b07d8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8c227a057c1ce9d46b1185abf77ad91e"><td class="memTemplParams" colspan="2">template&lt;class IntVector , class Array &gt; </td></tr>
<tr class="memitem:a8c227a057c1ce9d46b1185abf77ad91e"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a8c227a057c1ce9d46b1185abf77ad91e">util::Permute</a> (const IntVector &amp;permutation, Array *array_to_permute)</td></tr>
<tr class="separator:a8c227a057c1ce9d46b1185abf77ad91e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac497881c4166bc694adc4bee62746118"><td class="memTemplParams" colspan="2">template&lt;class IntVector &gt; </td></tr>
<tr class="memitem:ac497881c4166bc694adc4bee62746118"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="namespaceutil.html#ac497881c4166bc694adc4bee62746118">util::Permute</a> (const IntVector &amp;permutation, std::vector&lt; bool &gt; *array_to_permute)</td></tr>
<tr class="memdesc:ac497881c4166bc694adc4bee62746118"><td class="mdescLeft">&#160;</td><td class="mdescRight">We need a specialization for std::vector&lt;bool&gt;, because the default code uses (*array_to_permute)[0] as ElementType, which isn't 'bool' in that case. <a href="namespaceutil.html#ac497881c4166bc694adc4bee62746118">More...</a><br /></td></tr>
<tr class="separator:ac497881c4166bc694adc4bee62746118"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a37be0131ae922e30a286797a0bef0c96"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a37be0131ae922e30a286797a0bef0c96">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ListGraph, Outgoing, Base::kNilArc)</td></tr>
<tr class="memdesc:a37be0131ae922e30a286797a0bef0c96"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classutil_1_1ListGraph.html" title="Basic graph implementation without reverse arc.">ListGraph</a> implementation -------------------------------------------------&mdash;. <a href="namespaceutil.html#a37be0131ae922e30a286797a0bef0c96">More...</a><br /></td></tr>
<tr class="separator:a37be0131ae922e30a286797a0bef0c96"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af3c40fc068f645d9dcd15c332e44fc25"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#af3c40fc068f645d9dcd15c332e44fc25">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (StaticGraph, Outgoing, DirectArcLimit(node))</td></tr>
<tr class="memdesc:af3c40fc068f645d9dcd15c332e44fc25"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classutil_1_1StaticGraph.html" title="Most efficient implementation of a graph without reverse arcs:">StaticGraph</a> implementation -----------------------------------------------&mdash;. <a href="namespaceutil.html#af3c40fc068f645d9dcd15c332e44fc25">More...</a><br /></td></tr>
<tr class="separator:af3c40fc068f645d9dcd15c332e44fc25"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3098e161a6aceeca482be78d2d221b3b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a3098e161a6aceeca482be78d2d221b3b">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ReverseArcListGraph, Outgoing, Base::kNilArc)</td></tr>
<tr class="memdesc:a3098e161a6aceeca482be78d2d221b3b"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classutil_1_1ReverseArcListGraph.html" title="Extends the ListGraph by also storing the reverse arcs.">ReverseArcListGraph</a> implementation ---------------------------------------&mdash;. <a href="namespaceutil.html#a3098e161a6aceeca482be78d2d221b3b">More...</a><br /></td></tr>
<tr class="separator:a3098e161a6aceeca482be78d2d221b3b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4d0ae05975a2063f2edbeb749f690fc7"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a4d0ae05975a2063f2edbeb749f690fc7">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ReverseArcListGraph, Incoming, Base::kNilArc)</td></tr>
<tr class="separator:a4d0ae05975a2063f2edbeb749f690fc7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a22b5dcc01043ab8da01ebab71ec3ad31"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a22b5dcc01043ab8da01ebab71ec3ad31">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ReverseArcListGraph, OutgoingOrOppositeIncoming, Base::kNilArc)</td></tr>
<tr class="separator:a22b5dcc01043ab8da01ebab71ec3ad31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a863ccdb51afb5ef92fe6c94188a5f7e0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a863ccdb51afb5ef92fe6c94188a5f7e0">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ReverseArcListGraph, OppositeIncoming, Base::kNilArc)</td></tr>
<tr class="separator:a863ccdb51afb5ef92fe6c94188a5f7e0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2cc2a1037195d237820edc97d35404be"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a2cc2a1037195d237820edc97d35404be">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ReverseArcStaticGraph, Outgoing, DirectArcLimit(node))</td></tr>
<tr class="memdesc:a2cc2a1037195d237820edc97d35404be"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classutil_1_1ReverseArcStaticGraph.html" title="StaticGraph with reverse arc.">ReverseArcStaticGraph</a> implementation -------------------------------------&mdash;. <a href="namespaceutil.html#a2cc2a1037195d237820edc97d35404be">More...</a><br /></td></tr>
<tr class="separator:a2cc2a1037195d237820edc97d35404be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a51d676cd5d9354bfe1f80d09c44f39"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a2a51d676cd5d9354bfe1f80d09c44f39">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ReverseArcStaticGraph, Incoming, ReverseArcLimit(node))</td></tr>
<tr class="separator:a2a51d676cd5d9354bfe1f80d09c44f39"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1db1a919e67261878ff8abda53e664c7"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a1db1a919e67261878ff8abda53e664c7">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ReverseArcStaticGraph, OutgoingOrOppositeIncoming, DirectArcLimit(node))</td></tr>
<tr class="separator:a1db1a919e67261878ff8abda53e664c7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1728675285eb75f9f18d6ed7c134d0b6"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a1728675285eb75f9f18d6ed7c134d0b6">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ReverseArcStaticGraph, OppositeIncoming, ReverseArcLimit(node))</td></tr>
<tr class="separator:a1728675285eb75f9f18d6ed7c134d0b6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab3308688d13e59e2351bef038ce1fdb0"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#ab3308688d13e59e2351bef038ce1fdb0">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ReverseArcMixedGraph, Outgoing, DirectArcLimit(node))</td></tr>
<tr class="memdesc:ab3308688d13e59e2351bef038ce1fdb0"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="classutil_1_1ReverseArcMixedGraph.html" title="This graph is a mix between the ReverseArcListGraph and the ReverseArcStaticGraph.">ReverseArcMixedGraph</a> implementation --------------------------------------&mdash;. <a href="namespaceutil.html#ab3308688d13e59e2351bef038ce1fdb0">More...</a><br /></td></tr>
<tr class="separator:ab3308688d13e59e2351bef038ce1fdb0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3c022b68f68916770fe09996df2f35a3"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a3c022b68f68916770fe09996df2f35a3">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ReverseArcMixedGraph, Incoming, Base::kNilArc)</td></tr>
<tr class="separator:a3c022b68f68916770fe09996df2f35a3"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97910ddfce7560b406aa3f4939434eb8"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a97910ddfce7560b406aa3f4939434eb8">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ReverseArcMixedGraph, OutgoingOrOppositeIncoming, DirectArcLimit(node))</td></tr>
<tr class="separator:a97910ddfce7560b406aa3f4939434eb8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6ce1a67d16c75b202f56301321a457c6"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceutil.html#a6ce1a67d16c75b202f56301321a457c6">util::DEFINE_RANGE_BASED_ARC_ITERATION</a> (ReverseArcMixedGraph, OppositeIncoming, Base::kNilArc)</td></tr>
<tr class="separator:a6ce1a67d16c75b202f56301321a457c6"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a id="a48a8a7aa004fc40d0d1d0ba63311cece"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a48a8a7aa004fc40d0d1d0ba63311cece">&#9670;&nbsp;</a></span>DEFINE_RANGE_BASED_ARC_ITERATION</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DEFINE_RANGE_BASED_ARC_ITERATION</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">c, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">t, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">&#160;</td>
<td class="paramname">e&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> NodeIndexType, <span class="keyword">typename</span> ArcIndexType&gt; \</div><div class="line"> BeginEndWrapper&lt;typename c&lt;NodeIndexType, ArcIndexType&gt;::t##ArcIterator&gt; \</div><div class="line"> c&lt;NodeIndexType, ArcIndexType&gt;::t##Arcs(NodeIndexType node)<span class="keyword"> const </span>{ \</div><div class="line"> return BeginEndWrapper&lt;t##ArcIterator&gt;(t##ArcIterator(*<span class="keyword">this</span>, node), \</div><div class="line"> t##ArcIterator(*<span class="keyword">this</span>, node, e)); \</div><div class="line"> } \</div><div class="line"> template &lt;typename NodeIndexType, typename ArcIndexType&gt; \</div><div class="line"> BeginEndWrapper&lt;typename c&lt;NodeIndexType, ArcIndexType&gt;::t##ArcIterator&gt; \</div><div class="line"> c&lt;NodeIndexType, ArcIndexType&gt;::t##ArcsStartingFrom( \</div><div class="line"> NodeIndexType node, ArcIndexType from)<span class="keyword"> const </span>{ \</div><div class="line"> return BeginEndWrapper&lt;t##ArcIterator&gt;(t##ArcIterator(*<span class="keyword">this</span>, node, from), \</div><div class="line"> t##ArcIterator(*<span class="keyword">this</span>, node, e)); \</div><div class="line"> }</div></div><!-- fragment -->
<p>Macros to wrap old style iteration into the new range-based for loop style. </p>
<p>The parameters are:</p><ul>
<li>c: the class name.</li>
<li>t: the iteration type (Outgoing, Incoming, OutgoingOrOppositeIncoming or OppositeIncoming).</li>
<li>e: the "end" ArcIndexType. </li>
</ul>
<p class="definition">Definition at line <a class="el" href="graph_8h_source.html#l01060">1060</a> of file <a class="el" href="graph_8h_source.html">graph.h</a>.</p>
</div>
</div>
<a id="aa560f5e55268f818d5e5f43ed31e19a0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa560f5e55268f818d5e5f43ed31e19a0">&#9670;&nbsp;</a></span>DEFINE_STL_ITERATOR_FUNCTIONS</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DEFINE_STL_ITERATOR_FUNCTIONS</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">iterator_class_name</td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<b>Value:</b><div class="fragment"><div class="line"><span class="keyword">using</span> iterator_category = std::input_iterator_tag; \</div><div class="line"> using difference_type = ptrdiff_t; \</div><div class="line"> using pointer = <span class="keyword">const</span> ArcIndexType*; \</div><div class="line"> using reference = <span class="keyword">const</span> ArcIndexType&amp;; \</div><div class="line"> using <a class="code" href="iterators_8h.html#ae7f303a443fbf651b13f8289d05ef498">value_type</a> = ArcIndexType; \</div><div class="line"> bool operator!=(<span class="keyword">const</span> iterator_class_name&amp; other)<span class="keyword"> const </span>{ \</div><div class="line"> return this-&gt;index_ != other.index_; \</div><div class="line"> } \</div><div class="line"> bool operator==(<span class="keyword">const</span> iterator_class_name&amp; other)<span class="keyword"> const </span>{ \</div><div class="line"> return this-&gt;index_ == other.index_; \</div><div class="line"> } \</div><div class="line"> ArcIndexType operator*()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> this-&gt;Index(); } \</div><div class="line"> void operator++() { this-&gt;<a class="code" href="one__tree__lower__bound_8h.html#a3947d19ac087ef2cd68c2409920339c4">Next</a>(); }</div><div class="ttc" id="one__tree__lower__bound_8h_html_a3947d19ac087ef2cd68c2409920339c4"><div class="ttname"><a href="one__tree__lower__bound_8h.html#a3947d19ac087ef2cd68c2409920339c4">Next</a></div><div class="ttdeci">bool Next()</div><div class="ttdef"><b>Definition:</b> <a href="one__tree__lower__bound_8h_source.html#l00163">one_tree_lower_bound.h:163</a></div></div>
<div class="ttc" id="iterators_8h_html_ae7f303a443fbf651b13f8289d05ef498"><div class="ttname"><a href="iterators_8h.html#ae7f303a443fbf651b13f8289d05ef498">value_type</a></div><div class="ttdeci">typename std::iterator_traits&lt; Iterator &gt;::value_type value_type</div><div class="ttdef"><b>Definition:</b> <a href="iterators_8h_source.html#l00041">iterators.h:41</a></div></div>
</div><!-- fragment -->
<p>Adapt our old iteration style to support range-based for loops. </p>
<p>Add typedefs required by std::iterator_traits. </p>
<p class="definition">Definition at line <a class="el" href="graph_8h_source.html#l01077">1077</a> of file <a class="el" href="graph_8h_source.html">graph.h</a>.</p>
</div>
</div>
</div><!-- contents -->
</div>
<div id="footer-container">
<div id="footer">
</div>
</div>
</body>
</html>