This commit is contained in:
manojsdoshi
2022-03-11 23:48:43 +00:00
parent 33ee5a435d
commit 5f48f33f84
1856 changed files with 55639 additions and 53603 deletions

View File

@@ -361,13 +361,13 @@ $(function() {
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; }</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160;}</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; </div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a6978a86f8322bbd572ea34189beb00e5"> 294</a></span>&#160;SHAMap::walkMapParallel(</div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#aa0fcb9d89a9f72e549c92cd38b92561b"> 294</a></span>&#160;SHAMap::walkMapParallel(</div>
<div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;SHAMapMissingNode&gt;</a>&amp; missingNodes,</div>
<div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="keywordtype">int</span> maxMissing)<span class="keyword"> const</span></div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <span class="keywordflow">if</span> (!root_-&gt;isInner()) <span class="comment">// root_ is only node, and we have it</span></div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">return</span>;</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; </div>
<div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160; <span class="keyword">using</span> StackEntry = <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SHAMapInnerNode&gt;</a>;</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/array.html">std::array&lt;std::shared_ptr&lt;SHAMapTreeNode&gt;</a>, 16&gt; topChildren;</div>
@@ -382,80 +382,102 @@ $(function() {
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; }</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;std::thread&gt;</a> workers;</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; workers.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">reserve</a>(16);</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; </div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/array.html">std::array&lt;std::stack&lt;StackEntry, std::vector&lt;StackEntry&gt;</a>&gt;, 16&gt; nodeStacks;</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;SHAMapMissingNode&gt;</a> exceptions;</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; exceptions.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">reserve</a>(16);</div>
<div class="line"><a name="l00316"></a><span class="lineno"> 316</span>&#160; </div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <span class="comment">// This mutex is used inside the worker threads to protect `missingNodes`</span></div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <span class="comment">// and `maxMissing` from race conditions</span></div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/mutex.html">std::mutex</a> m;</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; </div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> rootChildIndex = 0; rootChildIndex &lt; 16; ++rootChildIndex)</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; {</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; child = topChildren[rootChildIndex];</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="keywordflow">if</span> (!child || !child-&gt;isInner())</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; </div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; nodeStacks[rootChildIndex].push(</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; std::static_pointer_cast&lt;SHAMapInnerNode&gt;(child));</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; </div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; JLOG(journal_.debug()) &lt;&lt; <span class="stringliteral">&quot;starting worker &quot;</span> &lt;&lt; rootChildIndex;</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; workers.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/thread.html">std::thread</a>(</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; [&amp;m, &amp;missingNodes, &amp;maxMissing, <span class="keyword">this</span>](</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack.html">std::stack</a>&lt;StackEntry, <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;StackEntry&gt;</a>&gt; nodeStack) {</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; <span class="keywordflow">while</span> (!nodeStack.empty())</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; {</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; std::shared_ptr&lt;SHAMapInnerNode&gt; node =</div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; std::move(nodeStack.top());</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; assert(node);</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; nodeStack.pop();</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; </div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; for (int i = 0; i &lt; 16; ++i)</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; {</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; if (node-&gt;isEmptyBranch(i))</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; continue;</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; std::shared_ptr&lt;SHAMapTreeNode&gt; nextNode =</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; descendNoStore(node, i);</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; </div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; if (nextNode)</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; {</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; if (nextNode-&gt;isInner())</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; nodeStack.push(</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; std::static_pointer_cast&lt;SHAMapInnerNode&gt;(</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; nextNode));</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; }</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; else</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; {</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; std::lock_guard l{m};</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; missingNodes.emplace_back(</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; type_, node-&gt;getChildHash(i));</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; if (--maxMissing &lt;= 0)</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; return;</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; }</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; }</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; }</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; },</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; std::move(nodeStacks[rootChildIndex])));</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; </div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">for</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/thread.html">std::thread</a>&amp; worker : workers)</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; worker.<a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/thread/join.html">join</a>();</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160;}</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; </div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;} <span class="comment">// namespace ripple</span></div>
<div class="line"><a name="l00317"></a><span class="lineno"> 317</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/array.html">std::array&lt;std::stack&lt;StackEntry, std::vector&lt;StackEntry&gt;</a>&gt;, 16&gt; nodeStacks;</div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; </div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; <span class="comment">// This mutex is used inside the worker threads to protect `missingNodes`</span></div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; <span class="comment">// and `maxMissing` from race conditions</span></div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/mutex.html">std::mutex</a> m;</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; </div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> rootChildIndex = 0; rootChildIndex &lt; 16; ++rootChildIndex)</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; {</div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span>&amp; child = topChildren[rootChildIndex];</div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; <span class="keywordflow">if</span> (!child || !child-&gt;isInner())</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; <span class="keywordflow">continue</span>;</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; </div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; nodeStacks[rootChildIndex].push(</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; std::static_pointer_cast&lt;SHAMapInnerNode&gt;(child));</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160; </div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; JLOG(journal_.debug()) &lt;&lt; <span class="stringliteral">&quot;starting worker &quot;</span> &lt;&lt; rootChildIndex;</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; workers.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/thread.html">std::thread</a>(</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; [&amp;m, &amp;missingNodes, &amp;maxMissing, &amp;exceptions, <span class="keyword">this</span>](</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack.html">std::stack</a>&lt;StackEntry, <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;StackEntry&gt;</a>&gt; nodeStack) {</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160; <span class="keywordflow">try</span></div>
<div class="line"><a name="l00337"></a><span class="lineno"> 337</span>&#160; {</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <span class="keywordflow">while</span> (!nodeStack.empty())</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; {</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160; std::shared_ptr&lt;SHAMapInnerNode&gt; node =</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; std::move(nodeStack.top());</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; assert(node);</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160; nodeStack.pop();</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; </div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; for (int i = 0; i &lt; 16; ++i)</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; {</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160; if (node-&gt;isEmptyBranch(i))</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; continue;</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; std::shared_ptr&lt;SHAMapTreeNode&gt; nextNode =</div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; descendNoStore(node, i);</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160; </div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; if (nextNode)</div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; {</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; if (nextNode-&gt;isInner())</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; nodeStack.push(std::static_pointer_cast&lt;</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; SHAMapInnerNode&gt;(nextNode));</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; }</div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; else</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; {</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; std::lock_guard l{m};</div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; missingNodes.emplace_back(</div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; type_, node-&gt;getChildHash(i));</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; if (--maxMissing &lt;= 0)</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; return;</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; }</div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; }</div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; }</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; }</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; <span class="keywordflow">catch</span> (<a class="code" href="classripple_1_1SHAMapMissingNode.html">SHAMapMissingNode</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; {</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> l(m);</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; exceptions.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(e);</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; }</div>
<div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; },</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; std::move(nodeStacks[rootChildIndex])));</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; }</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; </div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <span class="keywordflow">for</span> (<a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/thread.html">std::thread</a>&amp; worker : workers)</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; worker.<a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/thread/join.html">join</a>();</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; </div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a> l(m);</div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; <span class="keywordflow">if</span> (exceptions.empty())</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/io/basic_stringstream.html">std::stringstream</a> ss;</div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; ss &lt;&lt; <span class="stringliteral">&quot;Exception(s) in ledger load: &quot;</span>;</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; e : exceptions)</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; ss &lt;&lt; e.what() &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; JLOG(journal_.error()) &lt;&lt; ss.<a class="codeRef" href="http://en.cppreference.com/w/cpp/io/basic_stringstream/str.html">str</a>();</div>
<div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160;}</div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; </div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;} <span class="comment">// namespace ripple</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="aclassripple_1_1SHAMap_html_aa36f13285448ce66cdc04a0b7f4d8af7"><div class="ttname"><a href="classripple_1_1SHAMap.html#aa36f13285448ce66cdc04a0b7f4d8af7">ripple::SHAMap::isValid</a></div><div class="ttdeci">bool isValid() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00584">SHAMap.h:584</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_aa36f13285448ce66cdc04a0b7f4d8af7"><div class="ttname"><a href="classripple_1_1SHAMap.html#aa36f13285448ce66cdc04a0b7f4d8af7">ripple::SHAMap::isValid</a></div><div class="ttdeci">bool isValid() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00611">SHAMap.h:611</a></div></div>
<div class="ttc" id="ashared_ptr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a></div><div class="ttdoc">STL class.</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#l00783">SHAMap.cpp:783</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#l00845">SHAMap.cpp:845</a></div></div>
<div class="ttc" id="apair_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair</a></div></div>
<div class="ttc" id="areserve_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">std::vector::reserve</a></div><div class="ttdeci">T reserve(T... args)</div></div>
<div class="ttc" id="avector_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/vector.html">vector</a></div></div>
<div class="ttc" id="astack_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/stack.html">stack</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a122cf539ce917e7a322cfb41c8db3f57"><div class="ttname"><a href="classripple_1_1SHAMap.html#a122cf539ce917e7a322cfb41c8db3f57">ripple::SHAMap::peekItem</a></div><div class="ttdeci">std::shared_ptr&lt; SHAMapItem const &gt; const &amp; peekItem(uint256 const &amp;id) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00561">SHAMap.cpp:561</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a122cf539ce917e7a322cfb41c8db3f57"><div class="ttname"><a href="classripple_1_1SHAMap.html#a122cf539ce917e7a322cfb41c8db3f57">ripple::SHAMap::peekItem</a></div><div class="ttdeci">std::shared_ptr&lt; SHAMapItem const &gt; const &amp; peekItem(uint256 const &amp;id) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00586">SHAMap.cpp:586</a></div></div>
<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 class="ttdoc">STL class.</div></div>
<div class="ttc" id="alock_guard_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/thread/lock_guard.html">std::lock_guard</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="aclassripple_1_1SHAMapTreeNode_html_a7aff7622ccd8ffd0be9367518b39436e"><div class="ttname"><a href="classripple_1_1SHAMapTreeNode.html#a7aff7622ccd8ffd0be9367518b39436e">ripple::SHAMapTreeNode::isInner</a></div><div class="ttdeci">virtual bool isInner() const =0</div><div class="ttdoc">Determines if this is an inner node.</div></div>
<div class="ttc" id="aclassripple_1_1SHAMapLeafNode_html"><div class="ttname"><a href="classripple_1_1SHAMapLeafNode.html">ripple::SHAMapLeafNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SHAMapLeafNode_8h_source.html#l00032">SHAMapLeafNode.h:32</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapMissingNode_html"><div class="ttname"><a href="classripple_1_1SHAMapMissingNode.html">ripple::SHAMapMissingNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SHAMapMissingNode_8h_source.html#l00055">SHAMapMissingNode.h:55</a></div></div>
<div class="ttc" id="apush_back_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">std::vector::push_back</a></div><div class="ttdeci">T push_back(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1base__uint_html"><div class="ttname"><a href="classripple_1_1base__uint.html">ripple::base_uint&lt; 256 &gt;</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_af97eaa11f0ba83945729dc0f5af2b193"><div class="ttname"><a href="classripple_1_1SHAMap.html#af97eaa11f0ba83945729dc0f5af2b193">ripple::SHAMap::DeltaRef</a></div><div class="ttdeci">std::pair&lt; std::shared_ptr&lt; SHAMapItem const &gt; const &amp;, std::shared_ptr&lt; SHAMapItem const &gt; const &amp; &gt; DeltaRef</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00351">SHAMap.h:351</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_af97eaa11f0ba83945729dc0f5af2b193"><div class="ttname"><a href="classripple_1_1SHAMap.html#af97eaa11f0ba83945729dc0f5af2b193">ripple::SHAMap::DeltaRef</a></div><div class="ttdeci">std::pair&lt; std::shared_ptr&lt; SHAMapItem const &gt; const &amp;, std::shared_ptr&lt; SHAMapItem const &gt; const &amp; &gt; DeltaRef</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00359">SHAMap.h:359</a></div></div>
<div class="ttc" id="athread_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/thread/thread.html">std::thread</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="aclassripple_1_1SHAMapInnerNode_html"><div class="ttname"><a href="classripple_1_1SHAMapInnerNode.html">ripple::SHAMapInnerNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SHAMapInnerNode_8h_source.html#l00039">SHAMapInnerNode.h:39</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#l00095">SHAMap.h:95</a></div></div>
@@ -471,6 +493,7 @@ $(function() {
<div class="ttc" id="aempty_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/stack/empty.html">std::stack::empty</a></div><div class="ttdeci">T empty(T... args)</div></div>
<div class="ttc" id="apush_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/stack/push.html">std::stack::push</a></div><div class="ttdeci">T push(T... args)</div></div>
<div class="ttc" id="amutex_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/thread/mutex.html">std::mutex</a></div><div class="ttdoc">STL class.</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="amake_pair_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a></div><div class="ttdeci">T make_pair(T... args)</div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_ae328c6d5cac6d3aea7054a9c7d2ffb5b"><div class="ttname"><a href="classripple_1_1SHAMap.html#ae328c6d5cac6d3aea7054a9c7d2ffb5b">ripple::SHAMap::walkBranch</a></div><div class="ttdeci">bool walkBranch(SHAMapTreeNode *node, std::shared_ptr&lt; SHAMapItem const &gt; const &amp;otherMapItem, bool isFirstMap, Delta &amp;differences, int &amp;maxCount) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapDelta_8cpp_source.html#l00038">SHAMapDelta.cpp:38</a></div></div>
<div class="ttc" id="ajoin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/thread/thread/join.html">std::thread::join</a></div><div class="ttdeci">T join(T... args)</div></div>