This commit is contained in:
Bronek
2025-10-08 01:28:57 -07:00
parent 59b289780c
commit 62f02c3109
466 changed files with 26115 additions and 25906 deletions

View File

@@ -1069,402 +1069,406 @@ $(document).ready(function() { init_codefold(0); });
<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span> </div>
<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> <span class="keywordflow">if</span> (!mHaveHeader)</div>
<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span> {</div>
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> UNREACHABLE(<span class="stringliteral">&quot;ripple::InboundLedger::takeAsRootNode : no ledger header&quot;</span>);</div>
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> }</div>
<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> </div>
<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> <a class="code hl_class" href="classripple_1_1AccountStateSF.html">AccountStateSF</a> filter(</div>
<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> mLedger-&gt;stateMap().family().db(), app_.getLedgerMaster());</div>
<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> san += mLedger-&gt;stateMap().addRootNode(</div>
<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span> <a class="code hl_class" href="classripple_1_1SHAMapHash.html">SHAMapHash</a>{mLedger-&gt;info().accountHash}, data, &amp;filter);</div>
<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> <span class="keywordflow">return</span> san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a93613e3366b21067e1be97251a43c511">isGood</a>();</div>
<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span>}</div>
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> UNREACHABLE(<span class="stringliteral">&quot;ripple::InboundLedger::takeAsRootNode : no ledger header&quot;</span>);</div>
<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> }</div>
<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> </div>
<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> <a class="code hl_class" href="classripple_1_1AccountStateSF.html">AccountStateSF</a> filter(</div>
<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span> mLedger-&gt;stateMap().family().db(), app_.getLedgerMaster());</div>
<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> san += mLedger-&gt;stateMap().addRootNode(</div>
<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span> <a class="code hl_class" href="classripple_1_1SHAMapHash.html">SHAMapHash</a>{mLedger-&gt;info().accountHash}, data, &amp;filter);</div>
<div class="line"><a id="l00976" name="l00976"></a><span class="lineno"> 976</span> <span class="keywordflow">return</span> san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a93613e3366b21067e1be97251a43c511">isGood</a>();</div>
<div class="line"><a id="l00977" name="l00977"></a><span class="lineno"> 977</span>}</div>
</div>
<div class="line"><a id="l00976" name="l00976"></a><span class="lineno"> 976</span> </div>
<div class="line"><a id="l00980" name="l00980"></a><span class="lineno"> 980</span><span class="keywordtype">bool</span></div>
<div class="foldopen" id="foldopen00981" data-start="{" data-end="}">
<div class="line"><a id="l00981" name="l00981"></a><span class="lineno"><a class="line" href="classripple_1_1InboundLedger.html#ae0732eada133ab96152376c95a30fefa"> 981</a></span>InboundLedger::takeTxRootNode(<a class="code hl_class" href="classripple_1_1Slice.html">Slice</a> <span class="keyword">const</span>&amp; data, <a class="code hl_class" href="classripple_1_1SHAMapAddNode.html">SHAMapAddNode</a>&amp; san)</div>
<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span>{</div>
<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"> 983</span> <span class="keywordflow">if</span> (failed_ || mHaveTransactions)</div>
<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span> {</div>
<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a5a22ae464a102f5c457dafcf0306668b">incDuplicate</a>();</div>
<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"> 987</span> }</div>
<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span> </div>
<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> <span class="keywordflow">if</span> (!mHaveHeader)</div>
<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> {</div>
<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> UNREACHABLE(<span class="stringliteral">&quot;ripple::InboundLedger::takeTxRootNode : no ledger header&quot;</span>);</div>
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> }</div>
<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span> </div>
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> <a class="code hl_class" href="classripple_1_1TransactionStateSF.html">TransactionStateSF</a> filter(</div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> mLedger-&gt;txMap().family().db(), app_.getLedgerMaster());</div>
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span> san += mLedger-&gt;txMap().addRootNode(</div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> <a class="code hl_class" href="classripple_1_1SHAMapHash.html">SHAMapHash</a>{mLedger-&gt;info().txHash}, data, &amp;filter);</div>
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> <span class="keywordflow">return</span> san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a93613e3366b21067e1be97251a43c511">isGood</a>();</div>
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span>}</div>
<div class="line"><a id="l00978" name="l00978"></a><span class="lineno"> 978</span> </div>
<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span><span class="keywordtype">bool</span></div>
<div class="foldopen" id="foldopen00983" data-start="{" data-end="}">
<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"><a class="line" href="classripple_1_1InboundLedger.html#ae0732eada133ab96152376c95a30fefa"> 983</a></span>InboundLedger::takeTxRootNode(<a class="code hl_class" href="classripple_1_1Slice.html">Slice</a> <span class="keyword">const</span>&amp; data, <a class="code hl_class" href="classripple_1_1SHAMapAddNode.html">SHAMapAddNode</a>&amp; san)</div>
<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span>{</div>
<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> <span class="keywordflow">if</span> (failed_ || mHaveTransactions)</div>
<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span> {</div>
<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"> 987</span> san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a5a22ae464a102f5c457dafcf0306668b">incDuplicate</a>();</div>
<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> }</div>
<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> </div>
<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> <span class="keywordflow">if</span> (!mHaveHeader)</div>
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> {</div>
<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span> UNREACHABLE(<span class="stringliteral">&quot;ripple::InboundLedger::takeTxRootNode : no ledger header&quot;</span>);</div>
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span> }</div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> </div>
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> <a class="code hl_class" href="classripple_1_1TransactionStateSF.html">TransactionStateSF</a> filter(</div>
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> mLedger-&gt;txMap().family().db(), app_.getLedgerMaster());</div>
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> san += mLedger-&gt;txMap().addRootNode(</div>
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span> <a class="code hl_class" href="classripple_1_1SHAMapHash.html">SHAMapHash</a>{mLedger-&gt;info().txHash}, data, &amp;filter);</div>
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> <span class="keywordflow">return</span> san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a93613e3366b21067e1be97251a43c511">isGood</a>();</div>
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span>}</div>
</div>
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> </div>
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;InboundLedger::neededHash_t&gt;</a></div>
<div class="foldopen" id="foldopen01003" data-start="{" data-end="}">
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"><a class="line" href="classripple_1_1InboundLedger.html#af0959ff442612d29333b34f1c644342b"> 1003</a></span>InboundLedger::getNeededHashes()</div>
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span>{</div>
<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;neededHash_t&gt;</a> ret;</div>
<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span> </div>
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span> <span class="keywordflow">if</span> (!mHaveHeader)</div>
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span> {</div>
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(</div>
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(protocol::TMGetObjectByHash::otLEDGER, hash_));</div>
<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span> }</div>
<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> </div>
<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span> <span class="keywordflow">if</span> (!mHaveState)</div>
<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span> {</div>
<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span> <a class="code hl_class" href="classripple_1_1AccountStateSF.html">AccountStateSF</a> filter(</div>
<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> mLedger-&gt;stateMap().family().db(), app_.getLedgerMaster());</div>
<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; h : neededStateHashes(4, &amp;filter))</div>
<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> {</div>
<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(</div>
<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(protocol::TMGetObjectByHash::otSTATE_NODE, h));</div>
<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> }</div>
<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> }</div>
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> </div>
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> <span class="keywordflow">if</span> (!mHaveTransactions)</div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> {</div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> <a class="code hl_class" href="classripple_1_1TransactionStateSF.html">TransactionStateSF</a> filter(</div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> mLedger-&gt;txMap().family().db(), app_.getLedgerMaster());</div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; h : neededTxHashes(4, &amp;filter))</div>
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span> {</div>
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(</div>
<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span> protocol::TMGetObjectByHash::otTRANSACTION_NODE, h));</div>
<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span> }</div>
<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span> }</div>
<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span> </div>
<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span>}</div>
</div>
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span> </div>
<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span><span class="keywordtype">bool</span></div>
<div class="foldopen" id="foldopen01043" data-start="{" data-end="}">
<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"><a class="line" href="classripple_1_1InboundLedger.html#aee0269ce58c0a1b62f7c9d4ddbb8b891"> 1043</a></span>InboundLedger::gotData(</div>
<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/weak_ptr.html">std::weak_ptr&lt;Peer&gt;</a> peer,</div>
<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;protocol::TMLedgerData&gt;</a> <span class="keyword">const</span>&amp; data)</div>
<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span>{</div>
<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> sl(mReceivedDataLock);</div>
<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span> </div>
<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span> <span class="keywordflow">if</span> (isDone())</div>
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span> </div>
<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span> mReceivedData.emplace_back(peer, data);</div>
<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span> </div>
<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span> <span class="keywordflow">if</span> (mReceiveDispatched)</div>
<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span> </div>
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> mReceiveDispatched = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span>}</div>
<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> </div>
<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;InboundLedger::neededHash_t&gt;</a></div>
<div class="foldopen" id="foldopen01007" data-start="{" data-end="}">
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"><a class="line" href="classripple_1_1InboundLedger.html#af0959ff442612d29333b34f1c644342b"> 1007</a></span>InboundLedger::getNeededHashes()</div>
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span>{</div>
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;neededHash_t&gt;</a> ret;</div>
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> </div>
<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span> <span class="keywordflow">if</span> (!mHaveHeader)</div>
<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span> {</div>
<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(</div>
<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(protocol::TMGetObjectByHash::otLEDGER, hash_));</div>
<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span> }</div>
<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> </div>
<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> <span class="keywordflow">if</span> (!mHaveState)</div>
<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> {</div>
<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> <a class="code hl_class" href="classripple_1_1AccountStateSF.html">AccountStateSF</a> filter(</div>
<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> mLedger-&gt;stateMap().family().db(), app_.getLedgerMaster());</div>
<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; h : neededStateHashes(4, &amp;filter))</div>
<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> {</div>
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(</div>
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(protocol::TMGetObjectByHash::otSTATE_NODE, h));</div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> }</div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> }</div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> </div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> <span class="keywordflow">if</span> (!mHaveTransactions)</div>
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span> {</div>
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> <a class="code hl_class" href="classripple_1_1TransactionStateSF.html">TransactionStateSF</a> filter(</div>
<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span> mLedger-&gt;txMap().family().db(), app_.getLedgerMaster());</div>
<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; h : neededTxHashes(4, &amp;filter))</div>
<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span> {</div>
<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(</div>
<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span> protocol::TMGetObjectByHash::otTRANSACTION_NODE, h));</div>
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> }</div>
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span> }</div>
<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span> </div>
<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span>}</div>
</div>
<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span> </div>
<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span><span class="keywordtype">bool</span></div>
<div class="foldopen" id="foldopen01047" data-start="{" data-end="}">
<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"><a class="line" href="classripple_1_1InboundLedger.html#aee0269ce58c0a1b62f7c9d4ddbb8b891"> 1047</a></span>InboundLedger::gotData(</div>
<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/weak_ptr.html">std::weak_ptr&lt;Peer&gt;</a> peer,</div>
<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;protocol::TMLedgerData&gt;</a> <span class="keyword">const</span>&amp; data)</div>
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span>{</div>
<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> sl(mReceivedDataLock);</div>
<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span> </div>
<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span> <span class="keywordflow">if</span> (isDone())</div>
<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> </div>
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span> mReceivedData.emplace_back(peer, data);</div>
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> </div>
<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> <span class="keywordflow">if</span> (mReceiveDispatched)</div>
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span> </div>
<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span><span class="comment">// VFALCO NOTE, it is not necessary to pass the entire Peer,</span></div>
<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span><span class="comment">// we can get away with just a Resource::Consumer endpoint.</span></div>
<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span><span class="comment">//</span></div>
<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span><span class="comment">// TODO Change peer to Consumer</span></div>
<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span><span class="comment">//</span></div>
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span><span class="keywordtype">int</span></div>
<div class="foldopen" id="foldopen01070" data-start="{" data-end="}">
<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"><a class="line" href="classripple_1_1InboundLedger.html#a679a7b5d794f6aca531f421da54c1eb5"> 1070</a></span>InboundLedger::processData(</div>
<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Peer&gt;</a> peer,</div>
<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span> protocol::TMLedgerData&amp; packet)</div>
<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span>{</div>
<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"> 1074</span> <span class="keywordflow">if</span> (packet.type() == protocol::liBASE)</div>
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> {</div>
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> <span class="keywordflow">if</span> (packet.nodes().empty())</div>
<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span> {</div>
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> JLOG(journal_.warn()) &lt;&lt; peer-&gt;id() &lt;&lt; <span class="stringliteral">&quot;: empty header data&quot;</span>;</div>
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> peer-&gt;charge(</div>
<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> Resource::feeMalformedRequest, <span class="stringliteral">&quot;ledger_data empty header&quot;</span>);</div>
<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span> }</div>
<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> </div>
<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span> <a class="code hl_class" href="classripple_1_1SHAMapAddNode.html">SHAMapAddNode</a> san;</div>
<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span> </div>
<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">ScopedLockType</a> sl(mtx_);</div>
<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> mReceiveDispatched = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span>}</div>
</div>
<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> </div>
<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span><span class="comment">// VFALCO NOTE, it is not necessary to pass the entire Peer,</span></div>
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span><span class="comment">// we can get away with just a Resource::Consumer endpoint.</span></div>
<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span><span class="comment">//</span></div>
<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span><span class="comment">// TODO Change peer to Consumer</span></div>
<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span><span class="comment">//</span></div>
<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span><span class="keywordtype">int</span></div>
<div class="foldopen" id="foldopen01074" data-start="{" data-end="}">
<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"><a class="line" href="classripple_1_1InboundLedger.html#a679a7b5d794f6aca531f421da54c1eb5"> 1074</a></span>InboundLedger::processData(</div>
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Peer&gt;</a> peer,</div>
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> protocol::TMLedgerData&amp; packet)</div>
<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span>{</div>
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> <span class="keywordflow">if</span> (packet.type() == protocol::liBASE)</div>
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> {</div>
<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> <span class="keywordflow">if</span> (packet.nodes().empty())</div>
<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> {</div>
<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span> JLOG(journal_.warn()) &lt;&lt; peer-&gt;id() &lt;&lt; <span class="stringliteral">&quot;: empty header data&quot;</span>;</div>
<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> peer-&gt;charge(</div>
<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span> Resource::feeMalformedRequest, <span class="stringliteral">&quot;ledger_data empty header&quot;</span>);</div>
<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> }</div>
<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span> </div>
<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span> {</div>
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span> <span class="keywordflow">if</span> (!mHaveHeader)</div>
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span> {</div>
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span> <span class="keywordflow">if</span> (!takeHeader(packet.nodes(0).nodedata()))</div>
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span> {</div>
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span> JLOG(journal_.warn()) &lt;&lt; <span class="stringliteral">&quot;Got invalid header data&quot;</span>;</div>
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span> peer-&gt;charge(</div>
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span> Resource::feeMalformedRequest,</div>
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span> <span class="stringliteral">&quot;ledger_data invalid header&quot;</span>);</div>
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> }</div>
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> </div>
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a1d96058e6d0660582c89f55e14178dff">incUseful</a>();</div>
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> }</div>
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> </div>
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> <span class="keywordflow">if</span> (!mHaveState &amp;&amp; (packet.nodes().size() &gt; 1) &amp;&amp;</div>
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> !takeAsRootNode(<a class="code hl_function" href="namespaceripple.html#a93f2333b362ee67694b78f55eadf7805">makeSlice</a>(packet.nodes(1).nodedata()), san))</div>
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> {</div>
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> JLOG(journal_.warn()) &lt;&lt; <span class="stringliteral">&quot;Included AS root invalid&quot;</span>;</div>
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> }</div>
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span> </div>
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> <span class="keywordflow">if</span> (!mHaveTransactions &amp;&amp; (packet.nodes().size() &gt; 2) &amp;&amp;</div>
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span> !takeTxRootNode(<a class="code hl_function" href="namespaceripple.html#a93f2333b362ee67694b78f55eadf7805">makeSlice</a>(packet.nodes(2).nodedata()), san))</div>
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span> {</div>
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span> JLOG(journal_.warn()) &lt;&lt; <span class="stringliteral">&quot;Included TX root invalid&quot;</span>;</div>
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span> }</div>
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span> }</div>
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; ex)</div>
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> {</div>
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span> JLOG(journal_.warn())</div>
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> &lt;&lt; <span class="stringliteral">&quot;Included AS/TX root invalid: &quot;</span> &lt;&lt; ex.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>();</div>
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span> <span class="keyword">using namespace </span>std::string_literals;</div>
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span> peer-&gt;charge(Resource::feeInvalidData, <span class="stringliteral">&quot;ledger_data &quot;</span>s + ex.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>());</div>
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> }</div>
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span> </div>
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span> <span class="keywordflow">if</span> (san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a8ee63e4e99e3e76fc3dc87c1b68efe11">isUseful</a>())</div>
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span> progress_ = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span> </div>
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span> mStats += san;</div>
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span> <span class="keywordflow">return</span> san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a55de5e3be829d8f1525d5bd180371769">getGood</a>();</div>
<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span> }</div>
<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span> <a class="code hl_class" href="classripple_1_1SHAMapAddNode.html">SHAMapAddNode</a> san;</div>
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span> </div>
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">ScopedLockType</a> sl(mtx_);</div>
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span> </div>
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span> {</div>
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span> <span class="keywordflow">if</span> (!mHaveHeader)</div>
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span> {</div>
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span> <span class="keywordflow">if</span> (!takeHeader(packet.nodes(0).nodedata()))</div>
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span> {</div>
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span> JLOG(journal_.warn()) &lt;&lt; <span class="stringliteral">&quot;Got invalid header data&quot;</span>;</div>
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> peer-&gt;charge(</div>
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> Resource::feeMalformedRequest,</div>
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> <span class="stringliteral">&quot;ledger_data invalid header&quot;</span>);</div>
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> }</div>
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> </div>
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a1d96058e6d0660582c89f55e14178dff">incUseful</a>();</div>
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> }</div>
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> </div>
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> <span class="keywordflow">if</span> (!mHaveState &amp;&amp; (packet.nodes().size() &gt; 1) &amp;&amp;</div>
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span> !takeAsRootNode(<a class="code hl_function" href="namespaceripple.html#a93f2333b362ee67694b78f55eadf7805">makeSlice</a>(packet.nodes(1).nodedata()), san))</div>
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> {</div>
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span> JLOG(journal_.warn()) &lt;&lt; <span class="stringliteral">&quot;Included AS root invalid&quot;</span>;</div>
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span> }</div>
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span> </div>
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span> <span class="keywordflow">if</span> (!mHaveTransactions &amp;&amp; (packet.nodes().size() &gt; 2) &amp;&amp;</div>
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span> !takeTxRootNode(<a class="code hl_function" href="namespaceripple.html#a93f2333b362ee67694b78f55eadf7805">makeSlice</a>(packet.nodes(2).nodedata()), san))</div>
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> {</div>
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> JLOG(journal_.warn()) &lt;&lt; <span class="stringliteral">&quot;Included TX root invalid&quot;</span>;</div>
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span> }</div>
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> }</div>
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; ex)</div>
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span> {</div>
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span> JLOG(journal_.warn())</div>
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> &lt;&lt; <span class="stringliteral">&quot;Included AS/TX root invalid: &quot;</span> &lt;&lt; ex.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>();</div>
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span> <span class="keyword">using namespace </span>std::string_literals;</div>
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span> peer-&gt;charge(Resource::feeInvalidData, <span class="stringliteral">&quot;ledger_data &quot;</span>s + ex.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>());</div>
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span> }</div>
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span> </div>
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span> <span class="keywordflow">if</span> (san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a8ee63e4e99e3e76fc3dc87c1b68efe11">isUseful</a>())</div>
<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span> progress_ = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span> </div>
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span> <span class="keywordflow">if</span> ((packet.type() == protocol::liTX_NODE) ||</div>
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span> (packet.type() == protocol::liAS_NODE))</div>
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span> {</div>
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> type = packet.type() == protocol::liTX_NODE ? <span class="stringliteral">&quot;liTX_NODE: &quot;</span></div>
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span> : <span class="stringliteral">&quot;liAS_NODE: &quot;</span>;</div>
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span> </div>
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> <span class="keywordflow">if</span> (packet.nodes().empty())</div>
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span> {</div>
<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span> JLOG(journal_.info()) &lt;&lt; peer-&gt;id() &lt;&lt; <span class="stringliteral">&quot;: response with no nodes&quot;</span>;</div>
<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"> 1141</span> peer-&gt;charge(Resource::feeMalformedRequest, <span class="stringliteral">&quot;ledger_data no nodes&quot;</span>);</div>
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span> }</div>
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span> </div>
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">ScopedLockType</a> sl(mtx_);</div>
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> </div>
<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span> <span class="comment">// Verify node IDs and data are complete</span></div>
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; node : packet.nodes())</div>
<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span> {</div>
<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span> <span class="keywordflow">if</span> (!node.has_nodeid() || !node.has_nodedata())</div>
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> {</div>
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> JLOG(journal_.warn()) &lt;&lt; <span class="stringliteral">&quot;Got bad node&quot;</span>;</div>
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span> peer-&gt;charge(</div>
<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span> Resource::feeMalformedRequest, <span class="stringliteral">&quot;ledger_data bad node&quot;</span>);</div>
<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span> }</div>
<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span> }</div>
<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span> </div>
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> <a class="code hl_class" href="classripple_1_1SHAMapAddNode.html">SHAMapAddNode</a> san;</div>
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> receiveNode(packet, san);</div>
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> </div>
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> JLOG(journal_.debug())</div>
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> &lt;&lt; <span class="stringliteral">&quot;Ledger &quot;</span></div>
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span> &lt;&lt; ((packet.type() == protocol::liTX_NODE) ? <span class="stringliteral">&quot;TX&quot;</span> : <span class="stringliteral">&quot;AS&quot;</span>)</div>
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> &lt;&lt; <span class="stringliteral">&quot; node stats: &quot;</span> &lt;&lt; san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#ae1c5b7485868021ccfdb3f59ca29e55b">get</a>();</div>
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> </div>
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> <span class="keywordflow">if</span> (san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a8ee63e4e99e3e76fc3dc87c1b68efe11">isUseful</a>())</div>
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> progress_ = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> </div>
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> mStats += san;</div>
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordflow">return</span> san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a55de5e3be829d8f1525d5bd180371769">getGood</a>();</div>
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> }</div>
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span> mStats += san;</div>
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span> <span class="keywordflow">return</span> san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a55de5e3be829d8f1525d5bd180371769">getGood</a>();</div>
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span> }</div>
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span> </div>
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span> <span class="keywordflow">if</span> ((packet.type() == protocol::liTX_NODE) ||</div>
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span> (packet.type() == protocol::liAS_NODE))</div>
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> {</div>
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> type = packet.type() == protocol::liTX_NODE ? <span class="stringliteral">&quot;liTX_NODE: &quot;</span></div>
<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span> : <span class="stringliteral">&quot;liAS_NODE: &quot;</span>;</div>
<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"> 1141</span> </div>
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span> <span class="keywordflow">if</span> (packet.nodes().empty())</div>
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span> {</div>
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span> JLOG(journal_.info()) &lt;&lt; peer-&gt;id() &lt;&lt; <span class="stringliteral">&quot;: response with no nodes&quot;</span>;</div>
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span> peer-&gt;charge(Resource::feeMalformedRequest, <span class="stringliteral">&quot;ledger_data no nodes&quot;</span>);</div>
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span> }</div>
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span> </div>
<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">ScopedLockType</a> sl(mtx_);</div>
<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span> </div>
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> <span class="comment">// Verify node IDs and data are complete</span></div>
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; node : packet.nodes())</div>
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span> {</div>
<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span> <span class="keywordflow">if</span> (!node.has_nodeid() || !node.has_nodedata())</div>
<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span> {</div>
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span> JLOG(journal_.warn()) &lt;&lt; <span class="stringliteral">&quot;Got bad node&quot;</span>;</div>
<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span> peer-&gt;charge(</div>
<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span> Resource::feeMalformedRequest, <span class="stringliteral">&quot;ledger_data bad node&quot;</span>);</div>
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> }</div>
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> }</div>
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> </div>
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> <a class="code hl_class" href="classripple_1_1SHAMapAddNode.html">SHAMapAddNode</a> san;</div>
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span> receiveNode(packet, san);</div>
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> </div>
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> JLOG(journal_.debug())</div>
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> &lt;&lt; <span class="stringliteral">&quot;Ledger &quot;</span></div>
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> &lt;&lt; ((packet.type() == protocol::liTX_NODE) ? <span class="stringliteral">&quot;TX&quot;</span> : <span class="stringliteral">&quot;AS&quot;</span>)</div>
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> &lt;&lt; <span class="stringliteral">&quot; node stats: &quot;</span> &lt;&lt; san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#ae1c5b7485868021ccfdb3f59ca29e55b">get</a>();</div>
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> </div>
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordflow">if</span> (san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a8ee63e4e99e3e76fc3dc87c1b68efe11">isUseful</a>())</div>
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> progress_ = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span> </div>
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span>}</div>
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> mStats += san;</div>
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span> <span class="keywordflow">return</span> san.<a class="code hl_function" href="classripple_1_1SHAMapAddNode.html#a55de5e3be829d8f1525d5bd180371769">getGood</a>();</div>
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> }</div>
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span> </div>
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"> 1179</span>}</div>
</div>
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> </div>
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span><span class="keyword">namespace </span>detail {</div>
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span><span class="comment">// Track the amount of useful data that each peer returns</span></div>
<div class="foldopen" id="foldopen01179" data-start="{" data-end="};">
<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"><a class="line" href="structripple_1_1detail_1_1PeerDataCounts.html"> 1179</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structripple_1_1detail_1_1PeerDataCounts.html">PeerDataCounts</a></div>
<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span>{</div>
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span> <span class="comment">// Map from peer to amount of useful the peer returned</span></div>
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"><a class="line" href="structripple_1_1detail_1_1PeerDataCounts.html#a04c78bdcf776a44d621ffc1ce70ea15e"> 1182</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/unordered_map.html">std::unordered_map&lt;std::shared_ptr&lt;Peer&gt;</a>, <span class="keywordtype">int</span>&gt; <a class="code hl_variable" href="structripple_1_1detail_1_1PeerDataCounts.html#a04c78bdcf776a44d621ffc1ce70ea15e">counts</a>;</div>
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span> <span class="comment">// The largest amount of useful data that any peer returned</span></div>
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"><a class="line" href="structripple_1_1detail_1_1PeerDataCounts.html#a43c1b9a32956031eb133972b6053feb6"> 1184</a></span> <span class="keywordtype">int</span> maxCount = 0;</div>
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span> </div>
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span> <span class="comment">// Update the data count for a peer</span></div>
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01188" data-start="{" data-end="}">
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"><a class="line" href="structripple_1_1detail_1_1PeerDataCounts.html#aa90eba0ed0077aefb8ba157b524abfe1"> 1188</a></span> <a class="code hl_function" href="structripple_1_1detail_1_1PeerDataCounts.html#aa90eba0ed0077aefb8ba157b524abfe1">update</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Peer&gt;</a>&amp;&amp; peer, <span class="keywordtype">int</span> dataCount)</div>
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> {</div>
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span> <span class="keywordflow">if</span> (dataCount &lt;= 0)</div>
<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span> maxCount = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(maxCount, dataCount);</div>
<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span> <span class="keyword">auto</span> i = counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/find.html">find</a>(peer);</div>
<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span> <span class="keywordflow">if</span> (i == counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/end.html">end</a>())</div>
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span> {</div>
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/emplace.html">emplace</a>(std::move(peer), dataCount);</div>
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span> }</div>
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span> i-&gt;second = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(i-&gt;second, dataCount);</div>
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span> }</div>
<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span> </div>
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span><span class="keyword">namespace </span>detail {</div>
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span><span class="comment">// Track the amount of useful data that each peer returns</span></div>
<div class="foldopen" id="foldopen01183" data-start="{" data-end="};">
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"><a class="line" href="structripple_1_1detail_1_1PeerDataCounts.html"> 1183</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structripple_1_1detail_1_1PeerDataCounts.html">PeerDataCounts</a></div>
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span>{</div>
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span> <span class="comment">// Map from peer to amount of useful the peer returned</span></div>
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"><a class="line" href="structripple_1_1detail_1_1PeerDataCounts.html#a04c78bdcf776a44d621ffc1ce70ea15e"> 1186</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/unordered_map.html">std::unordered_map&lt;std::shared_ptr&lt;Peer&gt;</a>, <span class="keywordtype">int</span>&gt; <a class="code hl_variable" href="structripple_1_1detail_1_1PeerDataCounts.html#a04c78bdcf776a44d621ffc1ce70ea15e">counts</a>;</div>
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> <span class="comment">// The largest amount of useful data that any peer returned</span></div>
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"><a class="line" href="structripple_1_1detail_1_1PeerDataCounts.html#a43c1b9a32956031eb133972b6053feb6"> 1188</a></span> <span class="keywordtype">int</span> maxCount = 0;</div>
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> </div>
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span> <span class="comment">// Update the data count for a peer</span></div>
<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01192" data-start="{" data-end="}">
<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"><a class="line" href="structripple_1_1detail_1_1PeerDataCounts.html#aa90eba0ed0077aefb8ba157b524abfe1"> 1192</a></span> <a class="code hl_function" href="structripple_1_1detail_1_1PeerDataCounts.html#aa90eba0ed0077aefb8ba157b524abfe1">update</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Peer&gt;</a>&amp;&amp; peer, <span class="keywordtype">int</span> dataCount)</div>
<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span> {</div>
<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span> <span class="keywordflow">if</span> (dataCount &lt;= 0)</div>
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> maxCount = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(maxCount, dataCount);</div>
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span> <span class="keyword">auto</span> i = counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/find.html">find</a>(peer);</div>
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span> <span class="keywordflow">if</span> (i == counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/end.html">end</a>())</div>
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span> {</div>
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span> counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/emplace.html">emplace</a>(std::move(peer), dataCount);</div>
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span> }</div>
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> i-&gt;second = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(i-&gt;second, dataCount);</div>
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span> }</div>
</div>
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> </div>
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span> <span class="comment">// Prune all the peers that didn&#39;t return enough data.</span></div>
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01204" data-start="{" data-end="}">
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"><a class="line" href="structripple_1_1detail_1_1PeerDataCounts.html#a90378cd814a44a39f686716eea07a3b5"> 1204</a></span> <a class="code hl_function" href="structripple_1_1detail_1_1PeerDataCounts.html#a90378cd814a44a39f686716eea07a3b5">prune</a>()</div>
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span> {</div>
<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span> <span class="comment">// Remove all the peers that didn&#39;t return at least half as much data as</span></div>
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span> <span class="comment">// the best peer</span></div>
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span> <span class="keyword">auto</span> <span class="keyword">const</span> thresh = maxCount / 2;</div>
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span> <span class="keyword">auto</span> i = counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/begin.html">begin</a>();</div>
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> <span class="keywordflow">while</span> (i != counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/end.html">end</a>())</div>
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span> {</div>
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span> <span class="keywordflow">if</span> (i-&gt;second &lt; thresh)</div>
<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> i = counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/erase.html">erase</a>(i);</div>
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"> 1215</span> ++i;</div>
<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"> 1216</span> }</div>
<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"> 1217</span> }</div>
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span> </div>
<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span> <span class="comment">// Prune all the peers that didn&#39;t return enough data.</span></div>
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01208" data-start="{" data-end="}">
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"><a class="line" href="structripple_1_1detail_1_1PeerDataCounts.html#a90378cd814a44a39f686716eea07a3b5"> 1208</a></span> <a class="code hl_function" href="structripple_1_1detail_1_1PeerDataCounts.html#a90378cd814a44a39f686716eea07a3b5">prune</a>()</div>
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span> {</div>
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> <span class="comment">// Remove all the peers that didn&#39;t return at least half as much data as</span></div>
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span> <span class="comment">// the best peer</span></div>
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span> <span class="keyword">auto</span> <span class="keyword">const</span> thresh = maxCount / 2;</div>
<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> <span class="keyword">auto</span> i = counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/begin.html">begin</a>();</div>
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span> <span class="keywordflow">while</span> (i != counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/end.html">end</a>())</div>
<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"> 1215</span> {</div>
<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"> 1216</span> <span class="keywordflow">if</span> (i-&gt;second &lt; thresh)</div>
<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"> 1217</span> i = counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/erase.html">erase</a>(i);</div>
<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span> ++i;</div>
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> }</div>
<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span> }</div>
</div>
<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> </div>
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span> <span class="comment">// call F with the `peer` parameter with a random sample of at most n values</span></div>
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> <span class="comment">// of the counts vector.</span></div>
<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> F&gt;</div>
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01223" data-start="{" data-end="}">
<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"><a class="line" href="structripple_1_1detail_1_1PeerDataCounts.html#aa3cfac93d527617e7bfde715cb26e73f"> 1223</a></span> <a class="code hl_function" href="structripple_1_1detail_1_1PeerDataCounts.html#aa3cfac93d527617e7bfde715cb26e73f">sampleN</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> n, F&amp;&amp; f)</div>
<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span> {</div>
<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"> 1225</span> <span class="keywordflow">if</span> (counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/empty.html">empty</a>())</div>
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span> </div>
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> <span class="keyword">auto</span> outFunc = [&amp;f](<span class="keyword">auto</span>&amp;&amp; v) { f(v.first); };</div>
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/random/linear_congruential_engine.html">std::minstd_rand</a> rng{<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/random/random_device.html">std::random_device</a>{}()};</div>
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span><span class="preprocessor">#if _MSC_VER</span></div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::pair&lt;std::shared_ptr&lt;Peer&gt;</a>, <span class="keywordtype">int</span>&gt;&gt; s;</div>
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> s.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">reserve</a>(n);</div>
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/sample.html">std::sample</a>(</div>
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/begin.html">begin</a>(), counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/end.html">end</a>(), <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/iterator/back_inserter.html">std::back_inserter</a>(s), n, rng);</div>
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; v : s)</div>
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> {</div>
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> outFunc(v);</div>
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span> }</div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/sample.html">std::sample</a>(</div>
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/begin.html">begin</a>(),</div>
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/end.html">end</a>(),</div>
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span> boost::make_function_output_iterator(outFunc),</div>
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> n,</div>
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span> rng);</div>
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span> }</div>
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> </div>
<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"> 1223</span> <span class="comment">// call F with the `peer` parameter with a random sample of at most n values</span></div>
<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span> <span class="comment">// of the counts vector.</span></div>
<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"> 1225</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> F&gt;</div>
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01227" data-start="{" data-end="}">
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"><a class="line" href="structripple_1_1detail_1_1PeerDataCounts.html#aa3cfac93d527617e7bfde715cb26e73f"> 1227</a></span> <a class="code hl_function" href="structripple_1_1detail_1_1PeerDataCounts.html#aa3cfac93d527617e7bfde715cb26e73f">sampleN</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> n, F&amp;&amp; f)</div>
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> {</div>
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> <span class="keywordflow">if</span> (counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/empty.html">empty</a>())</div>
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> </div>
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> <span class="keyword">auto</span> outFunc = [&amp;f](<span class="keyword">auto</span>&amp;&amp; v) { f(v.first); };</div>
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/random/linear_congruential_engine.html">std::minstd_rand</a> rng{<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/random/random_device.html">std::random_device</a>{}()};</div>
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span><span class="preprocessor">#if _MSC_VER</span></div>
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::pair&lt;std::shared_ptr&lt;Peer&gt;</a>, <span class="keywordtype">int</span>&gt;&gt; s;</div>
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> s.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">reserve</a>(n);</div>
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/sample.html">std::sample</a>(</div>
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span> counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/begin.html">begin</a>(), counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/end.html">end</a>(), <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/iterator/back_inserter.html">std::back_inserter</a>(s), n, rng);</div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; v : s)</div>
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> {</div>
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> outFunc(v);</div>
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> }</div>
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span><span class="preprocessor">#else</span></div>
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/sample.html">std::sample</a>(</div>
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span> counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/begin.html">begin</a>(),</div>
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span> counts.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/unordered_map/end.html">end</a>(),</div>
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span> boost::make_function_output_iterator(outFunc),</div>
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span> n,</div>
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span> rng);</div>
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span> }</div>
</div>
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span>};</div>
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span>};</div>
</div>
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span>} <span class="comment">// namespace detail</span></div>
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span> </div>
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01255" data-start="{" data-end="}">
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"><a class="line" href="classripple_1_1InboundLedger.html#a0fcb919dd1a3c7f0e37525aee124ee7d"> 1255</a></span>InboundLedger::runData()</div>
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span>{</div>
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span> <span class="comment">// Maximum number of peers to request data from</span></div>
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span> <span class="keyword">constexpr</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> maxUsefulPeers = 6;</div>
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span> </div>
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> <span class="keyword">decltype</span>(mReceivedData) data;</div>
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span> </div>
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span> <span class="comment">// Reserve some memory so the first couple iterations don&#39;t reallocate</span></div>
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> data.reserve(8);</div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> </div>
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> <a class="code hl_struct" href="structripple_1_1detail_1_1PeerDataCounts.html">detail::PeerDataCounts</a> dataCounts;</div>
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> </div>
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span> <span class="keywordflow">for</span> (;;)</div>
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> {</div>
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> data.clear();</div>
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span>} <span class="comment">// namespace detail</span></div>
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> </div>
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span><span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01259" data-start="{" data-end="}">
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"><a class="line" href="classripple_1_1InboundLedger.html#a0fcb919dd1a3c7f0e37525aee124ee7d"> 1259</a></span>InboundLedger::runData()</div>
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span>{</div>
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span> <span class="comment">// Maximum number of peers to request data from</span></div>
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span> <span class="keyword">constexpr</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> maxUsefulPeers = 6;</div>
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> </div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> <span class="keyword">decltype</span>(mReceivedData) data;</div>
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> </div>
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> <span class="comment">// Reserve some memory so the first couple iterations don&#39;t reallocate</span></div>
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span> data.reserve(8);</div>
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> </div>
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> <a class="code hl_struct" href="structripple_1_1detail_1_1PeerDataCounts.html">detail::PeerDataCounts</a> dataCounts;</div>
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> </div>
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> {</div>
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> sl(mReceivedDataLock);</div>
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> </div>
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span> <span class="keywordflow">if</span> (mReceivedData.empty())</div>
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span> {</div>
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> mReceiveDispatched = <span class="keyword">false</span>;</div>
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span> }</div>
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span> </div>
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> data.swap(mReceivedData);</div>
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span> }</div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> </div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; entry : data)</div>
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> {</div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> peer = entry.first.lock())</div>
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> {</div>
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> <span class="keywordtype">int</span> count = processData(peer, *(entry.second));</div>
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> dataCounts.<a class="code hl_function" href="structripple_1_1detail_1_1PeerDataCounts.html#aa90eba0ed0077aefb8ba157b524abfe1">update</a>(std::move(peer), count);</div>
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> }</div>
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span> }</div>
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> }</div>
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> </div>
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> <span class="comment">// Select a random sample of the peers that gives us the most nodes that are</span></div>
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> <span class="comment">// useful</span></div>
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> dataCounts.<a class="code hl_function" href="structripple_1_1detail_1_1PeerDataCounts.html#a90378cd814a44a39f686716eea07a3b5">prune</a>();</div>
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> dataCounts.<a class="code hl_function" href="structripple_1_1detail_1_1PeerDataCounts.html#aa3cfac93d527617e7bfde715cb26e73f">sampleN</a>(maxUsefulPeers, [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Peer&gt;</a> <span class="keyword">const</span>&amp; peer) {</div>
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> trigger(peer, TriggerReason::reply);</div>
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span> });</div>
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span>}</div>
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> <span class="keywordflow">for</span> (;;)</div>
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> {</div>
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> data.clear();</div>
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span> </div>
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span> {</div>
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> sl(mReceivedDataLock);</div>
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> </div>
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span> <span class="keywordflow">if</span> (mReceivedData.empty())</div>
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span> {</div>
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> mReceiveDispatched = <span class="keyword">false</span>;</div>
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> }</div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> </div>
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> data.swap(mReceivedData);</div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> }</div>
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> </div>
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; entry : data)</div>
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> {</div>
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> peer = entry.first.lock())</div>
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span> {</div>
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> <span class="keywordtype">int</span> count = processData(peer, *(entry.second));</div>
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> dataCounts.<a class="code hl_function" href="structripple_1_1detail_1_1PeerDataCounts.html#aa90eba0ed0077aefb8ba157b524abfe1">update</a>(std::move(peer), count);</div>
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> }</div>
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> }</div>
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> }</div>
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> </div>
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> <span class="comment">// Select a random sample of the peers that gives us the most nodes that are</span></div>
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span> <span class="comment">// useful</span></div>
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> dataCounts.<a class="code hl_function" href="structripple_1_1detail_1_1PeerDataCounts.html#a90378cd814a44a39f686716eea07a3b5">prune</a>();</div>
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> dataCounts.<a class="code hl_function" href="structripple_1_1detail_1_1PeerDataCounts.html#aa3cfac93d527617e7bfde715cb26e73f">sampleN</a>(maxUsefulPeers, [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;Peer&gt;</a> <span class="keyword">const</span>&amp; peer) {</div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> trigger(peer, TriggerReason::reply);</div>
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> });</div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span>}</div>
</div>
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> </div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span><a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a></div>
<div class="foldopen" id="foldopen01302" data-start="{" data-end="}">
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"><a class="line" href="classripple_1_1InboundLedger.html#a069c3ef1adae2c6d17c67e71071ca962"> 1302</a></span>InboundLedger::getJson(<span class="keywordtype">int</span>)</div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span>{</div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> ret(<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>);</div>
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> </div>
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">ScopedLockType</a> sl(mtx_);</div>
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span> </div>
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> ret[jss::hash] = to_string(hash_);</div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> </div>
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span><a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a></div>
<div class="foldopen" id="foldopen01306" data-start="{" data-end="}">
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"><a class="line" href="classripple_1_1InboundLedger.html#a069c3ef1adae2c6d17c67e71071ca962"> 1306</a></span>InboundLedger::getJson(<span class="keywordtype">int</span>)</div>
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span>{</div>
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> ret(<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>);</div>
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span> </div>
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> <span class="keywordflow">if</span> (complete_)</div>
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> ret[jss::complete] = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> </div>
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> <span class="keywordflow">if</span> (failed_)</div>
<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span> ret[jss::failed] = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span> </div>
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span> <span class="keywordflow">if</span> (!complete_ &amp;&amp; !failed_)</div>
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> ret[jss::peers] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(mPeerSet-&gt;getPeerIds().size());</div>
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> </div>
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span> ret[jss::have_header] = mHaveHeader;</div>
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> </div>
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span> <span class="keywordflow">if</span> (mHaveHeader)</div>
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> {</div>
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span> ret[jss::have_state] = mHaveState;</div>
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span> ret[jss::have_transactions] = mHaveTransactions;</div>
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> }</div>
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> </div>
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> ret[jss::timeouts] = timeouts_;</div>
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> </div>
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> <span class="keywordflow">if</span> (mHaveHeader &amp;&amp; !mHaveState)</div>
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> {</div>
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> hv(<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eadc8f264f36b55b063c78126b335415f4">Json::arrayValue</a>);</div>
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; h : neededStateHashes(16, <span class="keyword">nullptr</span>))</div>
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> {</div>
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> hv.<a class="code hl_function" href="classJson_1_1Value.html#a21526b61dea2a1771030473e6248621e">append</a>(to_string(h));</div>
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> }</div>
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> ret[jss::needed_state_hashes] = hv;</div>
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> }</div>
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> </div>
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> <span class="keywordflow">if</span> (mHaveHeader &amp;&amp; !mHaveTransactions)</div>
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> {</div>
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> hv(<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eadc8f264f36b55b063c78126b335415f4">Json::arrayValue</a>);</div>
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; h : neededTxHashes(16, <span class="keyword">nullptr</span>))</div>
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> {</div>
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> hv.<a class="code hl_function" href="classJson_1_1Value.html#a21526b61dea2a1771030473e6248621e">append</a>(to_string(h));</div>
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> }</div>
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> ret[jss::needed_transaction_hashes] = hv;</div>
<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"> 1347</span> }</div>
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> </div>
<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span>}</div>
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">ScopedLockType</a> sl(mtx_);</div>
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> </div>
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> ret[jss::hash] = to_string(hash_);</div>
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> </div>
<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span> <span class="keywordflow">if</span> (complete_)</div>
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span> ret[jss::complete] = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span> </div>
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> <span class="keywordflow">if</span> (failed_)</div>
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> ret[jss::failed] = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span> </div>
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> <span class="keywordflow">if</span> (!complete_ &amp;&amp; !failed_)</div>
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span> ret[jss::peers] = <span class="keyword">static_cast&lt;</span><span class="keywordtype">int</span><span class="keyword">&gt;</span>(mPeerSet-&gt;getPeerIds().size());</div>
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> </div>
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span> ret[jss::have_header] = mHaveHeader;</div>
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span> </div>
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> <span class="keywordflow">if</span> (mHaveHeader)</div>
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> {</div>
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> ret[jss::have_state] = mHaveState;</div>
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> ret[jss::have_transactions] = mHaveTransactions;</div>
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> }</div>
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> </div>
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> ret[jss::timeouts] = timeouts_;</div>
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> </div>
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> <span class="keywordflow">if</span> (mHaveHeader &amp;&amp; !mHaveState)</div>
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> {</div>
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> hv(<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eadc8f264f36b55b063c78126b335415f4">Json::arrayValue</a>);</div>
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; h : neededStateHashes(16, <span class="keyword">nullptr</span>))</div>
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> {</div>
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> hv.<a class="code hl_function" href="classJson_1_1Value.html#a21526b61dea2a1771030473e6248621e">append</a>(to_string(h));</div>
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> }</div>
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> ret[jss::needed_state_hashes] = hv;</div>
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> }</div>
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> </div>
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> <span class="keywordflow">if</span> (mHaveHeader &amp;&amp; !mHaveTransactions)</div>
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> {</div>
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> hv(<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eadc8f264f36b55b063c78126b335415f4">Json::arrayValue</a>);</div>
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; h : neededTxHashes(16, <span class="keyword">nullptr</span>))</div>
<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"> 1347</span> {</div>
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> hv.<a class="code hl_function" href="classJson_1_1Value.html#a21526b61dea2a1771030473e6248621e">append</a>(to_string(h));</div>
<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span> }</div>
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span> ret[jss::needed_transaction_hashes] = hv;</div>
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> }</div>
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span> </div>
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span> <span class="keywordflow">return</span> ret;</div>
<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span>}</div>
</div>
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> </div>
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span>} <span class="comment">// namespace ripple</span></div>
<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"> 1355</span> </div>
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span>} <span class="comment">// namespace ripple</span></div>
<div class="ttc" id="aaddressof_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/memory/addressof.html">std::addressof</a></div><div class="ttdeci">T addressof(T... args)</div></div>
<div class="ttc" id="aalgorithm_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/algorithm.html">algorithm</a></div></div>
<div class="ttc" id="aback_inserter_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/iterator/back_inserter.html">std::back_inserter</a></div><div class="ttdeci">T back_inserter(T... args)</div></div>
@@ -1472,8 +1476,8 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="abasic_stringstream_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/basic_stringstream.html">std::stringstream</a></div></div>
<div class="ttc" id="abegin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/unordered_map/begin.html">std::unordered_map::begin</a></div><div class="ttdeci">T begin(T... args)</div></div>
<div class="ttc" id="aclassJson_1_1Value_html"><div class="ttname"><a href="classJson_1_1Value.html">Json::Value</a></div><div class="ttdoc">Represents a JSON value.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8h_source.html#l00148">json_value.h:149</a></div></div>
<div class="ttc" id="aclassJson_1_1Value_html_a21526b61dea2a1771030473e6248621e"><div class="ttname"><a href="classJson_1_1Value.html#a21526b61dea2a1771030473e6248621e">Json::Value::append</a></div><div class="ttdeci">Value &amp; append(Value const &amp;value)</div><div class="ttdoc">Append value to array at the end.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00913">json_value.cpp:913</a></div></div>
<div class="ttc" id="aclassJson_1_1Value_html_a8ce61157a011894f0252ceed232312de"><div class="ttname"><a href="classJson_1_1Value.html#a8ce61157a011894f0252ceed232312de">Json::Value::type</a></div><div class="ttdeci">ValueType type() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00364">json_value.cpp:364</a></div></div>
<div class="ttc" id="aclassJson_1_1Value_html_a21526b61dea2a1771030473e6248621e"><div class="ttname"><a href="classJson_1_1Value.html#a21526b61dea2a1771030473e6248621e">Json::Value::append</a></div><div class="ttdeci">Value &amp; append(Value const &amp;value)</div><div class="ttdoc">Append value to array at the end.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00937">json_value.cpp:937</a></div></div>
<div class="ttc" id="aclassJson_1_1Value_html_a8ce61157a011894f0252ceed232312de"><div class="ttname"><a href="classJson_1_1Value.html#a8ce61157a011894f0252ceed232312de">Json::Value::type</a></div><div class="ttdeci">ValueType type() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00370">json_value.cpp:370</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_a3dfb8e2e3eecccdb5cf78ff21bca069c"><div class="ttname"><a href="classbeast_1_1Journal.html#a3dfb8e2e3eecccdb5cf78ff21bca069c">beast::Journal::fatal</a></div><div class="ttdeci">Stream fatal() const</div><div class="ttdef"><b>Definition</b> <a href="Journal_8h_source.html#l00352">Journal.h:352</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_a556228cb60bcf405c225d3f64b7b01ae"><div class="ttname"><a href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">beast::Journal::debug</a></div><div class="ttdeci">Stream debug() const</div><div class="ttdef"><b>Definition</b> <a href="Journal_8h_source.html#l00328">Journal.h:328</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_a87d6bd59020d94110027dcab3d9e3357"><div class="ttname"><a href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">beast::Journal::info</a></div><div class="ttdeci">Stream info() const</div><div class="ttdef"><b>Definition</b> <a href="Journal_8h_source.html#l00334">Journal.h:334</a></div></div>
@@ -1517,7 +1521,7 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="aclassripple_1_1InboundLedger_html_ae3f849209788ace9151194b99b6291f3"><div class="ttname"><a href="classripple_1_1InboundLedger.html#ae3f849209788ace9151194b99b6291f3">ripple::InboundLedger::mReceivedData</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; std::weak_ptr&lt; Peer &gt;, std::shared_ptr&lt; protocol::TMLedgerData &gt; &gt; &gt; mReceivedData</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8h_source.html#l00196">InboundLedger.h:196</a></div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_aecb5f5b5669afaa53902ae651f892a85"><div class="ttname"><a href="classripple_1_1InboundLedger.html#aecb5f5b5669afaa53902ae651f892a85">ripple::InboundLedger::mSeq</a></div><div class="ttdeci">std::uint32_t mSeq</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8h_source.html#l00185">InboundLedger.h:185</a></div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_aee7c9597ee54dbe471af1d7db763161b"><div class="ttname"><a href="classripple_1_1InboundLedger.html#aee7c9597ee54dbe471af1d7db763161b">ripple::InboundLedger::mSignaled</a></div><div class="ttdeci">bool mSignaled</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8h_source.html#l00183">InboundLedger.h:183</a></div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_af0959ff442612d29333b34f1c644342b"><div class="ttname"><a href="classripple_1_1InboundLedger.html#af0959ff442612d29333b34f1c644342b">ripple::InboundLedger::getNeededHashes</a></div><div class="ttdeci">std::vector&lt; neededHash_t &gt; getNeededHashes()</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l01003">InboundLedger.cpp:1003</a></div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_af0959ff442612d29333b34f1c644342b"><div class="ttname"><a href="classripple_1_1InboundLedger.html#af0959ff442612d29333b34f1c644342b">ripple::InboundLedger::getNeededHashes</a></div><div class="ttdeci">std::vector&lt; neededHash_t &gt; getNeededHashes()</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l01007">InboundLedger.cpp:1007</a></div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_af35ec9e2ff1776eba1202e3786b4e421"><div class="ttname"><a href="classripple_1_1InboundLedger.html#af35ec9e2ff1776eba1202e3786b4e421">ripple::InboundLedger::update</a></div><div class="ttdeci">void update(std::uint32_t seq)</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l00149">InboundLedger.cpp:149</a></div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_af907877c2e81e4c01a47bf4b591d22f3"><div class="ttname"><a href="classripple_1_1InboundLedger.html#af907877c2e81e4c01a47bf4b591d22f3">ripple::InboundLedger::touch</a></div><div class="ttdeci">void touch()</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8h_source.html#l00112">InboundLedger.h:112</a></div></div>
<div class="ttc" id="aclassripple_1_1InboundLedger_html_af9dd512e63b43a037d5bdde5779212db"><div class="ttname"><a href="classripple_1_1InboundLedger.html#af9dd512e63b43a037d5bdde5779212db">ripple::InboundLedger::mReason</a></div><div class="ttdeci">Reason const mReason</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8h_source.html#l00186">InboundLedger.h:186</a></div></div>
@@ -1526,7 +1530,7 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="aclassripple_1_1InboundLedgers_html_aff8b120dd69c652db5c3327d7eab5f8d"><div class="ttname"><a href="classripple_1_1InboundLedgers.html#aff8b120dd69c652db5c3327d7eab5f8d">ripple::InboundLedgers::onLedgerFetched</a></div><div class="ttdeci">virtual void onLedgerFetched()=0</div><div class="ttdoc">Called when a complete ledger is obtained.</div></div>
<div class="ttc" id="aclassripple_1_1JobQueue_html_af5e34187d55aa58e551dc196aaf1ec25"><div class="ttname"><a href="classripple_1_1JobQueue.html#af5e34187d55aa58e551dc196aaf1ec25">ripple::JobQueue::addJob</a></div><div class="ttdeci">bool addJob(JobType type, std::string const &amp;name, JobHandler &amp;&amp;jobHandler)</div><div class="ttdoc">Adds a job to the JobQueue.</div><div class="ttdef"><b>Definition</b> <a href="JobQueue_8h_source.html#l00168">JobQueue.h:168</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_a168ff9afab04a717a7dacbca1927566c"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#a168ff9afab04a717a7dacbca1927566c">ripple::LedgerMaster::checkAccept</a></div><div class="ttdeci">void checkAccept(std::shared_ptr&lt; Ledger const &gt; const &amp;ledger)</div><div class="ttdef"><b>Definition</b> <a href="LedgerMaster_8cpp_source.html#l00937">LedgerMaster.cpp:937</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_aa65154f38461c13e79695d7d6c7fa4c9"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#aa65154f38461c13e79695d7d6c7fa4c9">ripple::LedgerMaster::getFetchPack</a></div><div class="ttdeci">std::optional&lt; Blob &gt; getFetchPack(uint256 const &amp;hash) override</div><div class="ttdoc">Retrieves partial ledger data of the coresponding hash from peers.</div><div class="ttdef"><b>Definition</b> <a href="LedgerMaster_8cpp_source.html#l02013">LedgerMaster.cpp:2013</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_aa65154f38461c13e79695d7d6c7fa4c9"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#aa65154f38461c13e79695d7d6c7fa4c9">ripple::LedgerMaster::getFetchPack</a></div><div class="ttdeci">std::optional&lt; Blob &gt; getFetchPack(uint256 const &amp;hash) override</div><div class="ttdoc">Retrieves partial ledger data of the coresponding hash from peers.</div><div class="ttdef"><b>Definition</b> <a href="LedgerMaster_8cpp_source.html#l02015">LedgerMaster.cpp:2015</a></div></div>
<div class="ttc" id="aclassripple_1_1LedgerMaster_html_adbb16e4fb8acf01bd535684e45d20051"><div class="ttname"><a href="classripple_1_1LedgerMaster.html#adbb16e4fb8acf01bd535684e45d20051">ripple::LedgerMaster::storeLedger</a></div><div class="ttdeci">bool storeLedger(std::shared_ptr&lt; Ledger const &gt; ledger)</div><div class="ttdef"><b>Definition</b> <a href="LedgerMaster_8cpp_source.html#l00442">LedgerMaster.cpp:442</a></div></div>
<div class="ttc" id="aclassripple_1_1NodeStore_1_1Database_html"><div class="ttname"><a href="classripple_1_1NodeStore_1_1Database.html">ripple::NodeStore::Database</a></div><div class="ttdoc">Persistency layer for NodeObject.</div><div class="ttdef"><b>Definition</b> <a href="Database_8h_source.html#l00051">Database.h:52</a></div></div>
<div class="ttc" id="aclassripple_1_1NodeStore_1_1Database_html_a780601a4dce8d688490a24a61f8cea9e"><div class="ttname"><a href="classripple_1_1NodeStore_1_1Database.html#a780601a4dce8d688490a24a61f8cea9e">ripple::NodeStore::Database::fetchNodeObject</a></div><div class="ttdeci">std::shared_ptr&lt; NodeObject &gt; fetchNodeObject(uint256 const &amp;hash, std::uint32_t ledgerSeq=0, FetchType fetchType=FetchType::synchronous, bool duplicate=false)</div><div class="ttdoc">Fetch a node object.</div><div class="ttdef"><b>Definition</b> <a href="Database_8cpp_source.html#l00241">Database.cpp:241</a></div></div>
@@ -1542,7 +1546,7 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="aclassripple_1_1SHAMapHash_html_a9da182ac6ba19109c55bd2a6cd745a13"><div class="ttname"><a href="classripple_1_1SHAMapHash.html#a9da182ac6ba19109c55bd2a6cd745a13">ripple::SHAMapHash::isZero</a></div><div class="ttdeci">bool isZero() const</div><div class="ttdef"><b>Definition</b> <a href="SHAMapHash_8h_source.html#l00054">SHAMapHash.h:54</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapSyncFilter_html"><div class="ttname"><a href="classripple_1_1SHAMapSyncFilter.html">ripple::SHAMapSyncFilter</a></div><div class="ttdef"><b>Definition</b> <a href="SHAMapSyncFilter_8h_source.html#l00030">SHAMapSyncFilter.h:31</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html"><div class="ttname"><a href="classripple_1_1SHAMap.html">ripple::SHAMap</a></div><div class="ttdoc">A SHAMap is both a radix tree with a fan-out of 16 and a Merkle tree.</div><div class="ttdef"><b>Definition</b> <a href="SHAMap_8h_source.html#l00098">SHAMap.h:99</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a9b0dff3c3bf35efc30104c93becdc079"><div class="ttname"><a href="classripple_1_1SHAMap.html#a9b0dff3c3bf35efc30104c93becdc079">ripple::SHAMap::getHash</a></div><div class="ttdeci">SHAMapHash getHash() const</div><div class="ttdef"><b>Definition</b> <a href="SHAMap_8cpp_source.html#l00889">SHAMap.cpp:889</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a9b0dff3c3bf35efc30104c93becdc079"><div class="ttname"><a href="classripple_1_1SHAMap.html#a9b0dff3c3bf35efc30104c93becdc079">ripple::SHAMap::getHash</a></div><div class="ttdeci">SHAMapHash getHash() const</div><div class="ttdef"><b>Definition</b> <a href="SHAMap_8cpp_source.html#l00891">SHAMap.cpp:891</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_aa5a110117bc3ae3de8a49ba06c21fa04"><div class="ttname"><a href="classripple_1_1SHAMap.html#aa5a110117bc3ae3de8a49ba06c21fa04">ripple::SHAMap::getMissingNodes</a></div><div class="ttdeci">std::vector&lt; std::pair&lt; SHAMapNodeID, uint256 &gt; &gt; getMissingNodes(int maxNodes, SHAMapSyncFilter *filter)</div><div class="ttdoc">Check for nodes in the SHAMap not available.</div><div class="ttdef"><b>Definition</b> <a href="SHAMapSync_8cpp_source.html#l00318">SHAMapSync.cpp:318</a></div></div>
<div class="ttc" id="aclassripple_1_1Serializer_html"><div class="ttname"><a href="classripple_1_1Serializer.html">ripple::Serializer</a></div><div class="ttdef"><b>Definition</b> <a href="Serializer_8h_source.html#l00040">Serializer.h:41</a></div></div>
<div class="ttc" id="aclassripple_1_1Serializer_html_a2aeeb12b01b18876187455f7009f5352"><div class="ttname"><a href="classripple_1_1Serializer.html#a2aeeb12b01b18876187455f7009f5352">ripple::Serializer::add32</a></div><div class="ttdeci">int add32(T i)</div><div class="ttdef"><b>Definition</b> <a href="Serializer_8h_source.html#l00094">Serializer.h:94</a></div></div>
@@ -1612,11 +1616,11 @@ $(document).ready(function() { init_codefold(0); });
<div class="ttc" id="asize_t_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a></div></div>
<div class="ttc" id="astable_partition_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/stable_partition.html">std::stable_partition</a></div><div class="ttdeci">T stable_partition(T... args)</div></div>
<div class="ttc" id="astr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/basic_stringstream/str.html">std::stringstream::str</a></div><div class="ttdeci">T str(T... args)</div></div>
<div class="ttc" id="astructripple_1_1detail_1_1PeerDataCounts_html"><div class="ttname"><a href="structripple_1_1detail_1_1PeerDataCounts.html">ripple::detail::PeerDataCounts</a></div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l01179">InboundLedger.cpp:1180</a></div></div>
<div class="ttc" id="astructripple_1_1detail_1_1PeerDataCounts_html_a04c78bdcf776a44d621ffc1ce70ea15e"><div class="ttname"><a href="structripple_1_1detail_1_1PeerDataCounts.html#a04c78bdcf776a44d621ffc1ce70ea15e">ripple::detail::PeerDataCounts::counts</a></div><div class="ttdeci">std::unordered_map&lt; std::shared_ptr&lt; Peer &gt;, int &gt; counts</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l01182">InboundLedger.cpp:1182</a></div></div>
<div class="ttc" id="astructripple_1_1detail_1_1PeerDataCounts_html_a90378cd814a44a39f686716eea07a3b5"><div class="ttname"><a href="structripple_1_1detail_1_1PeerDataCounts.html#a90378cd814a44a39f686716eea07a3b5">ripple::detail::PeerDataCounts::prune</a></div><div class="ttdeci">void prune()</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l01204">InboundLedger.cpp:1204</a></div></div>
<div class="ttc" id="astructripple_1_1detail_1_1PeerDataCounts_html_aa3cfac93d527617e7bfde715cb26e73f"><div class="ttname"><a href="structripple_1_1detail_1_1PeerDataCounts.html#aa3cfac93d527617e7bfde715cb26e73f">ripple::detail::PeerDataCounts::sampleN</a></div><div class="ttdeci">void sampleN(std::size_t n, F &amp;&amp;f)</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l01223">InboundLedger.cpp:1223</a></div></div>
<div class="ttc" id="astructripple_1_1detail_1_1PeerDataCounts_html_aa90eba0ed0077aefb8ba157b524abfe1"><div class="ttname"><a href="structripple_1_1detail_1_1PeerDataCounts.html#aa90eba0ed0077aefb8ba157b524abfe1">ripple::detail::PeerDataCounts::update</a></div><div class="ttdeci">void update(std::shared_ptr&lt; Peer &gt; &amp;&amp;peer, int dataCount)</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l01188">InboundLedger.cpp:1188</a></div></div>
<div class="ttc" id="astructripple_1_1detail_1_1PeerDataCounts_html"><div class="ttname"><a href="structripple_1_1detail_1_1PeerDataCounts.html">ripple::detail::PeerDataCounts</a></div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l01183">InboundLedger.cpp:1184</a></div></div>
<div class="ttc" id="astructripple_1_1detail_1_1PeerDataCounts_html_a04c78bdcf776a44d621ffc1ce70ea15e"><div class="ttname"><a href="structripple_1_1detail_1_1PeerDataCounts.html#a04c78bdcf776a44d621ffc1ce70ea15e">ripple::detail::PeerDataCounts::counts</a></div><div class="ttdeci">std::unordered_map&lt; std::shared_ptr&lt; Peer &gt;, int &gt; counts</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l01186">InboundLedger.cpp:1186</a></div></div>
<div class="ttc" id="astructripple_1_1detail_1_1PeerDataCounts_html_a90378cd814a44a39f686716eea07a3b5"><div class="ttname"><a href="structripple_1_1detail_1_1PeerDataCounts.html#a90378cd814a44a39f686716eea07a3b5">ripple::detail::PeerDataCounts::prune</a></div><div class="ttdeci">void prune()</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l01208">InboundLedger.cpp:1208</a></div></div>
<div class="ttc" id="astructripple_1_1detail_1_1PeerDataCounts_html_aa3cfac93d527617e7bfde715cb26e73f"><div class="ttname"><a href="structripple_1_1detail_1_1PeerDataCounts.html#aa3cfac93d527617e7bfde715cb26e73f">ripple::detail::PeerDataCounts::sampleN</a></div><div class="ttdeci">void sampleN(std::size_t n, F &amp;&amp;f)</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l01227">InboundLedger.cpp:1227</a></div></div>
<div class="ttc" id="astructripple_1_1detail_1_1PeerDataCounts_html_aa90eba0ed0077aefb8ba157b524abfe1"><div class="ttname"><a href="structripple_1_1detail_1_1PeerDataCounts.html#aa90eba0ed0077aefb8ba157b524abfe1">ripple::detail::PeerDataCounts::update</a></div><div class="ttdeci">void update(std::shared_ptr&lt; Peer &gt; &amp;&amp;peer, int dataCount)</div><div class="ttdef"><b>Definition</b> <a href="InboundLedger_8cpp_source.html#l01192">InboundLedger.cpp:1192</a></div></div>
<div class="ttc" id="ato_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a></div><div class="ttdeci">T to_string(T... args)</div></div>
<div class="ttc" id="atuple_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/tuple.html">std::tuple</a></div></div>
<div class="ttc" id="aunique_lock_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/thread/unique_lock.html">std::unique_lock&lt; std::recursive_mutex &gt;</a></div></div>