crashpad/doc/generated/doxygen/classcrashpad_1_1InitializationStateDcheck.html
2016-11-08 14:26:59 -05:00

219 lines
22 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>
<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.12"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Crashpad: crashpad::InitializationStateDcheck 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" />
<link href="crashpad_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">Crashpad
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.12 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
</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="namespacecrashpad.html">crashpad</a></li><li class="navelem"><a class="el" href="classcrashpad_1_1InitializationStateDcheck.html">InitializationStateDcheck</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classcrashpad_1_1InitializationStateDcheck-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">crashpad::InitializationStateDcheck Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Tracks whether data are initialized, triggering a DCHECK assertion on an invalid data access.
<a href="classcrashpad_1_1InitializationStateDcheck.html#details">More...</a></p>
<p><code>#include &quot;util/misc/initialization_state_dcheck.h&quot;</code></p>
<div class="dynheader">
Inheritance diagram for crashpad::InitializationStateDcheck:</div>
<div class="dyncontent">
<div class="center">
<img src="classcrashpad_1_1InitializationStateDcheck.png" usemap="#crashpad::InitializationStateDcheck_map" alt=""/>
<map id="crashpad::InitializationStateDcheck_map" name="crashpad::InitializationStateDcheck_map">
<area href="classcrashpad_1_1InitializationState.html" title="Tracks whether data are initialized. " alt="crashpad::InitializationState" shape="rect" coords="0,0,207,24"/>
</map>
</div></div>
<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:a95838f8f91565ebec9b02b35e32937e9"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88">State</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1InitializationStateDcheck.html#a95838f8f91565ebec9b02b35e32937e9">state</a> () const</td></tr>
<tr class="memdesc:a95838f8f91565ebec9b02b35e32937e9"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the objects state. <a href="#a95838f8f91565ebec9b02b35e32937e9">More...</a><br /></td></tr>
<tr class="separator:a95838f8f91565ebec9b02b35e32937e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7364973ff4a298d71c5d64d5ef2f5587"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88">State</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1InitializationStateDcheck.html#a7364973ff4a298d71c5d64d5ef2f5587">SetInitializing</a> ()</td></tr>
<tr class="memdesc:a7364973ff4a298d71c5d64d5ef2f5587"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marks an uninitialized object as initializing. <a href="#a7364973ff4a298d71c5d64d5ef2f5587">More...</a><br /></td></tr>
<tr class="separator:a7364973ff4a298d71c5d64d5ef2f5587"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab63bf042cd80b1a5b0aea1f96ef42b00"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88">State</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1InitializationStateDcheck.html#ab63bf042cd80b1a5b0aea1f96ef42b00">SetValid</a> ()</td></tr>
<tr class="memdesc:ab63bf042cd80b1a5b0aea1f96ef42b00"><td class="mdescLeft">&#160;</td><td class="mdescRight">Marks an initializing object as valid. <a href="#ab63bf042cd80b1a5b0aea1f96ef42b00">More...</a><br /></td></tr>
<tr class="separator:ab63bf042cd80b1a5b0aea1f96ef42b00"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classcrashpad_1_1InitializationState"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classcrashpad_1_1InitializationState')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classcrashpad_1_1InitializationState.html">crashpad::InitializationState</a></td></tr>
<tr class="memitem:ab4861661dbc0fa608adcde4fdd4c49dd inherit pub_methods_classcrashpad_1_1InitializationState"><td class="memItemLeft" align="right" valign="top"><a id="ab4861661dbc0fa608adcde4fdd4c49dd"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1InitializationState.html#ab4861661dbc0fa608adcde4fdd4c49dd">is_uninitialized</a> () const</td></tr>
<tr class="memdesc:ab4861661dbc0fa608adcde4fdd4c49dd inherit pub_methods_classcrashpad_1_1InitializationState"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns <code>true</code> if the objects state is <a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88ab86672ada53041ffcecfb379473bf353" title="The object has not yet been initialized. ">kStateUninitialized</a> and it is safe to begin initializing it. <br /></td></tr>
<tr class="separator:ab4861661dbc0fa608adcde4fdd4c49dd inherit pub_methods_classcrashpad_1_1InitializationState"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adb1ebe6fb06d227da363dad2174a8316 inherit pub_methods_classcrashpad_1_1InitializationState"><td class="memItemLeft" align="right" valign="top"><a id="adb1ebe6fb06d227da363dad2174a8316"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1InitializationState.html#adb1ebe6fb06d227da363dad2174a8316">set_invalid</a> ()</td></tr>
<tr class="memdesc:adb1ebe6fb06d227da363dad2174a8316 inherit pub_methods_classcrashpad_1_1InitializationState"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the objects state to <a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88afc9011e885f6b0a93151818010eefdfc" title="The object is being initialized. ">kStateInvalid</a>, marking initialization as being in process. <br /></td></tr>
<tr class="separator:adb1ebe6fb06d227da363dad2174a8316 inherit pub_methods_classcrashpad_1_1InitializationState"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae3c6f5b858094249317f087317ceb5a0 inherit pub_methods_classcrashpad_1_1InitializationState"><td class="memItemLeft" align="right" valign="top"><a id="ae3c6f5b858094249317f087317ceb5a0"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1InitializationState.html#ae3c6f5b858094249317f087317ceb5a0">set_valid</a> ()</td></tr>
<tr class="memdesc:ae3c6f5b858094249317f087317ceb5a0 inherit pub_methods_classcrashpad_1_1InitializationState"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the objects state to <a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88af8963ed6297bea7168911fe4ed87e163" title="The object has been initialized. ">kStateValid</a>, marking it initialized. <br /></td></tr>
<tr class="separator:ae3c6f5b858094249317f087317ceb5a0 inherit pub_methods_classcrashpad_1_1InitializationState"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad069757fa4ef312ac2307111bdf3cccb inherit pub_methods_classcrashpad_1_1InitializationState"><td class="memItemLeft" align="right" valign="top"><a id="ad069757fa4ef312ac2307111bdf3cccb"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1InitializationState.html#ad069757fa4ef312ac2307111bdf3cccb">is_valid</a> () const</td></tr>
<tr class="memdesc:ad069757fa4ef312ac2307111bdf3cccb inherit pub_methods_classcrashpad_1_1InitializationState"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns <code>true</code> if the the objects state is <a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88af8963ed6297bea7168911fe4ed87e163" title="The object has been initialized. ">kStateValid</a> and it has been fully initialized and may be used. <br /></td></tr>
<tr class="separator:ad069757fa4ef312ac2307111bdf3cccb inherit pub_methods_classcrashpad_1_1InitializationState"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="inherited"></a>
Additional Inherited Members</h2></td></tr>
<tr class="inherit_header pub_types_classcrashpad_1_1InitializationState"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classcrashpad_1_1InitializationState')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classcrashpad_1_1InitializationState.html">crashpad::InitializationState</a></td></tr>
<tr class="memitem:a044ea6d40e23683d6d1bb5ce30dafd88 inherit pub_types_classcrashpad_1_1InitializationState"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88">State</a> : uint8_t <tr class="memdesc:a044ea6d40e23683d6d1bb5ce30dafd88"><td class="mdescLeft">&#160;</td><td class="mdescRight">The objects state. <a href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88">More...</a><br /></td></tr>
</td></tr>
<tr class="separator:a044ea6d40e23683d6d1bb5ce30dafd88 inherit pub_types_classcrashpad_1_1InitializationState"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classcrashpad_1_1InitializationState"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classcrashpad_1_1InitializationState')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classcrashpad_1_1InitializationState.html">crashpad::InitializationState</a></td></tr>
<tr class="memitem:a60718e8a3f45af645752090dcc1e5508 inherit pro_methods_classcrashpad_1_1InitializationState"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88">State</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1InitializationState.html#a60718e8a3f45af645752090dcc1e5508">state</a> () const</td></tr>
<tr class="memdesc:a60718e8a3f45af645752090dcc1e5508 inherit pro_methods_classcrashpad_1_1InitializationState"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the objects state. <a href="classcrashpad_1_1InitializationState.html#a60718e8a3f45af645752090dcc1e5508">More...</a><br /></td></tr>
<tr class="separator:a60718e8a3f45af645752090dcc1e5508 inherit pro_methods_classcrashpad_1_1InitializationState"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a66966875ef1a543c9b25f9cad6ae44ea inherit pro_methods_classcrashpad_1_1InitializationState"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1InitializationState.html#a66966875ef1a543c9b25f9cad6ae44ea">set_state</a> (<a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88">State</a> <a class="el" href="classcrashpad_1_1InitializationState.html#a60718e8a3f45af645752090dcc1e5508">state</a>)</td></tr>
<tr class="memdesc:a66966875ef1a543c9b25f9cad6ae44ea inherit pro_methods_classcrashpad_1_1InitializationState"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the objects state. <a href="classcrashpad_1_1InitializationState.html#a66966875ef1a543c9b25f9cad6ae44ea">More...</a><br /></td></tr>
<tr class="separator:a66966875ef1a543c9b25f9cad6ae44ea inherit pro_methods_classcrashpad_1_1InitializationState"><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>Tracks whether data are initialized, triggering a DCHECK assertion on an invalid data access. </p>
<p>Put an <a class="el" href="classcrashpad_1_1InitializationStateDcheck.html" title="Tracks whether data are initialized, triggering a DCHECK assertion on an invalid data access...">InitializationStateDcheck</a> member into a class to help DCHECK that its in the right states at the right times. This is useful for classes with Initialize() methods. The chief advantage of <a class="el" href="classcrashpad_1_1InitializationStateDcheck.html" title="Tracks whether data are initialized, triggering a DCHECK assertion on an invalid data access...">InitializationStateDcheck</a> over having a member variable to track state is that when the only use of the variable is to DCHECK, it wastes space (in memory and executable code) in non-DCHECK builds unless the code is also peppered with ugly <code>#ifdef</code>s.</p>
<p>This implementation concentrates the ugly <code>#ifdef</code>s in one location.</p>
<p>Usage:</p>
<div class="fragment"><div class="line"><span class="keyword">class </span>Class {</div><div class="line"> <span class="keyword">public</span>:</div><div class="line"> Class() : initialized_() {}</div><div class="line"></div><div class="line"> <span class="keywordtype">void</span> Initialize() {</div><div class="line"> <a class="code" href="initialization__state__dcheck_8h.html#a9f550b300c9c7d5214aa612adfdba40e">INITIALIZATION_STATE_SET_INITIALIZING</a>(initialized_);</div><div class="line"> <span class="comment">// Perform initialization.</span></div><div class="line"> <a class="code" href="initialization__state__dcheck_8h.html#a079bd353351188e4819d9008b732bdce">INITIALIZATION_STATE_SET_VALID</a>(initialized_);</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keywordtype">void</span> DoSomething() {</div><div class="line"> <a class="code" href="initialization__state__dcheck_8h.html#ad0cdf9da2bf4bb9c2318e100136782ee">INITIALIZATION_STATE_DCHECK_VALID</a>(initialized_);</div><div class="line"> <span class="comment">// Do something.</span></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">private</span>:</div><div class="line"> InitializationStateDcheck initialized_;</div><div class="line">};</div></div><!-- fragment --> </div><h2 class="groupheader">Member Function Documentation</h2>
<a id="a7364973ff4a298d71c5d64d5ef2f5587"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7364973ff4a298d71c5d64d5ef2f5587">&sect;&nbsp;</a></span>SetInitializing()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88">State</a> crashpad::InitializationStateDcheck::SetInitializing </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Marks an uninitialized object as initializing. </p>
<p>If the object is in the <a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88ab86672ada53041ffcecfb379473bf353" title="The object has not yet been initialized. ">kStateUninitialized</a> state, changes its state to <a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88afc9011e885f6b0a93151818010eefdfc" title="The object is being initialized. ">kStateInvalid</a> (initializing) and returns the previous (<a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88ab86672ada53041ffcecfb379473bf353" title="The object has not yet been initialized. ">kStateUninitialized</a>) state. Otherwise, returns the objects current state.</p>
<p>Consumers of this class should not call this method. Use the <a class="el" href="initialization__state__dcheck_8h.html#a9f550b300c9c7d5214aa612adfdba40e" title="Checks that a crashpad::InitializationStateDcheck object is in the crashpad::InitializationState::kSt...">INITIALIZATION_STATE_SET_INITIALIZING()</a> macro instead. </p>
</div>
</div>
<a id="ab63bf042cd80b1a5b0aea1f96ef42b00"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab63bf042cd80b1a5b0aea1f96ef42b00">&sect;&nbsp;</a></span>SetValid()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88">State</a> crashpad::InitializationStateDcheck::SetValid </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Marks an initializing object as valid. </p>
<p>If the object is in the <a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88afc9011e885f6b0a93151818010eefdfc" title="The object is being initialized. ">kStateInvalid</a> (initializing) state, changes its state to <a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88af8963ed6297bea7168911fe4ed87e163" title="The object has been initialized. ">kStateValid</a> and returns the previous (<a class="el" href="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88afc9011e885f6b0a93151818010eefdfc" title="The object is being initialized. ">kStateInvalid</a>) state. Otherwise, returns the objects current state.</p>
<p>Consumers of this class should not call this method. Use the <a class="el" href="initialization__state__dcheck_8h.html#a079bd353351188e4819d9008b732bdce" title="Checks that a crashpad::InitializationStateDcheck object is in the initializing (crashpad::Initializa...">INITIALIZATION_STATE_SET_VALID()</a> macro instead. </p>
</div>
</div>
<a id="a95838f8f91565ebec9b02b35e32937e9"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a95838f8f91565ebec9b02b35e32937e9">&sect;&nbsp;</a></span>state()</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="classcrashpad_1_1InitializationState.html#a044ea6d40e23683d6d1bb5ce30dafd88">State</a> crashpad::InitializationStateDcheck::state </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 the objects state. </p>
<p>Consumers of this class should not call this method. Use the <a class="el" href="initialization__state__dcheck_8h.html#a9f550b300c9c7d5214aa612adfdba40e" title="Checks that a crashpad::InitializationStateDcheck object is in the crashpad::InitializationState::kSt...">INITIALIZATION_STATE_SET_INITIALIZING()</a>, <a class="el" href="initialization__state__dcheck_8h.html#a079bd353351188e4819d9008b732bdce" title="Checks that a crashpad::InitializationStateDcheck object is in the initializing (crashpad::Initializa...">INITIALIZATION_STATE_SET_VALID()</a>, and <a class="el" href="initialization__state__dcheck_8h.html#ad0cdf9da2bf4bb9c2318e100136782ee" title="Checks that a crashpad::InitializationStateDcheck object is in the crashpad::InitializationState::kSt...">INITIALIZATION_STATE_DCHECK_VALID()</a> macros instead. </p>
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>util/misc/<a class="el" href="initialization__state__dcheck_8h.html">initialization_state_dcheck.h</a></li>
</ul>
</div><!-- contents -->
<!-- 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.12
</small></address>
</body>
</html>