mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-20 11:05:54 +00:00
235 lines
41 KiB
HTML
235 lines
41 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" lang="en-US">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>rippled: NegativeUNLVote.h Source File</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 id="projectrow">
|
|
<td id="projectalign">
|
|
<div id="projectname">rippled
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.9.8 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
|
/* @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:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function() {
|
|
initMenu('',true,false,'search.php','Search');
|
|
$(document).ready(function() { init_search(); });
|
|
});
|
|
/* @license-end */
|
|
</script>
|
|
<div id="main-nav"></div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(document).ready(function() { init_codefold(0); });
|
|
/* @license-end */
|
|
</script>
|
|
<!-- 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">
|
|
<div id="MSearchResults">
|
|
<div class="SRPage">
|
|
<div id="SRIndex">
|
|
<div id="SRResults"></div>
|
|
<div class="SRStatus" id="Loading">Loading...</div>
|
|
<div class="SRStatus" id="Searching">Searching...</div>
|
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="nav-path" class="navpath">
|
|
<ul>
|
|
<li class="navelem"><a class="el" href="dir_a62226f9e3a6c7c5a3be455e2f87ae01.html">xrpld</a></li><li class="navelem"><a class="el" href="dir_c69db3203fa08a9ff994909ba6ee9783.html">app</a></li><li class="navelem"><a class="el" href="dir_2860c73e71f9ef894ba4acb1eeae5483.html">misc</a></li> </ul>
|
|
</div>
|
|
</div><!-- top -->
|
|
<div class="header">
|
|
<div class="headertitle"><div class="title">NegativeUNLVote.h</div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#ifndef XRPL_APP_MISC_NEGATIVEUNLVOTE_H_INCLUDED</span></div>
|
|
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#define XRPL_APP_MISC_NEGATIVEUNLVOTE_H_INCLUDED</span></div>
|
|
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span> </div>
|
|
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include <xrpld/app/ledger/Ledger.h></span></div>
|
|
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> </div>
|
|
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include <xrpl/beast/utility/Journal.h></span></div>
|
|
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include <xrpl/protocol/Protocol.h></span></div>
|
|
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include <xrpl/protocol/PublicKey.h></span></div>
|
|
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include <xrpl/protocol/UintTypes.h></span></div>
|
|
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
|
|
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include <<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/optional.html">optional</a>></span></div>
|
|
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span> </div>
|
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespaceripple.html">ripple</a> {</div>
|
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
|
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="keyword">template</span> <<span class="keyword">class</span> Adaptor></div>
|
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="keyword">class </span>Validations;</div>
|
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="keyword">class </span>RCLValidationsAdaptor;</div>
|
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="keyword">using </span><a class="code hl_typedef" href="namespaceripple.html#af4f638fef00deb6c3f611b9639f66d7a">RCLValidations</a> = Validations<RCLValidationsAdaptor>;</div>
|
|
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="keyword">class </span>SHAMap;</div>
|
|
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="keyword">namespace </span>test {</div>
|
|
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="keyword">class </span>NegativeUNLVoteInternal_test;</div>
|
|
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="keyword">class </span>NegativeUNLVoteScoreTable_test;</div>
|
|
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span>} <span class="comment">// namespace test</span></div>
|
|
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> </div>
|
|
<div class="foldopen" id="foldopen00028" data-start="{" data-end="};">
|
|
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html"> 28</a></span><span class="keyword">class </span><a class="code hl_class" href="classripple_1_1NegativeUNLVote.html">NegativeUNLVote</a> final</div>
|
|
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span>{</div>
|
|
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="keyword">public</span>:</div>
|
|
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#ab76d9fbc4b6a779ef802d683ce6aff5f"> 37</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">size_t</span> <a class="code hl_variable" href="classripple_1_1NegativeUNLVote.html#ab76d9fbc4b6a779ef802d683ce6aff5f">negativeUNLLowWaterMark</a> =</div>
|
|
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <a class="code hl_variable" href="namespaceripple.html#aec92d858e16db22aebce05698a4a444d">FLAG_LEDGER_INTERVAL</a> * 50 / 100;</div>
|
|
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#a2f5602017495d3901ff8d662c38891af"> 43</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">size_t</span> <a class="code hl_variable" href="classripple_1_1NegativeUNLVote.html#a2f5602017495d3901ff8d662c38891af">negativeUNLHighWaterMark</a> =</div>
|
|
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_variable" href="namespaceripple.html#aec92d858e16db22aebce05698a4a444d">FLAG_LEDGER_INTERVAL</a> * 80 / 100;</div>
|
|
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#afd511e1daa58039d360430adf4043f0a"> 49</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">size_t</span> <a class="code hl_variable" href="classripple_1_1NegativeUNLVote.html#afd511e1daa58039d360430adf4043f0a">negativeUNLMinLocalValsToVote</a> =</div>
|
|
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <a class="code hl_variable" href="namespaceripple.html#aec92d858e16db22aebce05698a4a444d">FLAG_LEDGER_INTERVAL</a> * 90 / 100;</div>
|
|
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#ab62eededf03134ab139bed2a3e4712b2"> 55</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">size_t</span> <a class="code hl_variable" href="classripple_1_1NegativeUNLVote.html#ab62eededf03134ab139bed2a3e4712b2">newValidatorDisableSkip</a> = <a class="code hl_variable" href="namespaceripple.html#aec92d858e16db22aebce05698a4a444d">FLAG_LEDGER_INTERVAL</a> * 2;</div>
|
|
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#af2de75b9bfd6f9725a3dce10979fc128"> 59</a></span> <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keywordtype">float</span> <a class="code hl_variable" href="classripple_1_1NegativeUNLVote.html#af2de75b9bfd6f9725a3dce10979fc128">negativeUNLMaxListed</a> = 0.25;</div>
|
|
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> </div>
|
|
<div class="foldopen" id="foldopen00065" data-start="{" data-end="};">
|
|
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cf"> 65</a></span> <span class="keyword">enum</span> <a class="code hl_enumeration" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cf">NegativeUNLModify</a> {</div>
|
|
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cfabe47f804b7bde80da32af12f772dc7c5"> 66</a></span> <a class="code hl_enumvalue" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cfabe47f804b7bde80da32af12f772dc7c5">ToDisable</a>, <span class="comment">// UNLModify Tx is to disable a validator</span></div>
|
|
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_enumvalue" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cfa50aab7a54a0d4bee43c5e3fcedd50d13">ToReEnable</a> <span class="comment">// UNLModify Tx is to re-enable a validator</span></div>
|
|
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cfa50aab7a54a0d4bee43c5e3fcedd50d13"> 68</a></span> };</div>
|
|
</div>
|
|
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> </div>
|
|
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <a class="code hl_class" href="classripple_1_1NegativeUNLVote.html">NegativeUNLVote</a>(<a class="code hl_class" href="classripple_1_1base__uint.html">NodeID</a> <span class="keyword">const</span>& myId, <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> j);</div>
|
|
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#a97f003bda574fab190cf2fae6016cd83"> 77</a></span> <a class="code hl_function" href="classripple_1_1NegativeUNLVote.html#a97f003bda574fab190cf2fae6016cd83">~NegativeUNLVote</a>() = <span class="keywordflow">default</span>;</div>
|
|
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
|
|
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keywordtype">void</span></div>
|
|
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <a class="code hl_function" href="classripple_1_1NegativeUNLVote.html#ac58c464cefde1519ac23d1b51aa28833">doVoting</a>(</div>
|
|
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<Ledger const></a> <span class="keyword">const</span>& prevLedger,</div>
|
|
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/unordered_set.html">hash_set<PublicKey></a> <span class="keyword">const</span>& unlKeys,</div>
|
|
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <a class="code hl_class" href="classripple_1_1Validations.html">RCLValidations</a>& validations,</div>
|
|
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMap></a> <span class="keyword">const</span>& initialSet);</div>
|
|
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> </div>
|
|
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">void</span></div>
|
|
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <a class="code hl_function" href="classripple_1_1NegativeUNLVote.html#af279cb391bcbed65e431f14d6322441c">newValidators</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">LedgerIndex</a> seq, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/unordered_set.html">hash_set<NodeID></a> <span class="keyword">const</span>& nowTrusted);</div>
|
|
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
|
|
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span><span class="keyword">private</span>:</div>
|
|
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#aa5de4786b266e78a53d0e0541d012f9b"> 109</a></span> <a class="code hl_class" href="classripple_1_1base__uint.html">NodeID</a> <span class="keyword">const</span> <a class="code hl_variable" href="classripple_1_1NegativeUNLVote.html#aa5de4786b266e78a53d0e0541d012f9b">myId_</a>;</div>
|
|
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#a045ac9f409d032963fedb01a724b4f6f"> 110</a></span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> <a class="code hl_variable" href="classripple_1_1NegativeUNLVote.html#a045ac9f409d032963fedb01a724b4f6f">j_</a>;</div>
|
|
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#aa8c381a7b9dd1ea9ac0c06e03b89ca35"> 111</a></span> <span class="keyword">mutable</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/mutex.html">std::mutex</a> <a class="code hl_variable" href="classripple_1_1NegativeUNLVote.html#aa8c381a7b9dd1ea9ac0c06e03b89ca35">mutex_</a>;</div>
|
|
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#ad06aac6b466a08700b51ab59c5200108"> 112</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/unordered_map.html">hash_map<NodeID, LedgerIndex></a> <a class="code hl_variable" href="classripple_1_1NegativeUNLVote.html#ad06aac6b466a08700b51ab59c5200108">newValidators_</a>;</div>
|
|
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> </div>
|
|
<div class="foldopen" id="foldopen00117" data-start="{" data-end="};">
|
|
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"><a class="line" href="structripple_1_1NegativeUNLVote_1_1Candidates.html"> 117</a></span> <span class="keyword">struct </span><a class="code hl_struct" href="structripple_1_1NegativeUNLVote_1_1Candidates.html">Candidates</a></div>
|
|
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> {</div>
|
|
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"><a class="line" href="structripple_1_1NegativeUNLVote_1_1Candidates.html#afea2b484af350492a9d2a692afdbdc87"> 119</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector<NodeID></a> <a class="code hl_variable" href="structripple_1_1NegativeUNLVote_1_1Candidates.html#afea2b484af350492a9d2a692afdbdc87">toDisableCandidates</a>;</div>
|
|
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"><a class="line" href="structripple_1_1NegativeUNLVote_1_1Candidates.html#a938109d6a0f59356dcc6e36588ce40a9"> 120</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector<NodeID></a> <a class="code hl_variable" href="structripple_1_1NegativeUNLVote_1_1Candidates.html#a938109d6a0f59356dcc6e36588ce40a9">toReEnableCandidates</a>;</div>
|
|
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> };</div>
|
|
</div>
|
|
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> </div>
|
|
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <span class="keywordtype">void</span></div>
|
|
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <a class="code hl_function" href="classripple_1_1NegativeUNLVote.html#af8a85a2853312bc4b1ff9852a2498bd4">addTx</a>(</div>
|
|
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">LedgerIndex</a> seq,</div>
|
|
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <a class="code hl_class" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>& vp,</div>
|
|
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <a class="code hl_enumeration" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cf">NegativeUNLModify</a> modify,</div>
|
|
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMap></a> <span class="keyword">const</span>& initialSet);</div>
|
|
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
|
|
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <a class="code hl_class" href="classripple_1_1base__uint.html">NodeID</a></div>
|
|
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <a class="code hl_function" href="classripple_1_1NegativeUNLVote.html#a34a78d1a576f170278ca9daae7b60b0b">choose</a>(<a class="code hl_class" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>& randomPadData, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector<NodeID></a> <span class="keyword">const</span>& candidates);</div>
|
|
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> </div>
|
|
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional<hash_map<NodeID, std::uint32_t></a>></div>
|
|
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <a class="code hl_function" href="classripple_1_1NegativeUNLVote.html#a4293d7509ebb8528e12faeee020f0bf0">buildScoreTable</a>(</div>
|
|
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<Ledger const></a> <span class="keyword">const</span>& prevLedger,</div>
|
|
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/unordered_set.html">hash_set<NodeID></a> <span class="keyword">const</span>& unl,</div>
|
|
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <a class="code hl_class" href="classripple_1_1Validations.html">RCLValidations</a>& validations);</div>
|
|
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div>
|
|
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <a class="code hl_struct" href="structripple_1_1NegativeUNLVote_1_1Candidates.html">Candidates</a> <span class="keyword">const</span></div>
|
|
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <a class="code hl_function" href="classripple_1_1NegativeUNLVote.html#a8ceb9b332c095287ee068525be0c3f75">findAllCandidates</a>(</div>
|
|
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/unordered_set.html">hash_set<NodeID></a> <span class="keyword">const</span>& unl,</div>
|
|
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/unordered_set.html">hash_set<NodeID></a> <span class="keyword">const</span>& negUnl,</div>
|
|
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/unordered_map.html">hash_map<NodeID, std::uint32_t></a> <span class="keyword">const</span>& scoreTable);</div>
|
|
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> </div>
|
|
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">void</span></div>
|
|
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <a class="code hl_function" href="classripple_1_1NegativeUNLVote.html#a715cdaf670c930941605e79e41f37a12">purgeNewValidators</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">LedgerIndex</a> seq);</div>
|
|
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
|
|
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#a008614bce957cc424e60b19aa4ac4333"> 193</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classripple_1_1test_1_1NegativeUNLVoteInternal__test.html">test::NegativeUNLVoteInternal_test</a>;</div>
|
|
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"><a class="line" href="classripple_1_1NegativeUNLVote.html#a02bbec76313b08a8ae44e40de39a9fa4"> 194</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code hl_class" href="classripple_1_1test_1_1NegativeUNLVoteScoreTable__test.html">test::NegativeUNLVoteScoreTable_test</a>;</div>
|
|
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span>};</div>
|
|
</div>
|
|
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
|
|
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span>} <span class="comment">// namespace ripple</span></div>
|
|
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
|
|
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span><span class="preprocessor">#endif</span></div>
|
|
<div class="ttc" id="aclassbeast_1_1Journal_html"><div class="ttname"><a href="classbeast_1_1Journal.html">beast::Journal</a></div><div class="ttdoc">A generic endpoint for log messages.</div><div class="ttdef"><b>Definition</b> <a href="Journal_8h_source.html#l00040">Journal.h:41</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html">ripple::NegativeUNLVote</a></div><div class="ttdoc">Manager to create NegativeUNL votes.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00028">NegativeUNLVote.h:29</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_a045ac9f409d032963fedb01a724b4f6f"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#a045ac9f409d032963fedb01a724b4f6f">ripple::NegativeUNLVote::j_</a></div><div class="ttdeci">beast::Journal j_</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00110">NegativeUNLVote.h:110</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_a2f5602017495d3901ff8d662c38891af"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#a2f5602017495d3901ff8d662c38891af">ripple::NegativeUNLVote::negativeUNLHighWaterMark</a></div><div class="ttdeci">static constexpr size_t negativeUNLHighWaterMark</div><div class="ttdoc">An unreliable validator must have more than negativeUNLHighWaterMark validations in the last flag led...</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00043">NegativeUNLVote.h:43</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_a34a78d1a576f170278ca9daae7b60b0b"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#a34a78d1a576f170278ca9daae7b60b0b">ripple::NegativeUNLVote::choose</a></div><div class="ttdeci">NodeID choose(uint256 const &randomPadData, std::vector< NodeID > const &candidates)</div><div class="ttdoc">Pick one candidate from a vector of candidates.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8cpp_source.html#l00125">NegativeUNLVote.cpp:125</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_a4293d7509ebb8528e12faeee020f0bf0"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#a4293d7509ebb8528e12faeee020f0bf0">ripple::NegativeUNLVote::buildScoreTable</a></div><div class="ttdeci">std::optional< hash_map< NodeID, std::uint32_t > > buildScoreTable(std::shared_ptr< Ledger const > const &prevLedger, hash_set< NodeID > const &unl, RCLValidations &validations)</div><div class="ttdoc">Build a reliability measurement score table of validators' validation messages in the last flag ledge...</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8cpp_source.html#l00146">NegativeUNLVote.cpp:146</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_a4fc6405fdb02e58c350e175b6d58e7cf"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cf">ripple::NegativeUNLVote::NegativeUNLModify</a></div><div class="ttdeci">NegativeUNLModify</div><div class="ttdoc">A flag indicating whether a UNLModify Tx is to disable or to re-enable a validator.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00065">NegativeUNLVote.h:65</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_a4fc6405fdb02e58c350e175b6d58e7cfa50aab7a54a0d4bee43c5e3fcedd50d13"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cfa50aab7a54a0d4bee43c5e3fcedd50d13">ripple::NegativeUNLVote::ToReEnable</a></div><div class="ttdeci">@ ToReEnable</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00068">NegativeUNLVote.h:67</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_a4fc6405fdb02e58c350e175b6d58e7cfabe47f804b7bde80da32af12f772dc7c5"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cfabe47f804b7bde80da32af12f772dc7c5">ripple::NegativeUNLVote::ToDisable</a></div><div class="ttdeci">@ ToDisable</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00066">NegativeUNLVote.h:66</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_a715cdaf670c930941605e79e41f37a12"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#a715cdaf670c930941605e79e41f37a12">ripple::NegativeUNLVote::purgeNewValidators</a></div><div class="ttdeci">void purgeNewValidators(LedgerIndex seq)</div><div class="ttdoc">Purge validators that are not new anymore.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8cpp_source.html#l00322">NegativeUNLVote.cpp:322</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_a8ceb9b332c095287ee068525be0c3f75"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#a8ceb9b332c095287ee068525be0c3f75">ripple::NegativeUNLVote::findAllCandidates</a></div><div class="ttdeci">Candidates const findAllCandidates(hash_set< NodeID > const &unl, hash_set< NodeID > const &negUnl, hash_map< NodeID, std::uint32_t > const &scoreTable)</div><div class="ttdoc">Process the score table and find all disabling and re-enabling candidates.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8cpp_source.html#l00230">NegativeUNLVote.cpp:230</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_a97f003bda574fab190cf2fae6016cd83"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#a97f003bda574fab190cf2fae6016cd83">ripple::NegativeUNLVote::~NegativeUNLVote</a></div><div class="ttdeci">~NegativeUNLVote()=default</div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_aa5de4786b266e78a53d0e0541d012f9b"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#aa5de4786b266e78a53d0e0541d012f9b">ripple::NegativeUNLVote::myId_</a></div><div class="ttdeci">NodeID const myId_</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00109">NegativeUNLVote.h:109</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_aa8c381a7b9dd1ea9ac0c06e03b89ca35"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#aa8c381a7b9dd1ea9ac0c06e03b89ca35">ripple::NegativeUNLVote::mutex_</a></div><div class="ttdeci">std::mutex mutex_</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00111">NegativeUNLVote.h:111</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_ab62eededf03134ab139bed2a3e4712b2"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#ab62eededf03134ab139bed2a3e4712b2">ripple::NegativeUNLVote::newValidatorDisableSkip</a></div><div class="ttdeci">static constexpr size_t newValidatorDisableSkip</div><div class="ttdoc">We don't want to disable new validators immediately after adding them.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00055">NegativeUNLVote.h:55</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_ab76d9fbc4b6a779ef802d683ce6aff5f"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#ab76d9fbc4b6a779ef802d683ce6aff5f">ripple::NegativeUNLVote::negativeUNLLowWaterMark</a></div><div class="ttdeci">static constexpr size_t negativeUNLLowWaterMark</div><div class="ttdoc">A validator is considered unreliable if its validations is less than negativeUNLLowWaterMark in the l...</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00037">NegativeUNLVote.h:37</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_ac58c464cefde1519ac23d1b51aa28833"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#ac58c464cefde1519ac23d1b51aa28833">ripple::NegativeUNLVote::doVoting</a></div><div class="ttdeci">void doVoting(std::shared_ptr< Ledger const > const &prevLedger, hash_set< PublicKey > const &unlKeys, RCLValidations &validations, std::shared_ptr< SHAMap > const &initialSet)</div><div class="ttdoc">Cast our local vote on the NegativeUNL candidates.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8cpp_source.html#l00015">NegativeUNLVote.cpp:15</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_ad06aac6b466a08700b51ab59c5200108"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#ad06aac6b466a08700b51ab59c5200108">ripple::NegativeUNLVote::newValidators_</a></div><div class="ttdeci">hash_map< NodeID, LedgerIndex > newValidators_</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00112">NegativeUNLVote.h:112</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_af279cb391bcbed65e431f14d6322441c"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#af279cb391bcbed65e431f14d6322441c">ripple::NegativeUNLVote::newValidators</a></div><div class="ttdeci">void newValidators(LedgerIndex seq, hash_set< NodeID > const &nowTrusted)</div><div class="ttdoc">Notify NegativeUNLVote that new validators are added.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8cpp_source.html#l00305">NegativeUNLVote.cpp:305</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_af2de75b9bfd6f9725a3dce10979fc128"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#af2de75b9bfd6f9725a3dce10979fc128">ripple::NegativeUNLVote::negativeUNLMaxListed</a></div><div class="ttdeci">static constexpr float negativeUNLMaxListed</div><div class="ttdoc">We only want to put 25% of the UNL on the NegativeUNL.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00059">NegativeUNLVote.h:59</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_af8a85a2853312bc4b1ff9852a2498bd4"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#af8a85a2853312bc4b1ff9852a2498bd4">ripple::NegativeUNLVote::addTx</a></div><div class="ttdeci">void addTx(LedgerIndex seq, PublicKey const &vp, NegativeUNLModify modify, std::shared_ptr< SHAMap > const &initialSet)</div><div class="ttdoc">Add a ttUNL_MODIFY Tx to the transaction set.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8cpp_source.html#l00093">NegativeUNLVote.cpp:93</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1NegativeUNLVote_html_afd511e1daa58039d360430adf4043f0a"><div class="ttname"><a href="classripple_1_1NegativeUNLVote.html#afd511e1daa58039d360430adf4043f0a">ripple::NegativeUNLVote::negativeUNLMinLocalValsToVote</a></div><div class="ttdeci">static constexpr size_t negativeUNLMinLocalValsToVote</div><div class="ttdoc">The minimum number of validations of the local node for it to participate in the voting.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00049">NegativeUNLVote.h:49</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1PublicKey_html"><div class="ttname"><a href="classripple_1_1PublicKey.html">ripple::PublicKey</a></div><div class="ttdoc">A public key.</div><div class="ttdef"><b>Definition</b> <a href="PublicKey_8h_source.html#l00042">PublicKey.h:43</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Validations_html"><div class="ttname"><a href="classripple_1_1Validations.html">ripple::Validations< RCLValidationsAdaptor ></a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1base__uint_html"><div class="ttname"><a href="classripple_1_1base__uint.html">ripple::base_uint< 160, detail::NodeIDTag ></a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1test_1_1NegativeUNLVoteInternal__test_html"><div class="ttname"><a href="classripple_1_1test_1_1NegativeUNLVoteInternal__test.html">ripple::test::NegativeUNLVoteInternal_test</a></div><div class="ttdoc">Test the private member functions of NegativeUNLVote.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNL__test_8cpp_source.html#l00709">NegativeUNL_test.cpp:710</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1test_1_1NegativeUNLVoteScoreTable__test_html"><div class="ttname"><a href="classripple_1_1test_1_1NegativeUNLVoteScoreTable__test.html">ripple::test::NegativeUNLVoteScoreTable_test</a></div><div class="ttdoc">Rest the build score table function of NegativeUNLVote.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNL__test_8cpp_source.html#l01354">NegativeUNL_test.cpp:1355</a></div></div>
|
|
<div class="ttc" id="ainteger_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a></div></div>
|
|
<div class="ttc" id="amutex_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/thread/mutex.html">std::mutex</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html"><div class="ttname"><a href="namespaceripple.html">ripple</a></div><div class="ttdoc">Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.</div><div class="ttdef"><b>Definition</b> <a href="algorithm_8h_source.html#l00006">algorithm.h:6</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_aec92d858e16db22aebce05698a4a444d"><div class="ttname"><a href="namespaceripple.html#aec92d858e16db22aebce05698a4a444d">ripple::FLAG_LEDGER_INTERVAL</a></div><div class="ttdeci">std::uint32_t constexpr FLAG_LEDGER_INTERVAL</div><div class="ttdef"><b>Definition</b> <a href="Ledger_8h_source.html#l00407">Ledger.h:407</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_af4f638fef00deb6c3f611b9639f66d7a"><div class="ttname"><a href="namespaceripple.html#af4f638fef00deb6c3f611b9639f66d7a">ripple::RCLValidations</a></div><div class="ttdeci">Validations< RCLValidationsAdaptor > RCLValidations</div><div class="ttdoc">Alias for RCL-specific instantiation of generic Validations.</div><div class="ttdef"><b>Definition</b> <a href="RCLValidations_8h_source.html#l00222">RCLValidations.h:222</a></div></div>
|
|
<div class="ttc" id="aoptional_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/optional.html">optional</a></div></div>
|
|
<div class="ttc" id="ashared_ptr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a></div></div>
|
|
<div class="ttc" id="astructripple_1_1NegativeUNLVote_1_1Candidates_html"><div class="ttname"><a href="structripple_1_1NegativeUNLVote_1_1Candidates.html">ripple::NegativeUNLVote::Candidates</a></div><div class="ttdoc">UNLModify Tx candidates.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00117">NegativeUNLVote.h:118</a></div></div>
|
|
<div class="ttc" id="astructripple_1_1NegativeUNLVote_1_1Candidates_html_a938109d6a0f59356dcc6e36588ce40a9"><div class="ttname"><a href="structripple_1_1NegativeUNLVote_1_1Candidates.html#a938109d6a0f59356dcc6e36588ce40a9">ripple::NegativeUNLVote::Candidates::toReEnableCandidates</a></div><div class="ttdeci">std::vector< NodeID > toReEnableCandidates</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00120">NegativeUNLVote.h:120</a></div></div>
|
|
<div class="ttc" id="astructripple_1_1NegativeUNLVote_1_1Candidates_html_afea2b484af350492a9d2a692afdbdc87"><div class="ttname"><a href="structripple_1_1NegativeUNLVote_1_1Candidates.html#afea2b484af350492a9d2a692afdbdc87">ripple::NegativeUNLVote::Candidates::toDisableCandidates</a></div><div class="ttdeci">std::vector< NodeID > toDisableCandidates</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNLVote_8h_source.html#l00119">NegativeUNLVote.h:119</a></div></div>
|
|
<div class="ttc" id="aunordered_map_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/unordered_map.html">std::unordered_map</a></div></div>
|
|
<div class="ttc" id="aunordered_set_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/unordered_set.html">std::unordered_set</a></div></div>
|
|
<div class="ttc" id="avector_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a></div></div>
|
|
</div><!-- fragment --></div><!-- contents -->
|
|
<!-- start footer part -->
|
|
<hr class="footer"/><address class="footer"><small>
|
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
|
</small></address>
|
|
</body>
|
|
</html>
|