Files
entt/classentt_1_1basic__runtime__view.html
2020-05-12 00:28:32 +02:00

374 lines
22 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>EnTT: entt::basic_runtime_view Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">EnTT
&#160;<span id="projectnumber">3.4.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<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('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceentt.html">entt</a></li><li class="navelem"><a class="el" href="classentt_1_1basic__runtime__view.html">basic_runtime_view</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="classentt_1_1basic__runtime__view-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">entt::basic_runtime_view Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Runtime view.
<a href="classentt_1_1basic__runtime__view.html#details">More...</a></p>
<p><code>#include &lt;<a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a0a00b5d61cb1e8b35e6da3aaf566abef"><td class="memItemLeft" align="right" valign="top"><a id="a0a00b5d61cb1e8b35e6da3aaf566abef"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__runtime__view.html#a0a00b5d61cb1e8b35e6da3aaf566abef">entity_type</a> = Entity</td></tr>
<tr class="memdesc:a0a00b5d61cb1e8b35e6da3aaf566abef"><td class="mdescLeft">&#160;</td><td class="mdescRight">Underlying entity identifier. <br /></td></tr>
<tr class="separator:a0a00b5d61cb1e8b35e6da3aaf566abef"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a98647bb547cdb01bf248f44e6420b3fd"><td class="memItemLeft" align="right" valign="top"><a id="a98647bb547cdb01bf248f44e6420b3fd"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__runtime__view.html#a98647bb547cdb01bf248f44e6420b3fd">size_type</a> = std::size_t</td></tr>
<tr class="memdesc:a98647bb547cdb01bf248f44e6420b3fd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Unsigned integer type. <br /></td></tr>
<tr class="separator:a98647bb547cdb01bf248f44e6420b3fd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a916067ed3c2fb7f69319c48019687674"><td class="memItemLeft" align="right" valign="top"><a id="a916067ed3c2fb7f69319c48019687674"></a>
using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__runtime__view.html#a916067ed3c2fb7f69319c48019687674">iterator</a> = view_iterator</td></tr>
<tr class="memdesc:a916067ed3c2fb7f69319c48019687674"><td class="mdescLeft">&#160;</td><td class="mdescRight">Input iterator type. <br /></td></tr>
<tr class="separator:a916067ed3c2fb7f69319c48019687674"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><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:aa37b29dc04da6ce473790336c1a035c5"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__runtime__view.html#a98647bb547cdb01bf248f44e6420b3fd">size_type</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__runtime__view.html#aa37b29dc04da6ce473790336c1a035c5">size</a> () const</td></tr>
<tr class="memdesc:aa37b29dc04da6ce473790336c1a035c5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Estimates the number of entities that have the given components. <a href="classentt_1_1basic__runtime__view.html#aa37b29dc04da6ce473790336c1a035c5">More...</a><br /></td></tr>
<tr class="separator:aa37b29dc04da6ce473790336c1a035c5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aef43cde7ea755983eebc7cc11f47d71c"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__runtime__view.html#aef43cde7ea755983eebc7cc11f47d71c">empty</a> () const</td></tr>
<tr class="memdesc:aef43cde7ea755983eebc7cc11f47d71c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if the view is definitely empty. <a href="classentt_1_1basic__runtime__view.html#aef43cde7ea755983eebc7cc11f47d71c">More...</a><br /></td></tr>
<tr class="separator:aef43cde7ea755983eebc7cc11f47d71c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac9e08717d915274740310e9007ba14e1"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__runtime__view.html#a916067ed3c2fb7f69319c48019687674">iterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__runtime__view.html#ac9e08717d915274740310e9007ba14e1">begin</a> () const</td></tr>
<tr class="memdesc:ac9e08717d915274740310e9007ba14e1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator to the first entity that has the given components. <a href="classentt_1_1basic__runtime__view.html#ac9e08717d915274740310e9007ba14e1">More...</a><br /></td></tr>
<tr class="separator:ac9e08717d915274740310e9007ba14e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9ec70654af8f51d023c5b3dbf9fdecf"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classentt_1_1basic__runtime__view.html#a916067ed3c2fb7f69319c48019687674">iterator</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__runtime__view.html#ab9ec70654af8f51d023c5b3dbf9fdecf">end</a> () const</td></tr>
<tr class="memdesc:ab9ec70654af8f51d023c5b3dbf9fdecf"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns an iterator that is past the last entity that has the given components. <a href="classentt_1_1basic__runtime__view.html#ab9ec70654af8f51d023c5b3dbf9fdecf">More...</a><br /></td></tr>
<tr class="separator:ab9ec70654af8f51d023c5b3dbf9fdecf"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2db6b8b9d822d2dc682b22f975438234"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__runtime__view.html#a2db6b8b9d822d2dc682b22f975438234">contains</a> (const <a class="el" href="classentt_1_1basic__runtime__view.html#a0a00b5d61cb1e8b35e6da3aaf566abef">entity_type</a> entt) const</td></tr>
<tr class="memdesc:a2db6b8b9d822d2dc682b22f975438234"><td class="mdescLeft">&#160;</td><td class="mdescRight">Checks if a view contains an entity. <a href="classentt_1_1basic__runtime__view.html#a2db6b8b9d822d2dc682b22f975438234">More...</a><br /></td></tr>
<tr class="separator:a2db6b8b9d822d2dc682b22f975438234"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af3ad770b04a53c1862b23538a5b75bd1"><td class="memTemplParams" colspan="2">template&lt;typename Func &gt; </td></tr>
<tr class="memitem:af3ad770b04a53c1862b23538a5b75bd1"><td class="memTemplItemLeft" align="right" valign="top">void&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__runtime__view.html#af3ad770b04a53c1862b23538a5b75bd1">each</a> (Func func) const</td></tr>
<tr class="memdesc:af3ad770b04a53c1862b23538a5b75bd1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Iterates entities and applies the given function object to them. <a href="classentt_1_1basic__runtime__view.html#af3ad770b04a53c1862b23538a5b75bd1">More...</a><br /></td></tr>
<tr class="separator:af3ad770b04a53c1862b23538a5b75bd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:a60c928831c22b7dd2216dbc469f68f24"><td class="memItemLeft" align="right" valign="top"><a id="a60c928831c22b7dd2216dbc469f68f24"></a>
class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classentt_1_1basic__runtime__view.html#a60c928831c22b7dd2216dbc469f68f24">basic_registry&lt; Entity &gt;</a></td></tr>
<tr class="memdesc:a60c928831c22b7dd2216dbc469f68f24"><td class="mdescLeft">&#160;</td><td class="mdescRight">A registry is allowed to create views. <br /></td></tr>
<tr class="separator:a60c928831c22b7dd2216dbc469f68f24"><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>Runtime view. </p>
<p>Runtime views iterate over those entities that have at least all the given components in their bags. During initialization, a runtime view looks at the number of entities available for each component and picks up a reference to the smallest set of candidate entities in order to get a performance boost when iterate.<br />
Order of elements during iterations are highly dependent on the order of the underlying data structures. See <a class="el" href="classentt_1_1sparse__set.html" title="Basic sparse set implementation.">sparse_set</a> and its specializations for more details.</p>
<p><b>Important</b> </p>
<p>Iterators aren't invalidated if:</p>
<ul>
<li>New instances of the given components are created and assigned to entities.</li>
<li>The entity currently pointed is modified (as an example, if one of the given components is removed from the entity to which the iterator points).</li>
<li>The entity currently pointed is destroyed.</li>
</ul>
<p>In all the other cases, modifying the pools of the given components in any way invalidates all the iterators and using them results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Views share references to the underlying data structures of the registry that generated them. Therefore any change to the entities and to the components made by means of the registry are immediately reflected by the views, unless a pool was missing when the view was built (in this case, the view won't have a valid reference and won't be updated accordingly).</dd></dl>
<dl class="section warning"><dt>Warning</dt><dd>Lifetime of a view must not overcome that of the registry that generated it. In any other case, attempting to use a view results in undefined behavior.</dd></dl>
<dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Entity</td><td>A valid entity type (see <a class="el" href="structentt_1_1entt__traits.html" title="Entity traits.">entt_traits</a> for more details). </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="entity_2fwd_8hpp_source.html#l00021">21</a> of file <a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a>.</p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="ac9e08717d915274740310e9007ba14e1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac9e08717d915274740310e9007ba14e1">&#9670;&nbsp;</a></span>begin()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__runtime__view.html#a916067ed3c2fb7f69319c48019687674">iterator</a> entt::basic_runtime_view::begin </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>Returns an iterator to the first entity that has the given components. </p>
<p>The returned iterator points to the first entity that has the given components. If the view is empty, the returned iterator will be equal to <code><a class="el" href="classentt_1_1basic__runtime__view.html#ab9ec70654af8f51d023c5b3dbf9fdecf" title="Returns an iterator that is past the last entity that has the given components.">end()</a></code>.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the first entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00186">186</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
</div>
</div>
<a id="a2db6b8b9d822d2dc682b22f975438234"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2db6b8b9d822d2dc682b22f975438234">&#9670;&nbsp;</a></span>contains()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool entt::basic_runtime_view::contains </td>
<td>(</td>
<td class="paramtype">const <a class="el" href="classentt_1_1basic__runtime__view.html#a0a00b5d61cb1e8b35e6da3aaf566abef">entity_type</a>&#160;</td>
<td class="paramname"><em>entt</em></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>Checks if a view contains an entity. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">entt</td><td>A valid entity identifier. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>True if the view contains the given entity, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00226">226</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
</div>
</div>
<a id="af3ad770b04a53c1862b23538a5b75bd1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af3ad770b04a53c1862b23538a5b75bd1">&#9670;&nbsp;</a></span>each()</h2>
<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Func &gt; </div>
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void entt::basic_runtime_view::each </td>
<td>(</td>
<td class="paramtype">Func&#160;</td>
<td class="paramname"><em>func</em></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>Iterates entities and applies the given function object to them. </p>
<p>The function object is invoked for each entity. It is provided only with the entity itself. To get the components, users can use the registry with which the view was built.<br />
The signature of the function should be equivalent to the following:</p>
<div class="fragment"><div class="line">void(<span class="keyword">const</span> <a class="code" href="classentt_1_1basic__runtime__view.html#a0a00b5d61cb1e8b35e6da3aaf566abef">entity_type</a>);</div>
</div><!-- fragment --><dl class="tparams"><dt>Template Parameters</dt><dd>
<table class="tparams">
<tr><td class="paramname">Func</td><td>Type of the function object to invoke. </td></tr>
</table>
</dd>
</dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">func</td><td>A valid function object. </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00248">248</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
</div>
</div>
<a id="aef43cde7ea755983eebc7cc11f47d71c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aef43cde7ea755983eebc7cc11f47d71c">&#9670;&nbsp;</a></span>empty()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool entt::basic_runtime_view::empty </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>Checks if the view is definitely empty. </p>
<dl class="section return"><dt>Returns</dt><dd>True if the view is definitely empty, false otherwise. </dd></dl>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00168">168</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
</div>
</div>
<a id="ab9ec70654af8f51d023c5b3dbf9fdecf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab9ec70654af8f51d023c5b3dbf9fdecf">&#9670;&nbsp;</a></span>end()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__runtime__view.html#a916067ed3c2fb7f69319c48019687674">iterator</a> entt::basic_runtime_view::end </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>Returns an iterator that is past the last entity that has the given components. </p>
<p>The returned iterator points to the entity following the last entity that has the given components. Attempting to dereference the returned iterator results in undefined behavior.</p>
<dl class="section note"><dt>Note</dt><dd>Input iterators stay true to the order imposed to the underlying data structures.</dd></dl>
<dl class="section return"><dt>Returns</dt><dd>An iterator to the entity following the last entity that has the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00211">211</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
</div>
</div>
<a id="aa37b29dc04da6ce473790336c1a035c5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa37b29dc04da6ce473790336c1a035c5">&#9670;&nbsp;</a></span>size()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classentt_1_1basic__runtime__view.html#a98647bb547cdb01bf248f44e6420b3fd">size_type</a> entt::basic_runtime_view::size </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>Estimates the number of entities that have the given components. </p>
<dl class="section return"><dt>Returns</dt><dd>Estimated number of entities that have the given components. </dd></dl>
<p class="definition">Definition at line <a class="el" href="runtime__view_8hpp_source.html#l00160">160</a> of file <a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a>.</p>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>src/entt/entity/<a class="el" href="entity_2fwd_8hpp_source.html">fwd.hpp</a></li>
<li>src/entt/entity/<a class="el" href="runtime__view_8hpp_source.html">runtime_view.hpp</a></li>
</ul>
</div><!-- contents -->
<div class="ttc" id="aclassentt_1_1basic__runtime__view_html_a0a00b5d61cb1e8b35e6da3aaf566abef"><div class="ttname"><a href="classentt_1_1basic__runtime__view.html#a0a00b5d61cb1e8b35e6da3aaf566abef">entt::basic_runtime_view::entity_type</a></div><div class="ttdeci">Entity entity_type</div><div class="ttdoc">Underlying entity identifier.</div><div class="ttdef"><b>Definition:</b> <a href="runtime__view_8hpp_source.html#l00150">runtime_view.hpp:150</a></div></div>
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.17
</small></address>
</body>
</html>