This commit is contained in:
manojsdoshi
2020-05-27 16:44:54 +00:00
parent 755b13a414
commit 9facc04fc4
1845 changed files with 60002 additions and 55230 deletions

View File

@@ -552,340 +552,342 @@ $(function() {
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/tuple/tie.html">std::tie</a>(node, nodeID, depth) = stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>();</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/pop.html">pop</a>();</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; </div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; <span class="comment">// Add this node to the reply</span></div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <a class="code" href="classripple_1_1Serializer.html">Serializer</a> s;</div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; node-&gt;<a class="code" href="classripple_1_1Serializer.html#a8d8774ca938809be8323d3957a62af90">addRaw</a>(s, <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36da82251cdf5d561efb6b1838672e116253">snfWIRE</a>);</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; nodeIDs.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(nodeID);</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; rawNodes.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(std::move(s.<a class="code" href="classripple_1_1Serializer.html#a5f8c275ba7cfa80e56671b6935e29242">peekData</a>()));</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; </div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <span class="keywordflow">if</span> (node-&gt;isInner())</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; {</div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="comment">// We descend inner nodes with only a single child</span></div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; <span class="comment">// without decrementing the depth</span></div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="keyword">auto</span> inner = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(node);</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="keywordtype">int</span> bc = inner-&gt;<a class="code" href="classripple_1_1SHAMapInnerNode.html#aec522cbc8cfb50ed87ebf8c634a40276">getBranchCount</a>();</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keywordflow">if</span> ((depth &gt; 0) || (bc == 1))</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; {</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="comment">// We need to process this node&#39;s children</span></div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 16; ++i)</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; {</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">if</span> (!inner-&gt;isEmptyBranch(i))</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; {</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> childNode = <a class="code" href="classripple_1_1SHAMap.html#a482d6fba903e5c0f6c22af7017c21de3">descendThrow</a>(inner, i);</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a> <span class="keyword">const</span> childID = nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a2562d5ab2eaf9cacfec84caa41590e99">getChildNodeID</a>(i);</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; </div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <span class="keywordflow">if</span> (childNode-&gt;isInner() &amp;&amp; ((depth &gt; 1) || (bc == 1)))</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; {</div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="comment">// If there&#39;s more than one child, reduce the depth</span></div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; <span class="comment">// If only one child, follow the chain</span></div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/emplace.html">emplace</a>(</div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; childNode,</div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; childID,</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; (bc &gt; 1) ? (depth - 1) : depth);</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; }</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (childNode-&gt;isInner() || fatLeaves)</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; {</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="comment">// Just include this node</span></div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; <a class="code" href="classripple_1_1Serializer.html">Serializer</a> ns;</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; childNode-&gt;<a class="code" href="classripple_1_1Serializer.html#a8d8774ca938809be8323d3957a62af90">addRaw</a>(ns, <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36da82251cdf5d561efb6b1838672e116253">snfWIRE</a>);</div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; nodeIDs.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(childID);</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; rawNodes.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(std::move(ns.<a class="code" href="classripple_1_1Serializer.html#a5f8c275ba7cfa80e56671b6935e29242">peekData</a>()));</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; }</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; }</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; }</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; }</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; </div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160;}</div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; </div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00537"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a168ae55863f45d08d4e789b01626f71b"> 537</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#a168ae55863f45d08d4e789b01626f71b">SHAMap::getRootNode</a>(<a class="code" href="classripple_1_1Serializer.html">Serializer</a>&amp; s, <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36d">SHANodeFormat</a> format)<span class="keyword"> const</span></div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00539"></a><span class="lineno"> 539</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;addRaw(s, format);</div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160;}</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; </div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;<a class="code" href="classripple_1_1SHAMapAddNode.html">SHAMapAddNode</a></div>
<div class="line"><a name="l00544"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ad5534c8a5bd411c5d83bb5efcdec6d64"> 544</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#ad5534c8a5bd411c5d83bb5efcdec6d64">SHAMap::addRootNode</a>(</div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160; <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>&amp; hash,</div>
<div class="line"><a name="l00546"></a><span class="lineno"> 546</span>&#160; <a class="code" href="classripple_1_1Slice.html">Slice</a> <span class="keyword">const</span>&amp; rootNode,</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36d">SHANodeFormat</a> format,</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="classripple_1_1SHAMapSyncFilter.html">SHAMapSyncFilter</a>* filter)</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160;{</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <span class="comment">// we already have a root_ node</span></div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;getNodeHash().isNonZero())</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; {</div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;got root node, already have one&quot;</span>;</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; assert(<a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;getNodeHash() == hash);</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#a4a8fc91d181542add6241a4f46f49970">SHAMapAddNode::duplicate</a>();</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; }</div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; </div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; assert(<a class="code" href="classripple_1_1SHAMap.html#ad131b2923636ee160a9f88991bce5549">seq_</a> &gt;= 1);</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; <span class="keyword">auto</span> node = <a class="code" href="classripple_1_1SHAMapAbstractNode.html#ab303977d6b32547eb9cb12bb203b62fe">SHAMapAbstractNode::make</a>(</div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; rootNode, 0, format, <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a>{}, <span class="keyword">false</span>, <a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#af25466995d0a740ffcf80cd8a59cf0c9">journal</a>());</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keywordflow">if</span> (!node || !node-&gt;isValid() || node-&gt;getNodeHash() != hash)</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#ac8b13f949d0715320fec511a17e48b2e">SHAMapAddNode::invalid</a>();</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; </div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">backed_</a>)</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a1cf2381d0c4757e050ba9c11f5a0ccd3">canonicalize</a>(hash, node);</div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; </div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a> = node;</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160; {</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="comment">// Add this node to the reply</span></div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <a class="code" href="classripple_1_1Serializer.html">Serializer</a> s;</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; node-&gt;<a class="code" href="classripple_1_1Serializer.html#a8d8774ca938809be8323d3957a62af90">addRaw</a>(s, <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36da82251cdf5d561efb6b1838672e116253">snfWIRE</a>);</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; nodeIDs.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(nodeID);</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; rawNodes.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(std::move(s.<a class="code" href="classripple_1_1Serializer.html#a6d7436e5990cb278bd924cef9396df3c">modData</a>()));</div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; }</div>
<div class="line"><a name="l00495"></a><span class="lineno"> 495</span>&#160; </div>
<div class="line"><a name="l00496"></a><span class="lineno"> 496</span>&#160; <span class="keywordflow">if</span> (node-&gt;isInner())</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; {</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; <span class="comment">// We descend inner nodes with only a single child</span></div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <span class="comment">// without decrementing the depth</span></div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160; <span class="keyword">auto</span> inner = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(node);</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160; <span class="keywordtype">int</span> bc = inner-&gt;<a class="code" href="classripple_1_1SHAMapInnerNode.html#aec522cbc8cfb50ed87ebf8c634a40276">getBranchCount</a>();</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160; <span class="keywordflow">if</span> ((depth &gt; 0) || (bc == 1))</div>
<div class="line"><a name="l00503"></a><span class="lineno"> 503</span>&#160; {</div>
<div class="line"><a name="l00504"></a><span class="lineno"> 504</span>&#160; <span class="comment">// We need to process this node&#39;s children</span></div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 16; ++i)</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; {</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <span class="keywordflow">if</span> (!inner-&gt;isEmptyBranch(i))</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; {</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> childNode = <a class="code" href="classripple_1_1SHAMap.html#a482d6fba903e5c0f6c22af7017c21de3">descendThrow</a>(inner, i);</div>
<div class="line"><a name="l00510"></a><span class="lineno"> 510</span>&#160; <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a> <span class="keyword">const</span> childID = nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a2562d5ab2eaf9cacfec84caa41590e99">getChildNodeID</a>(i);</div>
<div class="line"><a name="l00511"></a><span class="lineno"> 511</span>&#160; </div>
<div class="line"><a name="l00512"></a><span class="lineno"> 512</span>&#160; <span class="keywordflow">if</span> (childNode-&gt;isInner() &amp;&amp; ((depth &gt; 1) || (bc == 1)))</div>
<div class="line"><a name="l00513"></a><span class="lineno"> 513</span>&#160; {</div>
<div class="line"><a name="l00514"></a><span class="lineno"> 514</span>&#160; <span class="comment">// If there&#39;s more than one child, reduce the depth</span></div>
<div class="line"><a name="l00515"></a><span class="lineno"> 515</span>&#160; <span class="comment">// If only one child, follow the chain</span></div>
<div class="line"><a name="l00516"></a><span class="lineno"> 516</span>&#160; stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/emplace.html">emplace</a>(</div>
<div class="line"><a name="l00517"></a><span class="lineno"> 517</span>&#160; childNode,</div>
<div class="line"><a name="l00518"></a><span class="lineno"> 518</span>&#160; childID,</div>
<div class="line"><a name="l00519"></a><span class="lineno"> 519</span>&#160; (bc &gt; 1) ? (depth - 1) : depth);</div>
<div class="line"><a name="l00520"></a><span class="lineno"> 520</span>&#160; }</div>
<div class="line"><a name="l00521"></a><span class="lineno"> 521</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (childNode-&gt;isInner() || fatLeaves)</div>
<div class="line"><a name="l00522"></a><span class="lineno"> 522</span>&#160; {</div>
<div class="line"><a name="l00523"></a><span class="lineno"> 523</span>&#160; <span class="comment">// Just include this node</span></div>
<div class="line"><a name="l00524"></a><span class="lineno"> 524</span>&#160; <a class="code" href="classripple_1_1Serializer.html">Serializer</a> ns;</div>
<div class="line"><a name="l00525"></a><span class="lineno"> 525</span>&#160; childNode-&gt;<a class="code" href="classripple_1_1Serializer.html#a8d8774ca938809be8323d3957a62af90">addRaw</a>(ns, <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36da82251cdf5d561efb6b1838672e116253">snfWIRE</a>);</div>
<div class="line"><a name="l00526"></a><span class="lineno"> 526</span>&#160; nodeIDs.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(childID);</div>
<div class="line"><a name="l00527"></a><span class="lineno"> 527</span>&#160; rawNodes.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector/push_back.html">push_back</a>(std::move(ns.<a class="code" href="classripple_1_1Serializer.html#a6d7436e5990cb278bd924cef9396df3c">modData</a>()));</div>
<div class="line"><a name="l00528"></a><span class="lineno"> 528</span>&#160; }</div>
<div class="line"><a name="l00529"></a><span class="lineno"> 529</span>&#160; }</div>
<div class="line"><a name="l00530"></a><span class="lineno"> 530</span>&#160; }</div>
<div class="line"><a name="l00531"></a><span class="lineno"> 531</span>&#160; }</div>
<div class="line"><a name="l00532"></a><span class="lineno"> 532</span>&#160; }</div>
<div class="line"><a name="l00533"></a><span class="lineno"> 533</span>&#160; }</div>
<div class="line"><a name="l00534"></a><span class="lineno"> 534</span>&#160; </div>
<div class="line"><a name="l00535"></a><span class="lineno"> 535</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00536"></a><span class="lineno"> 536</span>&#160;}</div>
<div class="line"><a name="l00537"></a><span class="lineno"> 537</span>&#160; </div>
<div class="line"><a name="l00538"></a><span class="lineno"> 538</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00539"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a168ae55863f45d08d4e789b01626f71b"> 539</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#a168ae55863f45d08d4e789b01626f71b">SHAMap::getRootNode</a>(<a class="code" href="classripple_1_1Serializer.html">Serializer</a>&amp; s, <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36d">SHANodeFormat</a> format)<span class="keyword"> const</span></div>
<div class="line"><a name="l00540"></a><span class="lineno"> 540</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00541"></a><span class="lineno"> 541</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;addRaw(s, format);</div>
<div class="line"><a name="l00542"></a><span class="lineno"> 542</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00543"></a><span class="lineno"> 543</span>&#160;}</div>
<div class="line"><a name="l00544"></a><span class="lineno"> 544</span>&#160; </div>
<div class="line"><a name="l00545"></a><span class="lineno"> 545</span>&#160;<a class="code" href="classripple_1_1SHAMapAddNode.html">SHAMapAddNode</a></div>
<div class="line"><a name="l00546"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ad5534c8a5bd411c5d83bb5efcdec6d64"> 546</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#ad5534c8a5bd411c5d83bb5efcdec6d64">SHAMap::addRootNode</a>(</div>
<div class="line"><a name="l00547"></a><span class="lineno"> 547</span>&#160; <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>&amp; hash,</div>
<div class="line"><a name="l00548"></a><span class="lineno"> 548</span>&#160; <a class="code" href="classripple_1_1Slice.html">Slice</a> <span class="keyword">const</span>&amp; rootNode,</div>
<div class="line"><a name="l00549"></a><span class="lineno"> 549</span>&#160; <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36d">SHANodeFormat</a> format,</div>
<div class="line"><a name="l00550"></a><span class="lineno"> 550</span>&#160; <a class="code" href="classripple_1_1SHAMapSyncFilter.html">SHAMapSyncFilter</a>* filter)</div>
<div class="line"><a name="l00551"></a><span class="lineno"> 551</span>&#160;{</div>
<div class="line"><a name="l00552"></a><span class="lineno"> 552</span>&#160; <span class="comment">// we already have a root_ node</span></div>
<div class="line"><a name="l00553"></a><span class="lineno"> 553</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;getNodeHash().isNonZero())</div>
<div class="line"><a name="l00554"></a><span class="lineno"> 554</span>&#160; {</div>
<div class="line"><a name="l00555"></a><span class="lineno"> 555</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;got root node, already have one&quot;</span>;</div>
<div class="line"><a name="l00556"></a><span class="lineno"> 556</span>&#160; assert(<a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;getNodeHash() == hash);</div>
<div class="line"><a name="l00557"></a><span class="lineno"> 557</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#a4a8fc91d181542add6241a4f46f49970">SHAMapAddNode::duplicate</a>();</div>
<div class="line"><a name="l00558"></a><span class="lineno"> 558</span>&#160; }</div>
<div class="line"><a name="l00559"></a><span class="lineno"> 559</span>&#160; </div>
<div class="line"><a name="l00560"></a><span class="lineno"> 560</span>&#160; assert(<a class="code" href="classripple_1_1SHAMap.html#ad131b2923636ee160a9f88991bce5549">seq_</a> &gt;= 1);</div>
<div class="line"><a name="l00561"></a><span class="lineno"> 561</span>&#160; <span class="keyword">auto</span> node = <a class="code" href="classripple_1_1SHAMapAbstractNode.html#ab303977d6b32547eb9cb12bb203b62fe">SHAMapAbstractNode::make</a>(</div>
<div class="line"><a name="l00562"></a><span class="lineno"> 562</span>&#160; rootNode, 0, format, <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a>{}, <span class="keyword">false</span>, <a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#af25466995d0a740ffcf80cd8a59cf0c9">journal</a>());</div>
<div class="line"><a name="l00563"></a><span class="lineno"> 563</span>&#160; <span class="keywordflow">if</span> (!node || !node-&gt;isValid() || node-&gt;getNodeHash() != hash)</div>
<div class="line"><a name="l00564"></a><span class="lineno"> 564</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#ac8b13f949d0715320fec511a17e48b2e">SHAMapAddNode::invalid</a>();</div>
<div class="line"><a name="l00565"></a><span class="lineno"> 565</span>&#160; </div>
<div class="line"><a name="l00566"></a><span class="lineno"> 566</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">backed_</a>)</div>
<div class="line"><a name="l00567"></a><span class="lineno"> 567</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a1cf2381d0c4757e050ba9c11f5a0ccd3">canonicalize</a>(hash, node);</div>
<div class="line"><a name="l00568"></a><span class="lineno"> 568</span>&#160; </div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;isLeaf())</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a5ae13bc823d7e3cbdc4d784a04f29edb">clearSynching</a>();</div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; </div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <span class="keywordflow">if</span> (filter)</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; {</div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <a class="code" href="classripple_1_1Serializer.html">Serializer</a> s;</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;addRaw(s, <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36dac04013643fe82a69b008807f1a255775">snfPREFIX</a>);</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; filter-&gt;<a class="code" href="classripple_1_1SHAMapSyncFilter.html#acdf3556e82ae8ac3b1b40cc66f692f08">gotNode</a>(</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <span class="keyword">false</span>,</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;getNodeHash(),</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#acbedaf0be7acd2816e01be821fdc4697">ledgerSeq_</a>,</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; std::move(s.<a class="code" href="classripple_1_1Serializer.html#a6d7436e5990cb278bd924cef9396df3c">modData</a>()),</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;getType());</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; }</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; </div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#af1a757ef4066613d2c94f6b9db57f26f">SHAMapAddNode::useful</a>();</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160;}</div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; </div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;<a class="code" href="classripple_1_1SHAMapAddNode.html">SHAMapAddNode</a></div>
<div class="line"><a name="l00588"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a5c78c5b45614fa7b5f7ecebbc7185944"> 588</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#a5c78c5b45614fa7b5f7ecebbc7185944">SHAMap::addKnownNode</a>(</div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160; <span class="keyword">const</span> <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a>&amp; node,</div>
<div class="line"><a name="l00590"></a><span class="lineno"> 590</span>&#160; <a class="code" href="classripple_1_1Slice.html">Slice</a> <span class="keyword">const</span>&amp; rawNode,</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <a class="code" href="classripple_1_1SHAMapSyncFilter.html">SHAMapSyncFilter</a>* filter)</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160;{</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <span class="comment">// return value: true=okay, false=error</span></div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160; assert(!node.<a class="code" href="classripple_1_1SHAMapNodeID.html#a205ce1fb183881d67a7b171533141c6b">isRoot</a>());</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; </div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classripple_1_1SHAMap.html#a4c50953c5e1c720f925deca920e8aa64">isSynching</a>())</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; {</div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;AddKnownNode while not synching&quot;</span>;</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#a4a8fc91d181542add6241a4f46f49970">SHAMapAddNode::duplicate</a>();</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; }</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; </div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> generation = <a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#a6a2a434710c6ccde390fcca5fca11fa8">fullbelow</a>().<a class="code" href="classripple_1_1detail_1_1BasicFullBelowCache.html#a24dcba9ab4a873d9d002a903585fff45">getGeneration</a>();</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; <span class="keyword">auto</span> newNode = <a class="code" href="classripple_1_1SHAMapAbstractNode.html#ab303977d6b32547eb9cb12bb203b62fe">SHAMapAbstractNode::make</a>(</div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; rawNode, 0, <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36da82251cdf5d561efb6b1838672e116253">snfWIRE</a>, <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a>{}, <span class="keyword">false</span>, <a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#af25466995d0a740ffcf80cd8a59cf0c9">journal</a>(), node);</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a> iNodeID;</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; <span class="keyword">auto</span> iNode = <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>.get();</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; </div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keywordflow">while</span> (iNode-&gt;isInner() &amp;&amp;</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; !<span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(iNode)-&gt;<a class="code" href="classripple_1_1SHAMapInnerNode.html#a597b4db5c84297776d2e8ebdbe9e1b6f">isFullBelow</a>(generation) &amp;&amp;</div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; (iNodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a37b22f9b8d2286d02ecc7ee047b4ed82">getDepth</a>() &lt; node.<a class="code" href="classripple_1_1SHAMapNodeID.html#a37b22f9b8d2286d02ecc7ee047b4ed82">getDepth</a>()))</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; {</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; <span class="keywordtype">int</span> branch = iNodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a7a838e3981af9efdf9054659942ff5e4">selectBranch</a>(node.<a class="code" href="classripple_1_1SHAMapNodeID.html#a1b49f13ef901549ef1d5bceb94ed4753">getNodeID</a>());</div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; assert(branch &gt;= 0);</div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keyword">auto</span> inner = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(iNode);</div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; <span class="keywordflow">if</span> (inner-&gt;isEmptyBranch(branch))</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; {</div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>()) &lt;&lt; <span class="stringliteral">&quot;Add known node for empty branch&quot;</span> &lt;&lt; node;</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#ac8b13f949d0715320fec511a17e48b2e">SHAMapAddNode::invalid</a>();</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; }</div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; </div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; <span class="keyword">auto</span> childHash = inner-&gt;getChildHash(branch);</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#a6a2a434710c6ccde390fcca5fca11fa8">fullbelow</a>().<a class="code" href="classripple_1_1detail_1_1BasicFullBelowCache.html#a5e207e81c6878a8d26e48c8fdaad5859">touch_if_exists</a>(childHash.as_uint256()))</div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#a4a8fc91d181542add6241a4f46f49970">SHAMapAddNode::duplicate</a>();</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; </div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keyword">auto</span> prevNode = inner;</div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/tuple/tie.html">std::tie</a>(iNode, iNodeID) = <a class="code" href="classripple_1_1SHAMap.html#a96fda7c51f94b0acc3a18081141efaad">descend</a>(inner, iNodeID, branch, filter);</div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; </div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <span class="keywordflow">if</span> (iNode == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; {</div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordflow">if</span> (!newNode || !newNode-&gt;isValid() ||</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; childHash != newNode-&gt;getNodeHash())</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; {</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>()) &lt;&lt; <span class="stringliteral">&quot;Corrupt node received&quot;</span>;</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#ac8b13f949d0715320fec511a17e48b2e">SHAMapAddNode::invalid</a>();</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; }</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; </div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; <span class="keywordflow">if</span> (!newNode-&gt;isInBounds(iNodeID))</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; {</div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="comment">// Map is provably invalid</span></div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a50ed233b23a5065f500249cf23f1a183">state_</a> = <a class="code" href="namespaceripple.html#a49003667116eb98c6e966f36e5dd1c77a4bbb8f967da6d1a610596d7257179c2b">SHAMapState::Invalid</a>;</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#af1a757ef4066613d2c94f6b9db57f26f">SHAMapAddNode::useful</a>();</div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; }</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; </div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; <span class="keywordflow">if</span> (iNodeID != node)</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; {</div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="comment">// Either this node is broken or we didn&#39;t request it (yet)</span></div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>()) &lt;&lt; <span class="stringliteral">&quot;unable to hook node &quot;</span> &lt;&lt; node;</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) &lt;&lt; <span class="stringliteral">&quot; stuck at &quot;</span> &lt;&lt; iNodeID;</div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) &lt;&lt; <span class="stringliteral">&quot;got depth=&quot;</span> &lt;&lt; node.<a class="code" href="classripple_1_1SHAMapNodeID.html#a37b22f9b8d2286d02ecc7ee047b4ed82">getDepth</a>()</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; &lt;&lt; <span class="stringliteral">&quot;, walked to= &quot;</span> &lt;&lt; iNodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a37b22f9b8d2286d02ecc7ee047b4ed82">getDepth</a>();</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#af1a757ef4066613d2c94f6b9db57f26f">SHAMapAddNode::useful</a>();</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; }</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; </div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">backed_</a>)</div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a1cf2381d0c4757e050ba9c11f5a0ccd3">canonicalize</a>(childHash, newNode);</div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; </div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; newNode = prevNode-&gt;canonicalizeChild(branch, std::move(newNode));</div>
<div class="line"><a name="l00569"></a><span class="lineno"> 569</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a> = node;</div>
<div class="line"><a name="l00570"></a><span class="lineno"> 570</span>&#160; </div>
<div class="line"><a name="l00571"></a><span class="lineno"> 571</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;isLeaf())</div>
<div class="line"><a name="l00572"></a><span class="lineno"> 572</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a5ae13bc823d7e3cbdc4d784a04f29edb">clearSynching</a>();</div>
<div class="line"><a name="l00573"></a><span class="lineno"> 573</span>&#160; </div>
<div class="line"><a name="l00574"></a><span class="lineno"> 574</span>&#160; <span class="keywordflow">if</span> (filter)</div>
<div class="line"><a name="l00575"></a><span class="lineno"> 575</span>&#160; {</div>
<div class="line"><a name="l00576"></a><span class="lineno"> 576</span>&#160; <a class="code" href="classripple_1_1Serializer.html">Serializer</a> s;</div>
<div class="line"><a name="l00577"></a><span class="lineno"> 577</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;addRaw(s, <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36dac04013643fe82a69b008807f1a255775">snfPREFIX</a>);</div>
<div class="line"><a name="l00578"></a><span class="lineno"> 578</span>&#160; filter-&gt;<a class="code" href="classripple_1_1SHAMapSyncFilter.html#acdf3556e82ae8ac3b1b40cc66f692f08">gotNode</a>(</div>
<div class="line"><a name="l00579"></a><span class="lineno"> 579</span>&#160; <span class="keyword">false</span>,</div>
<div class="line"><a name="l00580"></a><span class="lineno"> 580</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;getNodeHash(),</div>
<div class="line"><a name="l00581"></a><span class="lineno"> 581</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#acbedaf0be7acd2816e01be821fdc4697">ledgerSeq_</a>,</div>
<div class="line"><a name="l00582"></a><span class="lineno"> 582</span>&#160; std::move(s.<a class="code" href="classripple_1_1Serializer.html#a6d7436e5990cb278bd924cef9396df3c">modData</a>()),</div>
<div class="line"><a name="l00583"></a><span class="lineno"> 583</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>-&gt;getType());</div>
<div class="line"><a name="l00584"></a><span class="lineno"> 584</span>&#160; }</div>
<div class="line"><a name="l00585"></a><span class="lineno"> 585</span>&#160; </div>
<div class="line"><a name="l00586"></a><span class="lineno"> 586</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#af1a757ef4066613d2c94f6b9db57f26f">SHAMapAddNode::useful</a>();</div>
<div class="line"><a name="l00587"></a><span class="lineno"> 587</span>&#160;}</div>
<div class="line"><a name="l00588"></a><span class="lineno"> 588</span>&#160; </div>
<div class="line"><a name="l00589"></a><span class="lineno"> 589</span>&#160;<a class="code" href="classripple_1_1SHAMapAddNode.html">SHAMapAddNode</a></div>
<div class="line"><a name="l00590"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a5c78c5b45614fa7b5f7ecebbc7185944"> 590</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#a5c78c5b45614fa7b5f7ecebbc7185944">SHAMap::addKnownNode</a>(</div>
<div class="line"><a name="l00591"></a><span class="lineno"> 591</span>&#160; <span class="keyword">const</span> <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a>&amp; node,</div>
<div class="line"><a name="l00592"></a><span class="lineno"> 592</span>&#160; <a class="code" href="classripple_1_1Slice.html">Slice</a> <span class="keyword">const</span>&amp; rawNode,</div>
<div class="line"><a name="l00593"></a><span class="lineno"> 593</span>&#160; <a class="code" href="classripple_1_1SHAMapSyncFilter.html">SHAMapSyncFilter</a>* filter)</div>
<div class="line"><a name="l00594"></a><span class="lineno"> 594</span>&#160;{</div>
<div class="line"><a name="l00595"></a><span class="lineno"> 595</span>&#160; <span class="comment">// return value: true=okay, false=error</span></div>
<div class="line"><a name="l00596"></a><span class="lineno"> 596</span>&#160; assert(!node.<a class="code" href="classripple_1_1SHAMapNodeID.html#a205ce1fb183881d67a7b171533141c6b">isRoot</a>());</div>
<div class="line"><a name="l00597"></a><span class="lineno"> 597</span>&#160; </div>
<div class="line"><a name="l00598"></a><span class="lineno"> 598</span>&#160; <span class="keywordflow">if</span> (!<a class="code" href="classripple_1_1SHAMap.html#a4c50953c5e1c720f925deca920e8aa64">isSynching</a>())</div>
<div class="line"><a name="l00599"></a><span class="lineno"> 599</span>&#160; {</div>
<div class="line"><a name="l00600"></a><span class="lineno"> 600</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;AddKnownNode while not synching&quot;</span>;</div>
<div class="line"><a name="l00601"></a><span class="lineno"> 601</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#a4a8fc91d181542add6241a4f46f49970">SHAMapAddNode::duplicate</a>();</div>
<div class="line"><a name="l00602"></a><span class="lineno"> 602</span>&#160; }</div>
<div class="line"><a name="l00603"></a><span class="lineno"> 603</span>&#160; </div>
<div class="line"><a name="l00604"></a><span class="lineno"> 604</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> generation = <a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#a6a2a434710c6ccde390fcca5fca11fa8">fullbelow</a>().<a class="code" href="classripple_1_1detail_1_1BasicFullBelowCache.html#a24dcba9ab4a873d9d002a903585fff45">getGeneration</a>();</div>
<div class="line"><a name="l00605"></a><span class="lineno"> 605</span>&#160; <span class="keyword">auto</span> newNode = <a class="code" href="classripple_1_1SHAMapAbstractNode.html#ab303977d6b32547eb9cb12bb203b62fe">SHAMapAbstractNode::make</a>(</div>
<div class="line"><a name="l00606"></a><span class="lineno"> 606</span>&#160; rawNode, 0, <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36da82251cdf5d561efb6b1838672e116253">snfWIRE</a>, <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a>{}, <span class="keyword">false</span>, <a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#af25466995d0a740ffcf80cd8a59cf0c9">journal</a>(), node);</div>
<div class="line"><a name="l00607"></a><span class="lineno"> 607</span>&#160; <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a> iNodeID;</div>
<div class="line"><a name="l00608"></a><span class="lineno"> 608</span>&#160; <span class="keyword">auto</span> iNode = <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>.get();</div>
<div class="line"><a name="l00609"></a><span class="lineno"> 609</span>&#160; </div>
<div class="line"><a name="l00610"></a><span class="lineno"> 610</span>&#160; <span class="keywordflow">while</span> (iNode-&gt;isInner() &amp;&amp;</div>
<div class="line"><a name="l00611"></a><span class="lineno"> 611</span>&#160; !<span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(iNode)-&gt;<a class="code" href="classripple_1_1SHAMapInnerNode.html#a597b4db5c84297776d2e8ebdbe9e1b6f">isFullBelow</a>(generation) &amp;&amp;</div>
<div class="line"><a name="l00612"></a><span class="lineno"> 612</span>&#160; (iNodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a37b22f9b8d2286d02ecc7ee047b4ed82">getDepth</a>() &lt; node.<a class="code" href="classripple_1_1SHAMapNodeID.html#a37b22f9b8d2286d02ecc7ee047b4ed82">getDepth</a>()))</div>
<div class="line"><a name="l00613"></a><span class="lineno"> 613</span>&#160; {</div>
<div class="line"><a name="l00614"></a><span class="lineno"> 614</span>&#160; <span class="keywordtype">int</span> branch = iNodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a7a838e3981af9efdf9054659942ff5e4">selectBranch</a>(node.<a class="code" href="classripple_1_1SHAMapNodeID.html#a1b49f13ef901549ef1d5bceb94ed4753">getNodeID</a>());</div>
<div class="line"><a name="l00615"></a><span class="lineno"> 615</span>&#160; assert(branch &gt;= 0);</div>
<div class="line"><a name="l00616"></a><span class="lineno"> 616</span>&#160; <span class="keyword">auto</span> inner = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(iNode);</div>
<div class="line"><a name="l00617"></a><span class="lineno"> 617</span>&#160; <span class="keywordflow">if</span> (inner-&gt;isEmptyBranch(branch))</div>
<div class="line"><a name="l00618"></a><span class="lineno"> 618</span>&#160; {</div>
<div class="line"><a name="l00619"></a><span class="lineno"> 619</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>()) &lt;&lt; <span class="stringliteral">&quot;Add known node for empty branch&quot;</span> &lt;&lt; node;</div>
<div class="line"><a name="l00620"></a><span class="lineno"> 620</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#ac8b13f949d0715320fec511a17e48b2e">SHAMapAddNode::invalid</a>();</div>
<div class="line"><a name="l00621"></a><span class="lineno"> 621</span>&#160; }</div>
<div class="line"><a name="l00622"></a><span class="lineno"> 622</span>&#160; </div>
<div class="line"><a name="l00623"></a><span class="lineno"> 623</span>&#160; <span class="keyword">auto</span> childHash = inner-&gt;getChildHash(branch);</div>
<div class="line"><a name="l00624"></a><span class="lineno"> 624</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#a6a2a434710c6ccde390fcca5fca11fa8">fullbelow</a>().<a class="code" href="classripple_1_1detail_1_1BasicFullBelowCache.html#a5e207e81c6878a8d26e48c8fdaad5859">touch_if_exists</a>(childHash.as_uint256()))</div>
<div class="line"><a name="l00625"></a><span class="lineno"> 625</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#a4a8fc91d181542add6241a4f46f49970">SHAMapAddNode::duplicate</a>();</div>
<div class="line"><a name="l00626"></a><span class="lineno"> 626</span>&#160; </div>
<div class="line"><a name="l00627"></a><span class="lineno"> 627</span>&#160; <span class="keyword">auto</span> prevNode = inner;</div>
<div class="line"><a name="l00628"></a><span class="lineno"> 628</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/tuple/tie.html">std::tie</a>(iNode, iNodeID) = <a class="code" href="classripple_1_1SHAMap.html#a96fda7c51f94b0acc3a18081141efaad">descend</a>(inner, iNodeID, branch, filter);</div>
<div class="line"><a name="l00629"></a><span class="lineno"> 629</span>&#160; </div>
<div class="line"><a name="l00630"></a><span class="lineno"> 630</span>&#160; <span class="keywordflow">if</span> (iNode == <span class="keyword">nullptr</span>)</div>
<div class="line"><a name="l00631"></a><span class="lineno"> 631</span>&#160; {</div>
<div class="line"><a name="l00632"></a><span class="lineno"> 632</span>&#160; <span class="keywordflow">if</span> (!newNode || !newNode-&gt;isValid() ||</div>
<div class="line"><a name="l00633"></a><span class="lineno"> 633</span>&#160; childHash != newNode-&gt;getNodeHash())</div>
<div class="line"><a name="l00634"></a><span class="lineno"> 634</span>&#160; {</div>
<div class="line"><a name="l00635"></a><span class="lineno"> 635</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>()) &lt;&lt; <span class="stringliteral">&quot;Corrupt node received&quot;</span>;</div>
<div class="line"><a name="l00636"></a><span class="lineno"> 636</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#ac8b13f949d0715320fec511a17e48b2e">SHAMapAddNode::invalid</a>();</div>
<div class="line"><a name="l00637"></a><span class="lineno"> 637</span>&#160; }</div>
<div class="line"><a name="l00638"></a><span class="lineno"> 638</span>&#160; </div>
<div class="line"><a name="l00639"></a><span class="lineno"> 639</span>&#160; <span class="keywordflow">if</span> (!newNode-&gt;isInBounds(iNodeID))</div>
<div class="line"><a name="l00640"></a><span class="lineno"> 640</span>&#160; {</div>
<div class="line"><a name="l00641"></a><span class="lineno"> 641</span>&#160; <span class="comment">// Map is provably invalid</span></div>
<div class="line"><a name="l00642"></a><span class="lineno"> 642</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a50ed233b23a5065f500249cf23f1a183">state_</a> = <a class="code" href="namespaceripple.html#a49003667116eb98c6e966f36e5dd1c77a4bbb8f967da6d1a610596d7257179c2b">SHAMapState::Invalid</a>;</div>
<div class="line"><a name="l00643"></a><span class="lineno"> 643</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#af1a757ef4066613d2c94f6b9db57f26f">SHAMapAddNode::useful</a>();</div>
<div class="line"><a name="l00644"></a><span class="lineno"> 644</span>&#160; }</div>
<div class="line"><a name="l00645"></a><span class="lineno"> 645</span>&#160; </div>
<div class="line"><a name="l00646"></a><span class="lineno"> 646</span>&#160; <span class="keywordflow">if</span> (iNodeID != node)</div>
<div class="line"><a name="l00647"></a><span class="lineno"> 647</span>&#160; {</div>
<div class="line"><a name="l00648"></a><span class="lineno"> 648</span>&#160; <span class="comment">// Either this node is broken or we didn&#39;t request it (yet)</span></div>
<div class="line"><a name="l00649"></a><span class="lineno"> 649</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>()) &lt;&lt; <span class="stringliteral">&quot;unable to hook node &quot;</span> &lt;&lt; node;</div>
<div class="line"><a name="l00650"></a><span class="lineno"> 650</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) &lt;&lt; <span class="stringliteral">&quot; stuck at &quot;</span> &lt;&lt; iNodeID;</div>
<div class="line"><a name="l00651"></a><span class="lineno"> 651</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) &lt;&lt; <span class="stringliteral">&quot;got depth=&quot;</span> &lt;&lt; node.<a class="code" href="classripple_1_1SHAMapNodeID.html#a37b22f9b8d2286d02ecc7ee047b4ed82">getDepth</a>()</div>
<div class="line"><a name="l00652"></a><span class="lineno"> 652</span>&#160; &lt;&lt; <span class="stringliteral">&quot;, walked to= &quot;</span> &lt;&lt; iNodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a37b22f9b8d2286d02ecc7ee047b4ed82">getDepth</a>();</div>
<div class="line"><a name="l00653"></a><span class="lineno"> 653</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#af1a757ef4066613d2c94f6b9db57f26f">SHAMapAddNode::useful</a>();</div>
<div class="line"><a name="l00654"></a><span class="lineno"> 654</span>&#160; }</div>
<div class="line"><a name="l00655"></a><span class="lineno"> 655</span>&#160; </div>
<div class="line"><a name="l00656"></a><span class="lineno"> 656</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">backed_</a>)</div>
<div class="line"><a name="l00657"></a><span class="lineno"> 657</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a1cf2381d0c4757e050ba9c11f5a0ccd3">canonicalize</a>(childHash, newNode);</div>
<div class="line"><a name="l00658"></a><span class="lineno"> 658</span>&#160; </div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; <span class="keywordflow">if</span> (filter)</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; {</div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <a class="code" href="classripple_1_1Serializer.html">Serializer</a> s;</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; newNode-&gt;<a class="code" href="classripple_1_1Serializer.html#a8d8774ca938809be8323d3957a62af90">addRaw</a>(s, <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36dac04013643fe82a69b008807f1a255775">snfPREFIX</a>);</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; filter-&gt;<a class="code" href="classripple_1_1SHAMapSyncFilter.html#acdf3556e82ae8ac3b1b40cc66f692f08">gotNode</a>(</div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; <span class="keyword">false</span>,</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; childHash,</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#acbedaf0be7acd2816e01be821fdc4697">ledgerSeq_</a>,</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; std::move(s.<a class="code" href="classripple_1_1Serializer.html#a6d7436e5990cb278bd924cef9396df3c">modData</a>()),</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; newNode-&gt;getType());</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; }</div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; </div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#af1a757ef4066613d2c94f6b9db57f26f">SHAMapAddNode::useful</a>();</div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; }</div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; }</div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; </div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;got node, already had it (late)&quot;</span>;</div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#a4a8fc91d181542add6241a4f46f49970">SHAMapAddNode::duplicate</a>();</div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160;}</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; </div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00680"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#af0792d9d5d0e62b966754dcdee79e1ea"> 680</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#af0792d9d5d0e62b966754dcdee79e1ea">SHAMap::deepCompare</a>(<a class="code" href="classripple_1_1SHAMap.html">SHAMap</a>&amp; other)<span class="keyword"> const</span></div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00682"></a><span class="lineno"> 682</span>&#160; <span class="comment">// Intended for debug/test only</span></div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack.html">std::stack&lt;std::pair&lt;SHAMapAbstractNode*, SHAMapAbstractNode*&gt;</a>&gt; stack;</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; </div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/push.html">push</a>({<a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>.get(), other.<a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>.get()});</div>
<div class="line"><a name="l00659"></a><span class="lineno"> 659</span>&#160; newNode = prevNode-&gt;canonicalizeChild(branch, std::move(newNode));</div>
<div class="line"><a name="l00660"></a><span class="lineno"> 660</span>&#160; </div>
<div class="line"><a name="l00661"></a><span class="lineno"> 661</span>&#160; <span class="keywordflow">if</span> (filter)</div>
<div class="line"><a name="l00662"></a><span class="lineno"> 662</span>&#160; {</div>
<div class="line"><a name="l00663"></a><span class="lineno"> 663</span>&#160; <a class="code" href="classripple_1_1Serializer.html">Serializer</a> s;</div>
<div class="line"><a name="l00664"></a><span class="lineno"> 664</span>&#160; newNode-&gt;<a class="code" href="classripple_1_1Serializer.html#a8d8774ca938809be8323d3957a62af90">addRaw</a>(s, <a class="code" href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36dac04013643fe82a69b008807f1a255775">snfPREFIX</a>);</div>
<div class="line"><a name="l00665"></a><span class="lineno"> 665</span>&#160; filter-&gt;<a class="code" href="classripple_1_1SHAMapSyncFilter.html#acdf3556e82ae8ac3b1b40cc66f692f08">gotNode</a>(</div>
<div class="line"><a name="l00666"></a><span class="lineno"> 666</span>&#160; <span class="keyword">false</span>,</div>
<div class="line"><a name="l00667"></a><span class="lineno"> 667</span>&#160; childHash,</div>
<div class="line"><a name="l00668"></a><span class="lineno"> 668</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#acbedaf0be7acd2816e01be821fdc4697">ledgerSeq_</a>,</div>
<div class="line"><a name="l00669"></a><span class="lineno"> 669</span>&#160; std::move(s.<a class="code" href="classripple_1_1Serializer.html#a6d7436e5990cb278bd924cef9396df3c">modData</a>()),</div>
<div class="line"><a name="l00670"></a><span class="lineno"> 670</span>&#160; newNode-&gt;getType());</div>
<div class="line"><a name="l00671"></a><span class="lineno"> 671</span>&#160; }</div>
<div class="line"><a name="l00672"></a><span class="lineno"> 672</span>&#160; </div>
<div class="line"><a name="l00673"></a><span class="lineno"> 673</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#af1a757ef4066613d2c94f6b9db57f26f">SHAMapAddNode::useful</a>();</div>
<div class="line"><a name="l00674"></a><span class="lineno"> 674</span>&#160; }</div>
<div class="line"><a name="l00675"></a><span class="lineno"> 675</span>&#160; }</div>
<div class="line"><a name="l00676"></a><span class="lineno"> 676</span>&#160; </div>
<div class="line"><a name="l00677"></a><span class="lineno"> 677</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>()) &lt;&lt; <span class="stringliteral">&quot;got node, already had it (late)&quot;</span>;</div>
<div class="line"><a name="l00678"></a><span class="lineno"> 678</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMapAddNode.html#a4a8fc91d181542add6241a4f46f49970">SHAMapAddNode::duplicate</a>();</div>
<div class="line"><a name="l00679"></a><span class="lineno"> 679</span>&#160;}</div>
<div class="line"><a name="l00680"></a><span class="lineno"> 680</span>&#160; </div>
<div class="line"><a name="l00681"></a><span class="lineno"> 681</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00682"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#af0792d9d5d0e62b966754dcdee79e1ea"> 682</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#af0792d9d5d0e62b966754dcdee79e1ea">SHAMap::deepCompare</a>(<a class="code" href="classripple_1_1SHAMap.html">SHAMap</a>&amp; other)<span class="keyword"> const</span></div>
<div class="line"><a name="l00683"></a><span class="lineno"> 683</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00684"></a><span class="lineno"> 684</span>&#160; <span class="comment">// Intended for debug/test only</span></div>
<div class="line"><a name="l00685"></a><span class="lineno"> 685</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack.html">std::stack&lt;std::pair&lt;SHAMapAbstractNode*, SHAMapAbstractNode*&gt;</a>&gt; stack;</div>
<div class="line"><a name="l00686"></a><span class="lineno"> 686</span>&#160; </div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; <span class="keywordflow">while</span> (!stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/empty.html">empty</a>())</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; {</div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> [node, otherNode] = stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>();</div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/pop.html">pop</a>();</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; </div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; <span class="keywordflow">if</span> (!node || !otherNode)</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; {</div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) &lt;&lt; <span class="stringliteral">&quot;unable to fetch node&quot;</span>;</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; }</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (otherNode-&gt;getNodeHash() != node-&gt;getNodeHash())</div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; {</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>()) &lt;&lt; <span class="stringliteral">&quot;node hash mismatch&quot;</span>;</div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; }</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; </div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; <span class="keywordflow">if</span> (node-&gt;isLeaf())</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; {</div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span> (!otherNode-&gt;isLeaf())</div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keyword">auto</span>&amp; nodePeek = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapTreeNode.html">SHAMapTreeNode</a>*<span class="keyword">&gt;</span>(node)-&gt;<a class="code" href="classripple_1_1SHAMap.html#a122cf539ce917e7a322cfb41c8db3f57">peekItem</a>();</div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keyword">auto</span>&amp; otherNodePeek =</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapTreeNode.html">SHAMapTreeNode</a>*<span class="keyword">&gt;</span>(otherNode)-&gt;<a class="code" href="classripple_1_1SHAMap.html#a122cf539ce917e7a322cfb41c8db3f57">peekItem</a>();</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keywordflow">if</span> (nodePeek-&gt;key() != otherNodePeek-&gt;key())</div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">if</span> (nodePeek-&gt;peekData() != otherNodePeek-&gt;peekData())</div>
<div class="line"><a name="l00687"></a><span class="lineno"> 687</span>&#160; stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/push.html">push</a>({<a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>.get(), other.<a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>.get()});</div>
<div class="line"><a name="l00688"></a><span class="lineno"> 688</span>&#160; </div>
<div class="line"><a name="l00689"></a><span class="lineno"> 689</span>&#160; <span class="keywordflow">while</span> (!stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/empty.html">empty</a>())</div>
<div class="line"><a name="l00690"></a><span class="lineno"> 690</span>&#160; {</div>
<div class="line"><a name="l00691"></a><span class="lineno"> 691</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> [node, otherNode] = stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>();</div>
<div class="line"><a name="l00692"></a><span class="lineno"> 692</span>&#160; stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/pop.html">pop</a>();</div>
<div class="line"><a name="l00693"></a><span class="lineno"> 693</span>&#160; </div>
<div class="line"><a name="l00694"></a><span class="lineno"> 694</span>&#160; <span class="keywordflow">if</span> (!node || !otherNode)</div>
<div class="line"><a name="l00695"></a><span class="lineno"> 695</span>&#160; {</div>
<div class="line"><a name="l00696"></a><span class="lineno"> 696</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) &lt;&lt; <span class="stringliteral">&quot;unable to fetch node&quot;</span>;</div>
<div class="line"><a name="l00697"></a><span class="lineno"> 697</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00698"></a><span class="lineno"> 698</span>&#160; }</div>
<div class="line"><a name="l00699"></a><span class="lineno"> 699</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (otherNode-&gt;getNodeHash() != node-&gt;getNodeHash())</div>
<div class="line"><a name="l00700"></a><span class="lineno"> 700</span>&#160; {</div>
<div class="line"><a name="l00701"></a><span class="lineno"> 701</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>()) &lt;&lt; <span class="stringliteral">&quot;node hash mismatch&quot;</span>;</div>
<div class="line"><a name="l00702"></a><span class="lineno"> 702</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00703"></a><span class="lineno"> 703</span>&#160; }</div>
<div class="line"><a name="l00704"></a><span class="lineno"> 704</span>&#160; </div>
<div class="line"><a name="l00705"></a><span class="lineno"> 705</span>&#160; <span class="keywordflow">if</span> (node-&gt;isLeaf())</div>
<div class="line"><a name="l00706"></a><span class="lineno"> 706</span>&#160; {</div>
<div class="line"><a name="l00707"></a><span class="lineno"> 707</span>&#160; <span class="keywordflow">if</span> (!otherNode-&gt;isLeaf())</div>
<div class="line"><a name="l00708"></a><span class="lineno"> 708</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00709"></a><span class="lineno"> 709</span>&#160; <span class="keyword">auto</span>&amp; nodePeek = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapTreeNode.html">SHAMapTreeNode</a>*<span class="keyword">&gt;</span>(node)-&gt;<a class="code" href="classripple_1_1SHAMap.html#a122cf539ce917e7a322cfb41c8db3f57">peekItem</a>();</div>
<div class="line"><a name="l00710"></a><span class="lineno"> 710</span>&#160; <span class="keyword">auto</span>&amp; otherNodePeek =</div>
<div class="line"><a name="l00711"></a><span class="lineno"> 711</span>&#160; <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapTreeNode.html">SHAMapTreeNode</a>*<span class="keyword">&gt;</span>(otherNode)-&gt;<a class="code" href="classripple_1_1SHAMap.html#a122cf539ce917e7a322cfb41c8db3f57">peekItem</a>();</div>
<div class="line"><a name="l00712"></a><span class="lineno"> 712</span>&#160; <span class="keywordflow">if</span> (nodePeek-&gt;key() != otherNodePeek-&gt;key())</div>
<div class="line"><a name="l00713"></a><span class="lineno"> 713</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; }</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (node-&gt;isInner())</div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; {</div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keywordflow">if</span> (!otherNode-&gt;isInner())</div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keyword">auto</span> node_inner = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(node);</div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keyword">auto</span> other_inner = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(otherNode);</div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 16; ++i)</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; {</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">if</span> (node_inner-&gt;isEmptyBranch(i))</div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; {</div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">if</span> (!other_inner-&gt;isEmptyBranch(i))</div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; }</div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; {</div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">if</span> (other_inner-&gt;isEmptyBranch(i))</div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; </div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keyword">auto</span> next = <a class="code" href="classripple_1_1SHAMap.html#a96fda7c51f94b0acc3a18081141efaad">descend</a>(node_inner, i);</div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; <span class="keyword">auto</span> otherNext = other.<a class="code" href="classripple_1_1SHAMap.html#a96fda7c51f94b0acc3a18081141efaad">descend</a>(other_inner, i);</div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keywordflow">if</span> (!next || !otherNext)</div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; {</div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>()) &lt;&lt; <span class="stringliteral">&quot;unable to fetch inner node&quot;</span>;</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; }</div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/push.html">push</a>({next, otherNext});</div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; }</div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; }</div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; }</div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; }</div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; </div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160;}</div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; </div>
<div class="line"><a name="l00751"></a><span class="lineno"> 751</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00752"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a8a20e910f929701bee2a43d408dd7afa"> 752</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#a8a20e910f929701bee2a43d408dd7afa">SHAMap::hasInnerNode</a>(</div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160; <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a> <span class="keyword">const</span>&amp; targetNodeID,</div>
<div class="line"><a name="l00754"></a><span class="lineno"> 754</span>&#160; <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>&amp; targetNodeHash)<span class="keyword"> const</span></div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <span class="keyword">auto</span> node = <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>.get();</div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160; <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a> nodeID;</div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; </div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <span class="keywordflow">while</span> (node-&gt;isInner() &amp;&amp; (nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a37b22f9b8d2286d02ecc7ee047b4ed82">getDepth</a>() &lt; targetNodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a37b22f9b8d2286d02ecc7ee047b4ed82">getDepth</a>()))</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; {</div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordtype">int</span> branch = nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a7a838e3981af9efdf9054659942ff5e4">selectBranch</a>(targetNodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a1b49f13ef901549ef1d5bceb94ed4753">getNodeID</a>());</div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; <span class="keyword">auto</span> inner = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(node);</div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordflow">if</span> (inner-&gt;isEmptyBranch(branch))</div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; </div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; node = <a class="code" href="classripple_1_1SHAMap.html#a482d6fba903e5c0f6c22af7017c21de3">descendThrow</a>(inner, branch);</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; nodeID = nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a2562d5ab2eaf9cacfec84caa41590e99">getChildNodeID</a>(branch);</div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; }</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; </div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; <span class="keywordflow">return</span> (node-&gt;isInner()) &amp;&amp; (node-&gt;getNodeHash() == targetNodeHash);</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160;}</div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; </div>
<div class="line"><a name="l00775"></a><span class="lineno"> 775</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00776"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ab1c8e6f8066b79c3d025e6609e20918e"> 776</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#ab1c8e6f8066b79c3d025e6609e20918e">SHAMap::hasLeafNode</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; tag, <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>&amp; targetNodeHash)<span class="keyword"> const</span></div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00778"></a><span class="lineno"> 778</span>&#160; <span class="keyword">auto</span> node = <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>.get();</div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160; <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a> nodeID;</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; </div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <span class="keywordflow">if</span> (!node-&gt;isInner()) <span class="comment">// only one leaf node in the tree</span></div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; <span class="keywordflow">return</span> node-&gt;getNodeHash() == targetNodeHash;</div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; </div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordflow">do</span></div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; {</div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="keywordtype">int</span> branch = nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a7a838e3981af9efdf9054659942ff5e4">selectBranch</a>(tag);</div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; <span class="keyword">auto</span> inner = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(node);</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordflow">if</span> (inner-&gt;isEmptyBranch(branch))</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// Dead end, node must not be here</span></div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; </div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">if</span> (inner-&gt;getChildHash(branch) ==</div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; targetNodeHash) <span class="comment">// Matching leaf, no need to retrieve it</span></div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; </div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; node = <a class="code" href="classripple_1_1SHAMap.html#a482d6fba903e5c0f6c22af7017c21de3">descendThrow</a>(inner, branch);</div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; nodeID = nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a2562d5ab2eaf9cacfec84caa41590e99">getChildNodeID</a>(branch);</div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; } <span class="keywordflow">while</span> (node-&gt;isInner());</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; </div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// If this was a matching leaf, we would have caught it</span></div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; <span class="comment">// already</span></div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160;}</div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; </div>
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00813"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#af9ac0706d14d1778157f93765237798e"> 813</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#af9ac0706d14d1778157f93765237798e">SHAMap::getFetchPack</a>(</div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160; <a class="code" href="classripple_1_1SHAMap.html">SHAMap</a> <span class="keyword">const</span>* have,</div>
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>&#160; <span class="keywordtype">bool</span> includeLeaves,</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <span class="keywordtype">int</span> max,</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;<span class="keywordtype">void</span>(<a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>&amp;, <span class="keyword">const</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">Blob</a>&amp;)&gt; func)<span class="keyword"> const</span></div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a9e5915bf362aa68d08740a47f7213622">visitDifferences</a>(</div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160; have, [includeLeaves, &amp;max, &amp;func](<a class="code" href="classripple_1_1SHAMapAbstractNode.html">SHAMapAbstractNode</a>&amp; smn) -&gt; <span class="keywordtype">bool</span> {</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <span class="keywordflow">if</span> (includeLeaves || smn.<a class="code" href="classripple_1_1SHAMapAbstractNode.html#a12f84ac5268602ad2a3e32e0be7e04c5">isInner</a>())</div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; {</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; Serializer s;</div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; smn.addRaw(s, snfPREFIX);</div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; func(smn.getNodeHash(), s.peekData());</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; </div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; if (--max &lt;= 0)</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; return false;</div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; }</div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; });</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160;}</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; </div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160;} <span class="comment">// namespace ripple</span></div>
<div class="line"><a name="l00714"></a><span class="lineno"> 714</span>&#160; <span class="keywordflow">if</span> (nodePeek-&gt;peekData() != otherNodePeek-&gt;peekData())</div>
<div class="line"><a name="l00715"></a><span class="lineno"> 715</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00716"></a><span class="lineno"> 716</span>&#160; }</div>
<div class="line"><a name="l00717"></a><span class="lineno"> 717</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (node-&gt;isInner())</div>
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>&#160; {</div>
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>&#160; <span class="keywordflow">if</span> (!otherNode-&gt;isInner())</div>
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>&#160; <span class="keyword">auto</span> node_inner = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(node);</div>
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>&#160; <span class="keyword">auto</span> other_inner = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(otherNode);</div>
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 16; ++i)</div>
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>&#160; {</div>
<div class="line"><a name="l00725"></a><span class="lineno"> 725</span>&#160; <span class="keywordflow">if</span> (node_inner-&gt;isEmptyBranch(i))</div>
<div class="line"><a name="l00726"></a><span class="lineno"> 726</span>&#160; {</div>
<div class="line"><a name="l00727"></a><span class="lineno"> 727</span>&#160; <span class="keywordflow">if</span> (!other_inner-&gt;isEmptyBranch(i))</div>
<div class="line"><a name="l00728"></a><span class="lineno"> 728</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00729"></a><span class="lineno"> 729</span>&#160; }</div>
<div class="line"><a name="l00730"></a><span class="lineno"> 730</span>&#160; <span class="keywordflow">else</span></div>
<div class="line"><a name="l00731"></a><span class="lineno"> 731</span>&#160; {</div>
<div class="line"><a name="l00732"></a><span class="lineno"> 732</span>&#160; <span class="keywordflow">if</span> (other_inner-&gt;isEmptyBranch(i))</div>
<div class="line"><a name="l00733"></a><span class="lineno"> 733</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00734"></a><span class="lineno"> 734</span>&#160; </div>
<div class="line"><a name="l00735"></a><span class="lineno"> 735</span>&#160; <span class="keyword">auto</span> next = <a class="code" href="classripple_1_1SHAMap.html#a96fda7c51f94b0acc3a18081141efaad">descend</a>(node_inner, i);</div>
<div class="line"><a name="l00736"></a><span class="lineno"> 736</span>&#160; <span class="keyword">auto</span> otherNext = other.<a class="code" href="classripple_1_1SHAMap.html#a96fda7c51f94b0acc3a18081141efaad">descend</a>(other_inner, i);</div>
<div class="line"><a name="l00737"></a><span class="lineno"> 737</span>&#160; <span class="keywordflow">if</span> (!next || !otherNext)</div>
<div class="line"><a name="l00738"></a><span class="lineno"> 738</span>&#160; {</div>
<div class="line"><a name="l00739"></a><span class="lineno"> 739</span>&#160; JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#ad8fefe3e8ad583e1ed1bf02094ac3d8f">warn</a>()) &lt;&lt; <span class="stringliteral">&quot;unable to fetch inner node&quot;</span>;</div>
<div class="line"><a name="l00740"></a><span class="lineno"> 740</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00741"></a><span class="lineno"> 741</span>&#160; }</div>
<div class="line"><a name="l00742"></a><span class="lineno"> 742</span>&#160; stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/push.html">push</a>({next, otherNext});</div>
<div class="line"><a name="l00743"></a><span class="lineno"> 743</span>&#160; }</div>
<div class="line"><a name="l00744"></a><span class="lineno"> 744</span>&#160; }</div>
<div class="line"><a name="l00745"></a><span class="lineno"> 745</span>&#160; }</div>
<div class="line"><a name="l00746"></a><span class="lineno"> 746</span>&#160; }</div>
<div class="line"><a name="l00747"></a><span class="lineno"> 747</span>&#160; </div>
<div class="line"><a name="l00748"></a><span class="lineno"> 748</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00749"></a><span class="lineno"> 749</span>&#160;}</div>
<div class="line"><a name="l00750"></a><span class="lineno"> 750</span>&#160; </div>
<div class="line"><a name="l00753"></a><span class="lineno"> 753</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00754"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a8a20e910f929701bee2a43d408dd7afa"> 754</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#a8a20e910f929701bee2a43d408dd7afa">SHAMap::hasInnerNode</a>(</div>
<div class="line"><a name="l00755"></a><span class="lineno"> 755</span>&#160; <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a> <span class="keyword">const</span>&amp; targetNodeID,</div>
<div class="line"><a name="l00756"></a><span class="lineno"> 756</span>&#160; <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>&amp; targetNodeHash)<span class="keyword"> const</span></div>
<div class="line"><a name="l00757"></a><span class="lineno"> 757</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00758"></a><span class="lineno"> 758</span>&#160; <span class="keyword">auto</span> node = <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>.get();</div>
<div class="line"><a name="l00759"></a><span class="lineno"> 759</span>&#160; <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a> nodeID;</div>
<div class="line"><a name="l00760"></a><span class="lineno"> 760</span>&#160; </div>
<div class="line"><a name="l00761"></a><span class="lineno"> 761</span>&#160; <span class="keywordflow">while</span> (node-&gt;isInner() &amp;&amp; (nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a37b22f9b8d2286d02ecc7ee047b4ed82">getDepth</a>() &lt; targetNodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a37b22f9b8d2286d02ecc7ee047b4ed82">getDepth</a>()))</div>
<div class="line"><a name="l00762"></a><span class="lineno"> 762</span>&#160; {</div>
<div class="line"><a name="l00763"></a><span class="lineno"> 763</span>&#160; <span class="keywordtype">int</span> branch = nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a7a838e3981af9efdf9054659942ff5e4">selectBranch</a>(targetNodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a1b49f13ef901549ef1d5bceb94ed4753">getNodeID</a>());</div>
<div class="line"><a name="l00764"></a><span class="lineno"> 764</span>&#160; <span class="keyword">auto</span> inner = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(node);</div>
<div class="line"><a name="l00765"></a><span class="lineno"> 765</span>&#160; <span class="keywordflow">if</span> (inner-&gt;isEmptyBranch(branch))</div>
<div class="line"><a name="l00766"></a><span class="lineno"> 766</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a name="l00767"></a><span class="lineno"> 767</span>&#160; </div>
<div class="line"><a name="l00768"></a><span class="lineno"> 768</span>&#160; node = <a class="code" href="classripple_1_1SHAMap.html#a482d6fba903e5c0f6c22af7017c21de3">descendThrow</a>(inner, branch);</div>
<div class="line"><a name="l00769"></a><span class="lineno"> 769</span>&#160; nodeID = nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a2562d5ab2eaf9cacfec84caa41590e99">getChildNodeID</a>(branch);</div>
<div class="line"><a name="l00770"></a><span class="lineno"> 770</span>&#160; }</div>
<div class="line"><a name="l00771"></a><span class="lineno"> 771</span>&#160; </div>
<div class="line"><a name="l00772"></a><span class="lineno"> 772</span>&#160; <span class="keywordflow">return</span> (node-&gt;isInner()) &amp;&amp; (node-&gt;getNodeHash() == targetNodeHash);</div>
<div class="line"><a name="l00773"></a><span class="lineno"> 773</span>&#160;}</div>
<div class="line"><a name="l00774"></a><span class="lineno"> 774</span>&#160; </div>
<div class="line"><a name="l00777"></a><span class="lineno"> 777</span>&#160;<span class="keywordtype">bool</span></div>
<div class="line"><a name="l00778"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ab1c8e6f8066b79c3d025e6609e20918e"> 778</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#ab1c8e6f8066b79c3d025e6609e20918e">SHAMap::hasLeafNode</a>(<a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; tag, <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>&amp; targetNodeHash)<span class="keyword"> const</span></div>
<div class="line"><a name="l00779"></a><span class="lineno"> 779</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00780"></a><span class="lineno"> 780</span>&#160; <span class="keyword">auto</span> node = <a class="code" href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">root_</a>.get();</div>
<div class="line"><a name="l00781"></a><span class="lineno"> 781</span>&#160; <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a> nodeID;</div>
<div class="line"><a name="l00782"></a><span class="lineno"> 782</span>&#160; </div>
<div class="line"><a name="l00783"></a><span class="lineno"> 783</span>&#160; <span class="keywordflow">if</span> (!node-&gt;isInner()) <span class="comment">// only one leaf node in the tree</span></div>
<div class="line"><a name="l00784"></a><span class="lineno"> 784</span>&#160; <span class="keywordflow">return</span> node-&gt;getNodeHash() == targetNodeHash;</div>
<div class="line"><a name="l00785"></a><span class="lineno"> 785</span>&#160; </div>
<div class="line"><a name="l00786"></a><span class="lineno"> 786</span>&#160; <span class="keywordflow">do</span></div>
<div class="line"><a name="l00787"></a><span class="lineno"> 787</span>&#160; {</div>
<div class="line"><a name="l00788"></a><span class="lineno"> 788</span>&#160; <span class="keywordtype">int</span> branch = nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a7a838e3981af9efdf9054659942ff5e4">selectBranch</a>(tag);</div>
<div class="line"><a name="l00789"></a><span class="lineno"> 789</span>&#160; <span class="keyword">auto</span> inner = <span class="keyword">static_cast&lt;</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">&gt;</span>(node);</div>
<div class="line"><a name="l00790"></a><span class="lineno"> 790</span>&#160; <span class="keywordflow">if</span> (inner-&gt;isEmptyBranch(branch))</div>
<div class="line"><a name="l00791"></a><span class="lineno"> 791</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// Dead end, node must not be here</span></div>
<div class="line"><a name="l00792"></a><span class="lineno"> 792</span>&#160; </div>
<div class="line"><a name="l00793"></a><span class="lineno"> 793</span>&#160; <span class="keywordflow">if</span> (inner-&gt;getChildHash(branch) ==</div>
<div class="line"><a name="l00794"></a><span class="lineno"> 794</span>&#160; targetNodeHash) <span class="comment">// Matching leaf, no need to retrieve it</span></div>
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>&#160; </div>
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>&#160; node = <a class="code" href="classripple_1_1SHAMap.html#a482d6fba903e5c0f6c22af7017c21de3">descendThrow</a>(inner, branch);</div>
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>&#160; nodeID = nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a2562d5ab2eaf9cacfec84caa41590e99">getChildNodeID</a>(branch);</div>
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>&#160; } <span class="keywordflow">while</span> (node-&gt;isInner());</div>
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>&#160; </div>
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>&#160; <span class="keywordflow">return</span> <span class="keyword">false</span>; <span class="comment">// If this was a matching leaf, we would have caught it</span></div>
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>&#160; <span class="comment">// already</span></div>
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>&#160;}</div>
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>&#160; </div>
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>&#160;<span class="keywordtype">void</span></div>
<div class="line"><a name="l00815"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#af9ac0706d14d1778157f93765237798e"> 815</a></span>&#160;<a class="code" href="classripple_1_1SHAMap.html#af9ac0706d14d1778157f93765237798e">SHAMap::getFetchPack</a>(</div>
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>&#160; <a class="code" href="classripple_1_1SHAMap.html">SHAMap</a> <span class="keyword">const</span>* have,</div>
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>&#160; <span class="keywordtype">bool</span> includeLeaves,</div>
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>&#160; <span class="keywordtype">int</span> max,</div>
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;<span class="keywordtype">void</span>(<a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>&amp;, <span class="keyword">const</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/vector.html">Blob</a>&amp;)&gt; func)<span class="keyword"> const</span></div>
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>&#160;<span class="keyword"></span>{</div>
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>&#160; <a class="code" href="classripple_1_1SHAMap.html#a9e5915bf362aa68d08740a47f7213622">visitDifferences</a>(</div>
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>&#160; have, [includeLeaves, &amp;max, &amp;func](<a class="code" href="classripple_1_1SHAMapAbstractNode.html">SHAMapAbstractNode</a>&amp; smn) -&gt; <span class="keywordtype">bool</span> {</div>
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>&#160; <span class="keywordflow">if</span> (includeLeaves || smn.<a class="code" href="classripple_1_1SHAMapAbstractNode.html#a12f84ac5268602ad2a3e32e0be7e04c5">isInner</a>())</div>
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>&#160; {</div>
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>&#160; Serializer s;</div>
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>&#160; smn.addRaw(s, snfPREFIX);</div>
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>&#160; func(smn.getNodeHash(), s.peekData());</div>
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>&#160; </div>
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>&#160; if (--max &lt;= 0)</div>
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>&#160; return false;</div>
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>&#160; }</div>
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>&#160; });</div>
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>&#160;}</div>
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>&#160; </div>
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span>&#160;} <span class="comment">// namespace ripple</span></div>
</div><!-- fragment --></div><!-- contents -->
<div class="ttc" id="astructripple_1_1SHAMap_1_1MissingNodes_html"><div class="ttname"><a href="structripple_1_1SHAMap_1_1MissingNodes.html">ripple::SHAMap::MissingNodes</a></div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00422">SHAMap.h:422</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapAddNode_html"><div class="ttname"><a href="classripple_1_1SHAMapAddNode.html">ripple::SHAMapAddNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SHAMapAddNode_8h_source.html#l00028">SHAMapAddNode.h:28</a></div></div>
@@ -896,11 +898,11 @@ $(function() {
<div class="ttc" id="aclassripple_1_1SHAMap_html_a0b1d68d0723680664e14401c86625b9f"><div class="ttname"><a href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">ripple::SHAMap::backed_</a></div><div class="ttdeci">bool backed_</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00091">SHAMap.h:91</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_abbe082bd27ca0f1d1365af2824e4f85b"><div class="ttname"><a href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">beast::Journal::trace</a></div><div class="ttdeci">Stream trace() const</div><div class="ttdoc">Severity stream access functions.</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00309">Journal.h:309</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapNodeID_html_a1b49f13ef901549ef1d5bceb94ed4753"><div class="ttname"><a href="classripple_1_1SHAMapNodeID.html#a1b49f13ef901549ef1d5bceb94ed4753">ripple::SHAMapNodeID::getNodeID</a></div><div class="ttdeci">uint256 const &amp; getNodeID() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapNodeID_8h_source.html#l00112">SHAMapNodeID.h:112</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_af0792d9d5d0e62b966754dcdee79e1ea"><div class="ttname"><a href="classripple_1_1SHAMap.html#af0792d9d5d0e62b966754dcdee79e1ea">ripple::SHAMap::deepCompare</a></div><div class="ttdeci">bool deepCompare(SHAMap &amp;other) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00680">SHAMapSync.cpp:680</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_af0792d9d5d0e62b966754dcdee79e1ea"><div class="ttname"><a href="classripple_1_1SHAMap.html#af0792d9d5d0e62b966754dcdee79e1ea">ripple::SHAMap::deepCompare</a></div><div class="ttdeci">bool deepCompare(SHAMap &amp;other) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00682">SHAMapSync.cpp:682</a></div></div>
<div class="ttc" id="astructripple_1_1SHAMap_1_1MissingNodes_html_a1053cf953a1f9d97319bd05fd1ee7510"><div class="ttname"><a href="structripple_1_1SHAMap_1_1MissingNodes.html#a1053cf953a1f9d97319bd05fd1ee7510">ripple::SHAMap::MissingNodes::stack_</a></div><div class="ttdeci">std::stack&lt; StackEntry, std::deque&lt; StackEntry &gt; &gt; stack_</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00452">SHAMap.h:452</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a8a20e910f929701bee2a43d408dd7afa"><div class="ttname"><a href="classripple_1_1SHAMap.html#a8a20e910f929701bee2a43d408dd7afa">ripple::SHAMap::hasInnerNode</a></div><div class="ttdeci">bool hasInnerNode(SHAMapNodeID const &amp;nodeID, SHAMapHash const &amp;hash) const</div><div class="ttdoc">Does this map have this inner node?</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00752">SHAMapSync.cpp:752</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a8a20e910f929701bee2a43d408dd7afa"><div class="ttname"><a href="classripple_1_1SHAMap.html#a8a20e910f929701bee2a43d408dd7afa">ripple::SHAMap::hasInnerNode</a></div><div class="ttdeci">bool hasInnerNode(SHAMapNodeID const &amp;nodeID, SHAMapHash const &amp;hash) const</div><div class="ttdoc">Does this map have this inner node?</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00754">SHAMapSync.cpp:754</a></div></div>
<div class="ttc" id="aclassripple_1_1Serializer_html_a6d7436e5990cb278bd924cef9396df3c"><div class="ttname"><a href="classripple_1_1Serializer.html#a6d7436e5990cb278bd924cef9396df3c">ripple::Serializer::modData</a></div><div class="ttdeci">Blob &amp; modData()</div><div class="ttdef"><b>Definition:</b> <a href="Serializer_8h_source.html#l00176">Serializer.h:176</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a1cf2381d0c4757e050ba9c11f5a0ccd3"><div class="ttname"><a href="classripple_1_1SHAMap.html#a1cf2381d0c4757e050ba9c11f5a0ccd3">ripple::SHAMap::canonicalize</a></div><div class="ttdeci">void canonicalize(SHAMapHash const &amp;hash, std::shared_ptr&lt; SHAMapAbstractNode &gt; &amp;) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l01118">SHAMap.cpp:1118</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a1cf2381d0c4757e050ba9c11f5a0ccd3"><div class="ttname"><a href="classripple_1_1SHAMap.html#a1cf2381d0c4757e050ba9c11f5a0ccd3">ripple::SHAMap::canonicalize</a></div><div class="ttdeci">void canonicalize(SHAMapHash const &amp;hash, std::shared_ptr&lt; SHAMapAbstractNode &gt; &amp;) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l01122">SHAMap.cpp:1122</a></div></div>
<div class="ttc" id="aclassripple_1_1Slice_html"><div class="ttname"><a href="classripple_1_1Slice.html">ripple::Slice</a></div><div class="ttdoc">An immutable linear range of bytes.</div><div class="ttdef"><b>Definition:</b> <a href="Slice_8h_source.html#l00043">Slice.h:43</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapAbstractNode_html_ab303977d6b32547eb9cb12bb203b62fe"><div class="ttname"><a href="classripple_1_1SHAMapAbstractNode.html#ab303977d6b32547eb9cb12bb203b62fe">ripple::SHAMapAbstractNode::make</a></div><div class="ttdeci">static std::shared_ptr&lt; SHAMapAbstractNode &gt; make(Slice const &amp;rawNode, std::uint32_t seq, SHANodeFormat format, SHAMapHash const &amp;hash, bool hashValid, beast::Journal j, SHAMapNodeID const &amp;id=SHAMapNodeID{})</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8cpp_source.html#l00079">SHAMapTreeNode.cpp:79</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_ad131b2923636ee160a9f88991bce5549"><div class="ttname"><a href="classripple_1_1SHAMap.html#ad131b2923636ee160a9f88991bce5549">ripple::SHAMap::seq_</a></div><div class="ttdeci">std::uint32_t seq_</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00086">SHAMap.h:86</a></div></div>
@@ -910,7 +912,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1SHAMapNodeID_html_a2562d5ab2eaf9cacfec84caa41590e99"><div class="ttname"><a href="classripple_1_1SHAMapNodeID.html#a2562d5ab2eaf9cacfec84caa41590e99">ripple::SHAMapNodeID::getChildNodeID</a></div><div class="ttdeci">SHAMapNodeID getChildNodeID(int m) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapNodeID_8cpp_source.html#l00101">SHAMapNodeID.cpp:101</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a482d6fba903e5c0f6c22af7017c21de3"><div class="ttname"><a href="classripple_1_1SHAMap.html#a482d6fba903e5c0f6c22af7017c21de3">ripple::SHAMap::descendThrow</a></div><div class="ttdeci">SHAMapAbstractNode * descendThrow(SHAMapInnerNode *, int branch) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00249">SHAMap.cpp:249</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a10f11497fb044c732384b4e75f244db2"><div class="ttname"><a href="classripple_1_1SHAMap.html#a10f11497fb044c732384b4e75f244db2">ripple::SHAMap::getNodeFat</a></div><div class="ttdeci">bool getNodeFat(SHAMapNodeID node, std::vector&lt; SHAMapNodeID &gt; &amp;nodeIDs, std::vector&lt; Blob &gt; &amp;rawNode, bool fatLeaves, std::uint32_t depth) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00442">SHAMapSync.cpp:442</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_af9ac0706d14d1778157f93765237798e"><div class="ttname"><a href="classripple_1_1SHAMap.html#af9ac0706d14d1778157f93765237798e">ripple::SHAMap::getFetchPack</a></div><div class="ttdeci">void getFetchPack(SHAMap const *have, bool includeLeaves, int max, std::function&lt; void(SHAMapHash const &amp;, const Blob &amp;)&gt;) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00813">SHAMapSync.cpp:813</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_af9ac0706d14d1778157f93765237798e"><div class="ttname"><a href="classripple_1_1SHAMap.html#af9ac0706d14d1778157f93765237798e">ripple::SHAMap::getFetchPack</a></div><div class="ttdeci">void getFetchPack(SHAMap const *have, bool includeLeaves, int max, std::function&lt; void(SHAMapHash const &amp;, const Blob &amp;)&gt;) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00815">SHAMapSync.cpp:815</a></div></div>
<div class="ttc" id="avector_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a5868b33d236bad987f9ff5a813750460"><div class="ttname"><a href="classripple_1_1SHAMap.html#a5868b33d236bad987f9ff5a813750460">ripple::SHAMap::visitNodes</a></div><div class="ttdeci">void visitNodes(std::function&lt; bool(SHAMapAbstractNode &amp;)&gt; const &amp;function) const</div><div class="ttdoc">Visit every node in this SHAMap.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00039">SHAMapSync.cpp:39</a></div></div>
<div class="ttc" id="astructripple_1_1SHAMap_1_1MissingNodes_html_ac6ae00f4088ecc66b71cf9c69b2e7afe"><div class="ttname"><a href="structripple_1_1SHAMap_1_1MissingNodes.html#ac6ae00f4088ecc66b71cf9c69b2e7afe">ripple::SHAMap::MissingNodes::maxDefer_</a></div><div class="ttdeci">const int maxDefer_</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00432">SHAMap.h:432</a></div></div>
@@ -930,7 +932,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1SHAMap_html_a3eb9a440b16936f49789701f44c89a58"><div class="ttname"><a href="classripple_1_1SHAMap.html#a3eb9a440b16936f49789701f44c89a58">ripple::SHAMap::fetchNodeNT</a></div><div class="ttdeci">std::shared_ptr&lt; SHAMapAbstractNode &gt; fetchNodeNT(SHAMapHash const &amp;hash) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00226">SHAMap.cpp:226</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a429e0c35495bd06580fb4d5456cef910"><div class="ttname"><a href="classripple_1_1SHAMap.html#a429e0c35495bd06580fb4d5456cef910">ripple::SHAMap::getNeededHashes</a></div><div class="ttdeci">std::vector&lt; uint256 &gt; getNeededHashes(int max, SHAMapSyncFilter *filter)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00428">SHAMapSync.cpp:428</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapAddNode_html_a4a8fc91d181542add6241a4f46f49970"><div class="ttname"><a href="classripple_1_1SHAMapAddNode.html#a4a8fc91d181542add6241a4f46f49970">ripple::SHAMapAddNode::duplicate</a></div><div class="ttdeci">static SHAMapAddNode duplicate()</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapAddNode_8h_source.html#l00138">SHAMapAddNode.h:138</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a168ae55863f45d08d4e789b01626f71b"><div class="ttname"><a href="classripple_1_1SHAMap.html#a168ae55863f45d08d4e789b01626f71b">ripple::SHAMap::getRootNode</a></div><div class="ttdeci">bool getRootNode(Serializer &amp;s, SHANodeFormat format) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00537">SHAMapSync.cpp:537</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a168ae55863f45d08d4e789b01626f71b"><div class="ttname"><a href="classripple_1_1SHAMap.html#a168ae55863f45d08d4e789b01626f71b">ripple::SHAMap::getRootNode</a></div><div class="ttdeci">bool getRootNode(Serializer &amp;s, SHANodeFormat format) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00539">SHAMapSync.cpp:539</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a5268c936212da93659dd05be9304e0bb"><div class="ttname"><a href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">ripple::SHAMap::f_</a></div><div class="ttdeci">Family &amp; f_</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00084">SHAMap.h:84</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapAddNode_html_af1a757ef4066613d2c94f6b9db57f26f"><div class="ttname"><a href="classripple_1_1SHAMapAddNode.html#af1a757ef4066613d2c94f6b9db57f26f">ripple::SHAMapAddNode::useful</a></div><div class="ttdeci">static SHAMapAddNode useful()</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapAddNode_8h_source.html#l00144">SHAMapAddNode.h:144</a></div></div>
<div class="ttc" id="atie_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/tuple/tie.html">std::tie</a></div><div class="ttdeci">T tie(T... args)</div></div>
@@ -946,7 +948,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1SHAMapAbstractNode_html_a12f84ac5268602ad2a3e32e0be7e04c5"><div class="ttname"><a href="classripple_1_1SHAMapAbstractNode.html#a12f84ac5268602ad2a3e32e0be7e04c5">ripple::SHAMapAbstractNode::isInner</a></div><div class="ttdeci">bool isInner() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8h_source.html#l00350">SHAMapTreeNode.h:350</a></div></div>
<div class="ttc" id="anamespaceripple_html_ad5143ceada01141772ae4aab984f94bdad9a09590da318a86ba2bd64b374c2d77"><div class="ttname"><a href="namespaceripple.html#ad5143ceada01141772ae4aab984f94bdad9a09590da318a86ba2bd64b374c2d77">ripple::HashPrefix::innerNode</a></div><div class="ttdeci">@ innerNode</div><div class="ttdoc">inner node in V1 tree</div></div>
<div class="ttc" id="aclassripple_1_1SHAMapInnerNode_html_a8932a6ff79c447556da4b17e908bd008"><div class="ttname"><a href="classripple_1_1SHAMapInnerNode.html#a8932a6ff79c447556da4b17e908bd008">ripple::SHAMapInnerNode::getChildHash</a></div><div class="ttdeci">SHAMapHash const &amp; getChildHash(int m) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8h_source.html#l00382">SHAMapTreeNode.h:382</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_ab1c8e6f8066b79c3d025e6609e20918e"><div class="ttname"><a href="classripple_1_1SHAMap.html#ab1c8e6f8066b79c3d025e6609e20918e">ripple::SHAMap::hasLeafNode</a></div><div class="ttdeci">bool hasLeafNode(uint256 const &amp;tag, SHAMapHash const &amp;hash) const</div><div class="ttdoc">Does this map have this leaf node?</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00776">SHAMapSync.cpp:776</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_ab1c8e6f8066b79c3d025e6609e20918e"><div class="ttname"><a href="classripple_1_1SHAMap.html#ab1c8e6f8066b79c3d025e6609e20918e">ripple::SHAMap::hasLeafNode</a></div><div class="ttdeci">bool hasLeafNode(uint256 const &amp;tag, SHAMapHash const &amp;hash) const</div><div class="ttdoc">Does this map have this leaf node?</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00778">SHAMapSync.cpp:778</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a9e5915bf362aa68d08740a47f7213622"><div class="ttname"><a href="classripple_1_1SHAMap.html#a9e5915bf362aa68d08740a47f7213622">ripple::SHAMap::visitDifferences</a></div><div class="ttdeci">void visitDifferences(SHAMap const *have, std::function&lt; bool(SHAMapAbstractNode &amp;)&gt;) const</div><div class="ttdoc">Visit every node in this SHAMap that is not present in the specified SHAMap.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00105">SHAMapSync.cpp:105</a></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="SHAMapTreeNode_8h_source.html#l00189">SHAMapTreeNode.h:189</a></div></div>
<div class="ttc" id="astructripple_1_1SHAMap_1_1MissingNodes_html_a55ea2bafa18548792a05de96107370de"><div class="ttname"><a href="structripple_1_1SHAMap_1_1MissingNodes.html#a55ea2bafa18548792a05de96107370de">ripple::SHAMap::MissingNodes::max_</a></div><div class="ttdeci">int max_</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00430">SHAMap.h:430</a></div></div>
@@ -964,16 +966,15 @@ $(function() {
<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#l00321">Journal.h:321</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a149dff8600718cccd0d5b9e7af9d3c79"><div class="ttname"><a href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">ripple::SHAMap::journal_</a></div><div class="ttdeci">beast::Journal journal_</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00085">SHAMap.h:85</a></div></div>
<div class="ttc" id="astructripple_1_1SHAMap_1_1MissingNodes_html_a0962b01670b88cd6de600fe072a2a860"><div class="ttname"><a href="structripple_1_1SHAMap_1_1MissingNodes.html#a0962b01670b88cd6de600fe072a2a860">ripple::SHAMap::MissingNodes::missingHashes_</a></div><div class="ttdeci">std::set&lt; SHAMapHash &gt; missingHashes_</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00437">SHAMap.h:437</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapInnerNode_html_aec522cbc8cfb50ed87ebf8c634a40276"><div class="ttname"><a href="classripple_1_1SHAMapInnerNode.html#aec522cbc8cfb50ed87ebf8c634a40276">ripple::SHAMapInnerNode::getBranchCount</a></div><div class="ttdeci">int getBranchCount() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8cpp_source.html#l00478">SHAMapTreeNode.cpp:478</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapInnerNode_html_aec522cbc8cfb50ed87ebf8c634a40276"><div class="ttname"><a href="classripple_1_1SHAMapInnerNode.html#aec522cbc8cfb50ed87ebf8c634a40276">ripple::SHAMapInnerNode::getBranchCount</a></div><div class="ttdeci">int getBranchCount() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8cpp_source.html#l00480">SHAMapTreeNode.cpp:480</a></div></div>
<div class="ttc" id="ainteger_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_ad5534c8a5bd411c5d83bb5efcdec6d64"><div class="ttname"><a href="classripple_1_1SHAMap.html#ad5534c8a5bd411c5d83bb5efcdec6d64">ripple::SHAMap::addRootNode</a></div><div class="ttdeci">SHAMapAddNode addRootNode(SHAMapHash const &amp;hash, Slice const &amp;rootNode, SHANodeFormat format, SHAMapSyncFilter *filter)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00544">SHAMapSync.cpp:544</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_ad5534c8a5bd411c5d83bb5efcdec6d64"><div class="ttname"><a href="classripple_1_1SHAMap.html#ad5534c8a5bd411c5d83bb5efcdec6d64">ripple::SHAMap::addRootNode</a></div><div class="ttdeci">SHAMapAddNode addRootNode(SHAMapHash const &amp;hash, Slice const &amp;rootNode, SHANodeFormat format, SHAMapSyncFilter *filter)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00546">SHAMapSync.cpp:546</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#l00316">SHAMapSync.cpp:316</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#l00039">Serializer.h:39</a></div></div>
<div class="ttc" id="anamespaceripple_html"><div class="ttname"><a href="namespaceripple.html">ripple</a></div><div class="ttdoc">Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.</div><div class="ttdef"><b>Definition:</b> <a href="RCLCensorshipDetector_8h_source.html#l00029">RCLCensorshipDetector.h:29</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a96fda7c51f94b0acc3a18081141efaad"><div class="ttname"><a href="classripple_1_1SHAMap.html#a96fda7c51f94b0acc3a18081141efaad">ripple::SHAMap::descend</a></div><div class="ttdeci">SHAMapAbstractNode * descend(SHAMapInnerNode *, int branch) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00272">SHAMap.cpp:272</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a3f60c4d1a14b648070f6acefa404a99e"><div class="ttname"><a href="classripple_1_1SHAMap.html#a3f60c4d1a14b648070f6acefa404a99e">ripple::SHAMap::descendNoStore</a></div><div class="ttdeci">std::shared_ptr&lt; SHAMapAbstractNode &gt; descendNoStore(std::shared_ptr&lt; SHAMapInnerNode &gt; const &amp;, int branch) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00306">SHAMap.cpp:306</a></div></div>
<div class="ttc" id="aclassripple_1_1detail_1_1BasicFullBelowCache_html_a24dcba9ab4a873d9d002a903585fff45"><div class="ttname"><a href="classripple_1_1detail_1_1BasicFullBelowCache.html#a24dcba9ab4a873d9d002a903585fff45">ripple::detail::BasicFullBelowCache::getGeneration</a></div><div class="ttdeci">std::uint32_t getGeneration(void) const</div><div class="ttdoc">generation determines whether cached entry is valid</div><div class="ttdef"><b>Definition:</b> <a href="FullBelowCache_8h_source.html#l00121">FullBelowCache.h:121</a></div></div>
<div class="ttc" id="aclassripple_1_1Serializer_html_a5f8c275ba7cfa80e56671b6935e29242"><div class="ttname"><a href="classripple_1_1Serializer.html#a5f8c275ba7cfa80e56671b6935e29242">ripple::Serializer::peekData</a></div><div class="ttdeci">Blob const &amp; peekData() const</div><div class="ttdef"><b>Definition:</b> <a href="Serializer_8h_source.html#l00166">Serializer.h:166</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac8683dfc227ea8c196fc4e4f2080e36da82251cdf5d561efb6b1838672e116253"><div class="ttname"><a href="namespaceripple.html#ac8683dfc227ea8c196fc4e4f2080e36da82251cdf5d561efb6b1838672e116253">ripple::snfWIRE</a></div><div class="ttdeci">@ snfWIRE</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8h_source.html#l00037">SHAMapTreeNode.h:37</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a05597cefb4d88231262e1731dd436402"><div class="ttname"><a href="classripple_1_1SHAMap.html#a05597cefb4d88231262e1731dd436402">ripple::SHAMap::root_</a></div><div class="ttdeci">std::shared_ptr&lt; SHAMapAbstractNode &gt; root_</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00088">SHAMap.h:88</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapAbstractNode_html"><div class="ttname"><a href="classripple_1_1SHAMapAbstractNode.html">ripple::SHAMapAbstractNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8h_source.html#l00122">SHAMapTreeNode.h:122</a></div></div>
@@ -986,8 +987,8 @@ $(function() {
<div class="ttc" id="anamespaceripple_html_a49003667116eb98c6e966f36e5dd1c77a4bbb8f967da6d1a610596d7257179c2b"><div class="ttname"><a href="namespaceripple.html#a49003667116eb98c6e966f36e5dd1c77a4bbb8f967da6d1a610596d7257179c2b">ripple::SHAMapState::Invalid</a></div><div class="ttdeci">@ Invalid</div></div>
<div class="ttc" id="aclassripple_1_1Family_html_a6a2a434710c6ccde390fcca5fca11fa8"><div class="ttname"><a href="classripple_1_1Family.html#a6a2a434710c6ccde390fcca5fca11fa8">ripple::Family::fullbelow</a></div><div class="ttdeci">virtual FullBelowCache &amp; fullbelow()=0</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_1SHAMapInnerNode_html_a13fcdfee8199a8e54429edf6b9085ae0"><div class="ttname"><a href="classripple_1_1SHAMapInnerNode.html#a13fcdfee8199a8e54429edf6b9085ae0">ripple::SHAMapInnerNode::isEmpty</a></div><div class="ttdeci">bool isEmpty() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8cpp_source.html#l00472">SHAMapTreeNode.cpp:472</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a5c78c5b45614fa7b5f7ecebbc7185944"><div class="ttname"><a href="classripple_1_1SHAMap.html#a5c78c5b45614fa7b5f7ecebbc7185944">ripple::SHAMap::addKnownNode</a></div><div class="ttdeci">SHAMapAddNode addKnownNode(SHAMapNodeID const &amp;nodeID, Slice const &amp;rawNode, SHAMapSyncFilter *filter)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00588">SHAMapSync.cpp:588</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapInnerNode_html_a13fcdfee8199a8e54429edf6b9085ae0"><div class="ttname"><a href="classripple_1_1SHAMapInnerNode.html#a13fcdfee8199a8e54429edf6b9085ae0">ripple::SHAMapInnerNode::isEmpty</a></div><div class="ttdeci">bool isEmpty() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8cpp_source.html#l00474">SHAMapTreeNode.cpp:474</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMap_html_a5c78c5b45614fa7b5f7ecebbc7185944"><div class="ttname"><a href="classripple_1_1SHAMap.html#a5c78c5b45614fa7b5f7ecebbc7185944">ripple::SHAMap::addKnownNode</a></div><div class="ttdeci">SHAMapAddNode addKnownNode(SHAMapNodeID const &amp;nodeID, Slice const &amp;rawNode, SHAMapSyncFilter *filter)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapSync_8cpp_source.html#l00590">SHAMapSync.cpp:590</a></div></div>
<div class="ttc" id="aclassripple_1_1Family_html_af25466995d0a740ffcf80cd8a59cf0c9"><div class="ttname"><a href="classripple_1_1Family.html#af25466995d0a740ffcf80cd8a59cf0c9">ripple::Family::journal</a></div><div class="ttdeci">virtual beast::Journal const &amp; journal()=0</div></div>
<div class="ttc" id="aclassripple_1_1SHAMapHash_html_a8f95b5bc14b7085d368f56aeaa17ef4f"><div class="ttname"><a href="classripple_1_1SHAMapHash.html#a8f95b5bc14b7085d368f56aeaa17ef4f">ripple::SHAMapHash::as_uint256</a></div><div class="ttdeci">uint256 const &amp; as_uint256() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8h_source.html#l00054">SHAMapTreeNode.h:54</a></div></div>
<div class="ttc" id="aclassripple_1_1SHAMapInnerNode_html_ad03f4f678da9104ef53946bb07bdf8ae"><div class="ttname"><a href="classripple_1_1SHAMapInnerNode.html#ad03f4f678da9104ef53946bb07bdf8ae">ripple::SHAMapInnerNode::setFullBelowGen</a></div><div class="ttdeci">void setFullBelowGen(std::uint32_t gen)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8h_source.html#l00395">SHAMapTreeNode.h:395</a></div></div>