mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-21 03:26:01 +00:00
deploy: c1e7fe2d93
This commit is contained in:
@@ -189,7 +189,7 @@ $(function() {
|
||||
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  assert(branch >= 0);</div>
|
||||
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  </div>
|
||||
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  node = <a class="code" href="classripple_1_1SHAMap.html#ad4a7aa36e5d6888012e4e4414f98b73c">unshareNode</a>(std::move(node), nodeID);</div>
|
||||
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  node->setChild(branch, child);</div>
|
||||
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  node->setChild(branch, std::move(child));</div>
|
||||
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  </div>
|
||||
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  child = std::move(node);</div>
|
||||
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div>
|
||||
@@ -789,7 +789,7 @@ $(function() {
|
||||
<div class="line"><a name="l00718"></a><span class="lineno"> 718</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/pop.html">pop</a>();</div>
|
||||
<div class="line"><a name="l00719"></a><span class="lineno"> 719</span>  </div>
|
||||
<div class="line"><a name="l00720"></a><span class="lineno"> 720</span>  node = <a class="code" href="classripple_1_1SHAMap.html#ad4a7aa36e5d6888012e4e4414f98b73c">unshareNode</a>(std::move(node), nodeID);</div>
|
||||
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  node->setChild(<a class="code" href="namespaceripple.html#a179c66641961c1b976e7c050860064a3">selectBranch</a>(nodeID, <span class="keywordtype">id</span>), prevNode);</div>
|
||||
<div class="line"><a name="l00721"></a><span class="lineno"> 721</span>  node->setChild(<a class="code" href="namespaceripple.html#a179c66641961c1b976e7c050860064a3">selectBranch</a>(nodeID, <span class="keywordtype">id</span>), std::move(prevNode));</div>
|
||||
<div class="line"><a name="l00722"></a><span class="lineno"> 722</span>  </div>
|
||||
<div class="line"><a name="l00723"></a><span class="lineno"> 723</span>  <span class="keywordflow">if</span> (!nodeID.<a class="code" href="classripple_1_1SHAMapNodeID.html#a205ce1fb183881d67a7b171533141c6b">isRoot</a>())</div>
|
||||
<div class="line"><a name="l00724"></a><span class="lineno"> 724</span>  {</div>
|
||||
@@ -866,406 +866,404 @@ $(function() {
|
||||
<div class="line"><a name="l00795"></a><span class="lineno"> 795</span>  <span class="keyword">auto</span> inner = std::static_pointer_cast<SHAMapInnerNode>(node);</div>
|
||||
<div class="line"><a name="l00796"></a><span class="lineno"> 796</span>  <span class="keywordtype">int</span> branch = <a class="code" href="namespaceripple.html#a179c66641961c1b976e7c050860064a3">selectBranch</a>(nodeID, tag);</div>
|
||||
<div class="line"><a name="l00797"></a><span class="lineno"> 797</span>  assert(inner->isEmptyBranch(branch));</div>
|
||||
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  <span class="keyword">auto</span> newNode = <a class="code" href="namespaceripple.html#a290b06e05d4261e2042dafbb85f6ccf9">makeTypedLeaf</a>(type, std::move(item), <a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>);</div>
|
||||
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  inner->setChild(branch, newNode);</div>
|
||||
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  }</div>
|
||||
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  {</div>
|
||||
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <span class="comment">// this is a leaf node that has to be made an inner node holding two</span></div>
|
||||
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="comment">// items</span></div>
|
||||
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <span class="keyword">auto</span> leaf = std::static_pointer_cast<SHAMapLeafNode>(node);</div>
|
||||
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMapItem const></a> otherItem = leaf->peekItem();</div>
|
||||
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  assert(otherItem && (tag != otherItem->key()));</div>
|
||||
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  </div>
|
||||
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  node = std::make_shared<SHAMapInnerNode>(node->cowid());</div>
|
||||
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  </div>
|
||||
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> b1, b2;</div>
|
||||
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  </div>
|
||||
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  <span class="keywordflow">while</span> ((b1 = <a class="code" href="namespaceripple.html#a179c66641961c1b976e7c050860064a3">selectBranch</a>(nodeID, tag)) ==</div>
|
||||
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  (b2 = <a class="code" href="namespaceripple.html#a179c66641961c1b976e7c050860064a3">selectBranch</a>(nodeID, otherItem->key())))</div>
|
||||
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  {</div>
|
||||
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/push.html">push</a>({node, nodeID});</div>
|
||||
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  </div>
|
||||
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="comment">// we need a new inner node, since both go on same branch at this</span></div>
|
||||
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  <span class="comment">// level</span></div>
|
||||
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  nodeID = nodeID.getChildNodeID(b1);</div>
|
||||
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  node = std::make_shared<SHAMapInnerNode>(<a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>);</div>
|
||||
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  }</div>
|
||||
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  </div>
|
||||
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  <span class="comment">// we can add the two leaf nodes here</span></div>
|
||||
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  assert(node->isInner());</div>
|
||||
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  </div>
|
||||
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  <span class="keyword">auto</span> inner = <span class="keyword">static_cast<</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">></span>(node.<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr/get.html">get</a>());</div>
|
||||
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  inner-><a class="code" href="classripple_1_1SHAMapInnerNode.html#a816fb1a18b49832dcffccc073a5dd929">setChild</a>(b1, <a class="code" href="namespaceripple.html#a290b06e05d4261e2042dafbb85f6ccf9">makeTypedLeaf</a>(type, std::move(item), <a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>));</div>
|
||||
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  inner->setChild(b2, <a class="code" href="namespaceripple.html#a290b06e05d4261e2042dafbb85f6ccf9">makeTypedLeaf</a>(type, std::move(otherItem), <a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>));</div>
|
||||
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  }</div>
|
||||
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  </div>
|
||||
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <a class="code" href="classripple_1_1SHAMap.html#a36ba184d7125776bff17e081e9e1d7ed">dirtyUp</a>(stack, tag, node);</div>
|
||||
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span> }</div>
|
||||
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span>  </div>
|
||||
<div class="line"><a name="l00836"></a><span class="lineno"> 836</span> <span class="keywordtype">bool</span></div>
|
||||
<div class="line"><a name="l00837"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ad628222b8fa175537889873ff6724cc0"> 837</a></span> <a class="code" href="classripple_1_1SHAMap.html#ad628222b8fa175537889873ff6724cc0">SHAMap::addItem</a>(<a class="code" href="namespaceripple.html#ae0356b1de00f841c554c830be509dd58">SHAMapNodeType</a> type, <a class="code" href="classripple_1_1SHAMapItem.html">SHAMapItem</a>&& i)</div>
|
||||
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span> {</div>
|
||||
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span>  <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMap.html#a9bc9928b273e0467788329faa8f65e96">addGiveItem</a>(type, std::make_shared<SHAMapItem const>(std::move(i)));</div>
|
||||
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span> }</div>
|
||||
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span>  </div>
|
||||
<div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a></div>
|
||||
<div class="line"><a name="l00843"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a9b0dff3c3bf35efc30104c93becdc079"> 843</a></span> <a class="code" href="classripple_1_1SHAMap.html#a9b0dff3c3bf35efc30104c93becdc079">SHAMap::getHash</a>()<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="keyword">auto</span> hash = <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->getHash();</div>
|
||||
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  <span class="keywordflow">if</span> (hash.isZero())</div>
|
||||
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  {</div>
|
||||
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  <span class="keyword">const_cast<</span><a class="code" href="classripple_1_1SHAMap.html">SHAMap</a>&<span class="keyword">></span>(*this).<a class="code" href="classripple_1_1SHAMap.html#aee5ccc6cf9fa63aa25765227007893fb">unshare</a>();</div>
|
||||
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  hash = <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->getHash();</div>
|
||||
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  }</div>
|
||||
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <span class="keywordflow">return</span> hash;</div>
|
||||
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span> }</div>
|
||||
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  </div>
|
||||
<div class="line"><a name="l00854"></a><span class="lineno"> 854</span> <span class="keywordtype">bool</span></div>
|
||||
<div class="line"><a name="l00855"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ab40ce9ae2e8df178c78440b40b6a2cda"> 855</a></span> <a class="code" href="classripple_1_1SHAMap.html#ab40ce9ae2e8df178c78440b40b6a2cda">SHAMap::updateGiveItem</a>(</div>
|
||||
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <a class="code" href="namespaceripple.html#ae0356b1de00f841c554c830be509dd58">SHAMapNodeType</a> type,</div>
|
||||
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMapItem const></a> item)</div>
|
||||
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span> {</div>
|
||||
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <span class="comment">// can't change the tag but can change the hash</span></div>
|
||||
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  <a class="code" href="classripple_1_1base__uint.html">uint256</a> tag = item->key();</div>
|
||||
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  </div>
|
||||
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  assert(<a class="code" href="classripple_1_1SHAMap.html#a50ed233b23a5065f500249cf23f1a183">state_</a> != <a class="code" href="namespaceripple.html#a49003667116eb98c6e966f36e5dd1c77a11efd9ae6f76e706e3f1b34d97584ebc">SHAMapState::Immutable</a>);</div>
|
||||
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  </div>
|
||||
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack.html">SharedPtrNodeStack</a> stack;</div>
|
||||
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  <a class="code" href="classripple_1_1SHAMap.html#a57c9afd6af077bbca5efc4ee640c7a2d">walkTowardsKey</a>(tag, &stack);</div>
|
||||
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  </div>
|
||||
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  <span class="keywordflow">if</span> (stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/empty.html">empty</a>())</div>
|
||||
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  Throw<SHAMapMissingNode>(<a class="code" href="classripple_1_1SHAMap.html#a343edca635d6cf2df19026569be34313">type_</a>, tag);</div>
|
||||
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  </div>
|
||||
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keyword">auto</span> node = std::dynamic_pointer_cast<SHAMapLeafNode>(stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>().<a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">first</a>);</div>
|
||||
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  <span class="keyword">auto</span> nodeID = stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>().<a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">second</a>;</div>
|
||||
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/pop.html">pop</a>();</div>
|
||||
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  </div>
|
||||
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  <span class="keywordflow">if</span> (!node || (node->peekItem()->key() != tag))</div>
|
||||
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  {</div>
|
||||
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  assert(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  }</div>
|
||||
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  </div>
|
||||
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  <span class="keywordflow">if</span> (node->getType() != type)</div>
|
||||
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  {</div>
|
||||
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a3dfb8e2e3eecccdb5cf78ff21bca069c">fatal</a>()) << <span class="stringliteral">"SHAMap::setItem: cross-type change!"</span>;</div>
|
||||
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  }</div>
|
||||
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  </div>
|
||||
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  node = <a class="code" href="classripple_1_1SHAMap.html#ad4a7aa36e5d6888012e4e4414f98b73c">unshareNode</a>(std::move(node), nodeID);</div>
|
||||
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  </div>
|
||||
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <span class="keywordflow">if</span> (node->setItem(std::move(item)))</div>
|
||||
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  <a class="code" href="classripple_1_1SHAMap.html#a36ba184d7125776bff17e081e9e1d7ed">dirtyUp</a>(stack, tag, node);</div>
|
||||
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  </div>
|
||||
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span> }</div>
|
||||
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span>  </div>
|
||||
<div class="line"><a name="l00894"></a><span class="lineno"> 894</span> <span class="keywordtype">bool</span></div>
|
||||
<div class="line"><a name="l00895"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ad530edc60b33c2eb590d2be1cb12f2de"> 895</a></span> <a class="code" href="classripple_1_1SHAMap.html#ad530edc60b33c2eb590d2be1cb12f2de">SHAMap::fetchRoot</a>(<a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>& hash, <a class="code" href="classripple_1_1SHAMapSyncFilter.html">SHAMapSyncFilter</a>* filter)</div>
|
||||
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span> {</div>
|
||||
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  <span class="keywordflow">if</span> (hash == <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->getHash())</div>
|
||||
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  </div>
|
||||
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  <span class="keywordflow">if</span> (<span class="keyword">auto</span> stream = <a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>())</div>
|
||||
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  {</div>
|
||||
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a343edca635d6cf2df19026569be34313">type_</a> == <a class="code" href="namespaceripple.html#a5d9fe757c37a7602a883d30b14e1bf3cae6bed345f53943469741d7295552fcd4">SHAMapType::TRANSACTION</a>)</div>
|
||||
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  {</div>
|
||||
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  stream << <span class="stringliteral">"Fetch root TXN node "</span> << hash;</div>
|
||||
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  }</div>
|
||||
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a343edca635d6cf2df19026569be34313">type_</a> == <a class="code" href="namespaceripple.html#a5d9fe757c37a7602a883d30b14e1bf3ca2b848a8cc886d253d21a77c43cd50aae">SHAMapType::STATE</a>)</div>
|
||||
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  {</div>
|
||||
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  stream << <span class="stringliteral">"Fetch root STATE node "</span> << hash;</div>
|
||||
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  }</div>
|
||||
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  {</div>
|
||||
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  stream << <span class="stringliteral">"Fetch root SHAMap node "</span> << hash;</div>
|
||||
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  }</div>
|
||||
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  }</div>
|
||||
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  </div>
|
||||
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  <span class="keyword">auto</span> newRoot = <a class="code" href="classripple_1_1SHAMap.html#a03833149ffd297c6817572a2c082a3c7">fetchNodeNT</a>(hash, filter);</div>
|
||||
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  </div>
|
||||
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  <span class="keywordflow">if</span> (newRoot)</div>
|
||||
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  {</div>
|
||||
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a> = newRoot;</div>
|
||||
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  assert(<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->getHash() == hash);</div>
|
||||
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  }</div>
|
||||
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  </div>
|
||||
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span> }</div>
|
||||
<div class="line"><a name="l00927"></a><span class="lineno"> 927</span>  </div>
|
||||
<div class="line"><a name="l00940"></a><span class="lineno"> 940</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMapTreeNode></a></div>
|
||||
<div class="line"><a name="l00941"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a4756fdd40d2fdb22002ab4d3e25ebde9"> 941</a></span> <a class="code" href="classripple_1_1SHAMap.html#a4756fdd40d2fdb22002ab4d3e25ebde9">SHAMap::writeNode</a>(<a class="code" href="namespaceripple.html#a57d7e7b27df7e719fdf5569f96be60a3">NodeObjectType</a> t, <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMapTreeNode></a> node)<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  assert(node->cowid() == 0);</div>
|
||||
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  assert(<a class="code" href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">backed_</a>);</div>
|
||||
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  </div>
|
||||
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  <a class="code" href="classripple_1_1SHAMap.html#ad0807d9637171e188518d9e453c4e972">canonicalize</a>(node->getHash(), node);</div>
|
||||
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  </div>
|
||||
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  <a class="code" href="classripple_1_1Serializer.html">Serializer</a> s;</div>
|
||||
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  node->serializeWithPrefix(s);</div>
|
||||
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  <a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#a2618f6f7bd3709acf853db111c814df2">db</a>().<a class="code" href="classripple_1_1NodeStore_1_1Database.html#a7da2336581ee3348aad97c0d885658d0">store</a>(</div>
|
||||
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  t, std::move(s.<a class="code" href="classripple_1_1Serializer.html#a6d7436e5990cb278bd924cef9396df3c">modData</a>()), node->getHash().as_uint256(), <a class="code" href="classripple_1_1SHAMap.html#acbedaf0be7acd2816e01be821fdc4697">ledgerSeq_</a>);</div>
|
||||
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span>  <span class="keywordflow">return</span> node;</div>
|
||||
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span> }</div>
|
||||
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span>  </div>
|
||||
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="comment">// We can't modify an inner node someone else might have a</span></div>
|
||||
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="comment">// pointer to because flushing modifies inner nodes -- it</span></div>
|
||||
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="comment">// makes them point to canonical/shared nodes.</span></div>
|
||||
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <span class="keyword">template</span> <<span class="keyword">class</span> Node></div>
|
||||
<div class="line"><a name="l00959"></a><span class="lineno"> 959</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<Node></a></div>
|
||||
<div class="line"><a name="l00960"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a5afb093086264fa6ce9573d4703e1e85"> 960</a></span> <a class="code" href="classripple_1_1SHAMap.html#a5afb093086264fa6ce9573d4703e1e85">SHAMap::preFlushNode</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<Node></a> node)<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="comment">// A shared node should never need to be flushed</span></div>
|
||||
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  <span class="comment">// because that would imply someone modified it</span></div>
|
||||
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  assert(node->cowid() != 0);</div>
|
||||
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  </div>
|
||||
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  <span class="keywordflow">if</span> (node->cowid() != <a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>)</div>
|
||||
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  {</div>
|
||||
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="comment">// Node is not uniquely ours, so unshare it before</span></div>
|
||||
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  <span class="comment">// possibly modifying it</span></div>
|
||||
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  node = std::static_pointer_cast<Node>(node->clone(<a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>));</div>
|
||||
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  }</div>
|
||||
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span>  <span class="keywordflow">return</span> node;</div>
|
||||
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span> }</div>
|
||||
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span>  </div>
|
||||
<div class="line"><a name="l00975"></a><span class="lineno"> 975</span> <span class="keywordtype">int</span></div>
|
||||
<div class="line"><a name="l00976"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#aee5ccc6cf9fa63aa25765227007893fb"> 976</a></span> <a class="code" href="classripple_1_1SHAMap.html#aee5ccc6cf9fa63aa25765227007893fb">SHAMap::unshare</a>()</div>
|
||||
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span> {</div>
|
||||
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  <span class="comment">// Don't share nodes with parent map</span></div>
|
||||
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span>  <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMap.html#a64d84916fb3113b9c855dbdad85cc0c2">walkSubTree</a>(<span class="keyword">false</span>, <a class="code" href="namespaceripple.html#a57d7e7b27df7e719fdf5569f96be60a3ac9d2b0df1bd24ef0d09db1040dceac6b">hotUNKNOWN</a>);</div>
|
||||
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span> }</div>
|
||||
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span>  </div>
|
||||
<div class="line"><a name="l00982"></a><span class="lineno"> 982</span> <span class="keywordtype">int</span></div>
|
||||
<div class="line"><a name="l00983"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ae6fddc16c43b58e725afde738f4a70a8"> 983</a></span> <a class="code" href="classripple_1_1SHAMap.html#ae6fddc16c43b58e725afde738f4a70a8">SHAMap::flushDirty</a>(<a class="code" href="namespaceripple.html#a57d7e7b27df7e719fdf5569f96be60a3">NodeObjectType</a> t)</div>
|
||||
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span> {</div>
|
||||
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="comment">// We only write back if this map is backed.</span></div>
|
||||
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span>  <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMap.html#a64d84916fb3113b9c855dbdad85cc0c2">walkSubTree</a>(<a class="code" href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">backed_</a>, t);</div>
|
||||
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span> }</div>
|
||||
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span>  </div>
|
||||
<div class="line"><a name="l00989"></a><span class="lineno"> 989</span> <span class="keywordtype">int</span></div>
|
||||
<div class="line"><a name="l00990"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a64d84916fb3113b9c855dbdad85cc0c2"> 990</a></span> <a class="code" href="classripple_1_1SHAMap.html#a64d84916fb3113b9c855dbdad85cc0c2">SHAMap::walkSubTree</a>(<span class="keywordtype">bool</span> doWrite, <a class="code" href="namespaceripple.html#a57d7e7b27df7e719fdf5569f96be60a3">NodeObjectType</a> t)</div>
|
||||
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span> {</div>
|
||||
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  assert(!doWrite || <a class="code" href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">backed_</a>);</div>
|
||||
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  </div>
|
||||
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  <span class="keywordtype">int</span> flushed = 0;</div>
|
||||
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  </div>
|
||||
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  <span class="keywordflow">if</span> (!<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a> || (<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->cowid() == 0))</div>
|
||||
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  <span class="keywordflow">return</span> flushed;</div>
|
||||
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  </div>
|
||||
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->isLeaf())</div>
|
||||
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  { <span class="comment">// special case -- root_ is leaf</span></div>
|
||||
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a> = <a class="code" href="classripple_1_1SHAMap.html#a5afb093086264fa6ce9573d4703e1e85">preFlushNode</a>(std::move(<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>));</div>
|
||||
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->updateHash();</div>
|
||||
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->unshare();</div>
|
||||
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  </div>
|
||||
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  <span class="keywordflow">if</span> (doWrite)</div>
|
||||
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a> = <a class="code" href="classripple_1_1SHAMap.html#a4756fdd40d2fdb22002ab4d3e25ebde9">writeNode</a>(t, std::move(<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>));</div>
|
||||
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  </div>
|
||||
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  <span class="keywordflow">return</span> 1;</div>
|
||||
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  }</div>
|
||||
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  </div>
|
||||
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  <span class="keyword">auto</span> node = std::static_pointer_cast<SHAMapInnerNode>(<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>);</div>
|
||||
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  </div>
|
||||
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  <span class="keywordflow">if</span> (node->isEmpty())</div>
|
||||
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  { <span class="comment">// replace empty root with a new empty root</span></div>
|
||||
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a> = std::make_shared<SHAMapInnerNode>(0);</div>
|
||||
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  <span class="keywordflow">return</span> 1;</div>
|
||||
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  }</div>
|
||||
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  </div>
|
||||
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  <span class="comment">// Stack of {parent,index,child} pointers representing</span></div>
|
||||
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  <span class="comment">// inner nodes we are in the process of flushing</span></div>
|
||||
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <span class="keyword">using</span> StackEntry = <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair<std::shared_ptr<SHAMapInnerNode></a>, <span class="keywordtype">int</span>>;</div>
|
||||
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack.html">std::stack<StackEntry, std::vector<StackEntry></a>> stack;</div>
|
||||
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  </div>
|
||||
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  node = <a class="code" href="classripple_1_1SHAMap.html#a5afb093086264fa6ce9573d4703e1e85">preFlushNode</a>(std::move(node));</div>
|
||||
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  </div>
|
||||
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  <span class="keywordtype">int</span> pos = 0;</div>
|
||||
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  </div>
|
||||
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="comment">// We can't flush an inner node until we flush its children</span></div>
|
||||
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  <span class="keywordflow">while</span> (1)</div>
|
||||
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  {</div>
|
||||
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  <span class="keywordflow">while</span> (pos < <a class="code" href="classripple_1_1SHAMap.html#af8599964238eb94d795606f220654db9">branchFactor</a>)</div>
|
||||
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  {</div>
|
||||
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  <span class="keywordflow">if</span> (node->isEmptyBranch(pos))</div>
|
||||
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  {</div>
|
||||
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  ++pos;</div>
|
||||
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  }</div>
|
||||
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  {</div>
|
||||
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  <span class="comment">// No need to do I/O. If the node isn't linked,</span></div>
|
||||
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  <span class="comment">// it can't need to be flushed</span></div>
|
||||
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="keywordtype">int</span> branch = pos;</div>
|
||||
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  <span class="keyword">auto</span> child = node->getChild(pos++);</div>
|
||||
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  </div>
|
||||
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  <span class="keywordflow">if</span> (child && (child->cowid() != 0))</div>
|
||||
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  {</div>
|
||||
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  <span class="comment">// This is a node that needs to be flushed</span></div>
|
||||
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  </div>
|
||||
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  child = <a class="code" href="classripple_1_1SHAMap.html#a5afb093086264fa6ce9573d4703e1e85">preFlushNode</a>(std::move(child));</div>
|
||||
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  </div>
|
||||
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  <span class="keywordflow">if</span> (child->isInner())</div>
|
||||
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  {</div>
|
||||
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  <span class="comment">// save our place and work on this node</span></div>
|
||||
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  </div>
|
||||
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/emplace.html">emplace</a>(std::move(node), branch);</div>
|
||||
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="comment">// The semantics of this changes when we move to c++-20</span></div>
|
||||
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  <span class="comment">// Right now no move will occur; With c++-20 child will</span></div>
|
||||
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  <span class="comment">// be moved from.</span></div>
|
||||
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  node = std::static_pointer_cast<SHAMapInnerNode>(</div>
|
||||
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  std::move(child));</div>
|
||||
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  pos = 0;</div>
|
||||
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  }</div>
|
||||
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  {</div>
|
||||
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  <span class="comment">// flush this leaf</span></div>
|
||||
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  ++flushed;</div>
|
||||
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  </div>
|
||||
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  assert(node->cowid() == <a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>);</div>
|
||||
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  child->updateHash();</div>
|
||||
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  child->unshare();</div>
|
||||
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  </div>
|
||||
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  <span class="keywordflow">if</span> (doWrite)</div>
|
||||
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  child = <a class="code" href="classripple_1_1SHAMap.html#a4756fdd40d2fdb22002ab4d3e25ebde9">writeNode</a>(t, std::move(child));</div>
|
||||
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  </div>
|
||||
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  node->shareChild(branch, child);</div>
|
||||
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  }</div>
|
||||
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  }</div>
|
||||
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  }</div>
|
||||
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  }</div>
|
||||
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  </div>
|
||||
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  <span class="comment">// update the hash of this inner node</span></div>
|
||||
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  node->updateHashDeep();</div>
|
||||
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  </div>
|
||||
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  <span class="comment">// This inner node can now be shared</span></div>
|
||||
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  node->unshare();</div>
|
||||
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  </div>
|
||||
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  <span class="keywordflow">if</span> (doWrite)</div>
|
||||
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  node = std::static_pointer_cast<SHAMapInnerNode>(</div>
|
||||
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  <a class="code" href="classripple_1_1SHAMap.html#a4756fdd40d2fdb22002ab4d3e25ebde9">writeNode</a>(t, std::move(node)));</div>
|
||||
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  </div>
|
||||
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  ++flushed;</div>
|
||||
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  </div>
|
||||
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  <span class="keywordflow">if</span> (stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/empty.html">empty</a>())</div>
|
||||
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  </div>
|
||||
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  <span class="keyword">auto</span> parent = std::move(stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>().first);</div>
|
||||
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  pos = stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>().second;</div>
|
||||
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/pop.html">pop</a>();</div>
|
||||
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  </div>
|
||||
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  <span class="comment">// Hook this inner node to its parent</span></div>
|
||||
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  assert(parent->cowid() == <a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>);</div>
|
||||
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  parent->shareChild(pos, node);</div>
|
||||
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  </div>
|
||||
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  <span class="comment">// Continue with parent's next child, if any</span></div>
|
||||
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  node = std::move(parent);</div>
|
||||
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  ++pos;</div>
|
||||
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  }</div>
|
||||
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  </div>
|
||||
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  <span class="comment">// Last inner node is the new root_</span></div>
|
||||
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a> = std::move(node);</div>
|
||||
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  </div>
|
||||
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>  <span class="keywordflow">return</span> flushed;</div>
|
||||
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span> }</div>
|
||||
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>  </div>
|
||||
<div class="line"><a name="l01114"></a><span class="lineno"> 1114</span> <span class="keywordtype">void</span></div>
|
||||
<div class="line"><a name="l01115"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a16c47b967da5fd093f51e7331f42c9b6"> 1115</a></span> <a class="code" href="classripple_1_1SHAMap.html#a16c47b967da5fd093f51e7331f42c9b6">SHAMap::dump</a>(<span class="keywordtype">bool</span> hash)<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  <span class="keywordtype">int</span> leafCount = 0;</div>
|
||||
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) << <span class="stringliteral">" MAP Contains"</span>;</div>
|
||||
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  </div>
|
||||
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack.html">std::stack<std::pair<SHAMapTreeNode*, SHAMapNodeID></a>> stack;</div>
|
||||
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  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#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>.get(), <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a>()});</div>
|
||||
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  </div>
|
||||
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  <span class="keywordflow">do</span></div>
|
||||
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  {</div>
|
||||
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  <span class="keyword">auto</span> [node, nodeID] = stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>();</div>
|
||||
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/pop.html">pop</a>();</div>
|
||||
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  </div>
|
||||
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) << node->getString(nodeID);</div>
|
||||
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  <span class="keywordflow">if</span> (hash)</div>
|
||||
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  {</div>
|
||||
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) << <span class="stringliteral">"Hash: "</span> << node->getHash();</div>
|
||||
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  }</div>
|
||||
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  </div>
|
||||
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  <span class="keywordflow">if</span> (node->isInner())</div>
|
||||
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  {</div>
|
||||
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  <span class="keyword">auto</span> inner = <span class="keyword">static_cast<</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">></span>(node);</div>
|
||||
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="classripple_1_1SHAMap.html#af8599964238eb94d795606f220654db9">branchFactor</a>; ++i)</div>
|
||||
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  {</div>
|
||||
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <span class="keywordflow">if</span> (!inner->isEmptyBranch(i))</div>
|
||||
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  {</div>
|
||||
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <span class="keyword">auto</span> child = inner->getChildPointer(i);</div>
|
||||
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  <span class="keywordflow">if</span> (child)</div>
|
||||
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  {</div>
|
||||
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  assert(child->getHash() == inner->getChildHash(i));</div>
|
||||
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/push.html">push</a>({child, nodeID.getChildNodeID(i)});</div>
|
||||
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  }</div>
|
||||
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  }</div>
|
||||
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  }</div>
|
||||
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  }</div>
|
||||
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  ++leafCount;</div>
|
||||
<div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>  } <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="l01153"></a><span class="lineno"> 1153</span>  </div>
|
||||
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>  JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) << leafCount << <span class="stringliteral">" resident leaves"</span>;</div>
|
||||
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> }</div>
|
||||
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>  </div>
|
||||
<div class="line"><a name="l01157"></a><span class="lineno"> 1157</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMapTreeNode></a></div>
|
||||
<div class="line"><a name="l01158"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ab39da8aa57430441b1f4fdce7fe6cbfe"> 1158</a></span> <a class="code" href="classripple_1_1SHAMap.html#ab39da8aa57430441b1f4fdce7fe6cbfe">SHAMap::cacheLookup</a>(<a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>& hash)<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  <span class="keyword">auto</span> ret = <a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#a794019ebd9859fb37a7a65b80e8d6df7">getTreeNodeCache</a>(<a class="code" href="classripple_1_1SHAMap.html#acbedaf0be7acd2816e01be821fdc4697">ledgerSeq_</a>)->fetch(hash.<a class="code" href="classripple_1_1SHAMapHash.html#a8f95b5bc14b7085d368f56aeaa17ef4f">as_uint256</a>());</div>
|
||||
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  assert(!ret || !ret->cowid());</div>
|
||||
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keywordflow">return</span> ret;</div>
|
||||
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> }</div>
|
||||
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>  </div>
|
||||
<div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="keywordtype">void</span></div>
|
||||
<div class="line"><a name="l01166"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ad0807d9637171e188518d9e453c4e972"> 1166</a></span> <a class="code" href="classripple_1_1SHAMap.html#ad0807d9637171e188518d9e453c4e972">SHAMap::canonicalize</a>(</div>
|
||||
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>& hash,</div>
|
||||
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMapTreeNode></a>& node)<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  assert(<a class="code" href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">backed_</a>);</div>
|
||||
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  assert(node->cowid() == 0);</div>
|
||||
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  assert(node->getHash() == hash);</div>
|
||||
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  </div>
|
||||
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  <a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#a794019ebd9859fb37a7a65b80e8d6df7">getTreeNodeCache</a>(<a class="code" href="classripple_1_1SHAMap.html#acbedaf0be7acd2816e01be821fdc4697">ledgerSeq_</a>)</div>
|
||||
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>  ->canonicalize_replace_client(hash.<a class="code" href="classripple_1_1SHAMapHash.html#a8f95b5bc14b7085d368f56aeaa17ef4f">as_uint256</a>(), node);</div>
|
||||
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span> }</div>
|
||||
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>  </div>
|
||||
<div class="line"><a name="l01178"></a><span class="lineno"> 1178</span> <span class="keywordtype">void</span></div>
|
||||
<div class="line"><a name="l01179"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a721b11739ad539851737443deeccf96b"> 1179</a></span> <a class="code" href="classripple_1_1SHAMap.html#a721b11739ad539851737443deeccf96b">SHAMap::invariants</a>()<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  (void)<a class="code" href="classripple_1_1SHAMap.html#a9b0dff3c3bf35efc30104c93becdc079">getHash</a>(); <span class="comment">// update node hashes</span></div>
|
||||
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  <span class="keyword">auto</span> node = <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>.get();</div>
|
||||
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  assert(node != <span class="keyword">nullptr</span>);</div>
|
||||
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  assert(!node->isLeaf());</div>
|
||||
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack.html">SharedPtrNodeStack</a> stack;</div>
|
||||
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> leaf = <a class="code" href="classripple_1_1SHAMap.html#aa349ff193020caf2178e28ef6392e675">peekFirstItem</a>(stack); leaf != <span class="keyword">nullptr</span>;</div>
|
||||
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  leaf = <a class="code" href="classripple_1_1SHAMap.html#a5902b212b3da87e522eef58c6c0c83e9">peekNextItem</a>(leaf->peekItem()->key(), stack))</div>
|
||||
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  ;</div>
|
||||
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>  node->invariants(<span class="keyword">true</span>);</div>
|
||||
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span> }</div>
|
||||
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>  </div>
|
||||
<div class="line"><a name="l01192"></a><span class="lineno"> 1192</span> } <span class="comment">// namespace ripple</span></div>
|
||||
<div class="line"><a name="l00798"></a><span class="lineno"> 798</span>  inner->setChild(branch, <a class="code" href="namespaceripple.html#a290b06e05d4261e2042dafbb85f6ccf9">makeTypedLeaf</a>(type, std::move(item), <a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>));</div>
|
||||
<div class="line"><a name="l00799"></a><span class="lineno"> 799</span>  }</div>
|
||||
<div class="line"><a name="l00800"></a><span class="lineno"> 800</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l00801"></a><span class="lineno"> 801</span>  {</div>
|
||||
<div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="comment">// this is a leaf node that has to be made an inner node holding two</span></div>
|
||||
<div class="line"><a name="l00803"></a><span class="lineno"> 803</span>  <span class="comment">// items</span></div>
|
||||
<div class="line"><a name="l00804"></a><span class="lineno"> 804</span>  <span class="keyword">auto</span> leaf = std::static_pointer_cast<SHAMapLeafNode>(node);</div>
|
||||
<div class="line"><a name="l00805"></a><span class="lineno"> 805</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMapItem const></a> otherItem = leaf->peekItem();</div>
|
||||
<div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  assert(otherItem && (tag != otherItem->key()));</div>
|
||||
<div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  </div>
|
||||
<div class="line"><a name="l00808"></a><span class="lineno"> 808</span>  node = std::make_shared<SHAMapInnerNode>(node->cowid());</div>
|
||||
<div class="line"><a name="l00809"></a><span class="lineno"> 809</span>  </div>
|
||||
<div class="line"><a name="l00810"></a><span class="lineno"> 810</span>  <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> b1, b2;</div>
|
||||
<div class="line"><a name="l00811"></a><span class="lineno"> 811</span>  </div>
|
||||
<div class="line"><a name="l00812"></a><span class="lineno"> 812</span>  <span class="keywordflow">while</span> ((b1 = <a class="code" href="namespaceripple.html#a179c66641961c1b976e7c050860064a3">selectBranch</a>(nodeID, tag)) ==</div>
|
||||
<div class="line"><a name="l00813"></a><span class="lineno"> 813</span>  (b2 = <a class="code" href="namespaceripple.html#a179c66641961c1b976e7c050860064a3">selectBranch</a>(nodeID, otherItem->key())))</div>
|
||||
<div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  {</div>
|
||||
<div class="line"><a name="l00815"></a><span class="lineno"> 815</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/push.html">push</a>({node, nodeID});</div>
|
||||
<div class="line"><a name="l00816"></a><span class="lineno"> 816</span>  </div>
|
||||
<div class="line"><a name="l00817"></a><span class="lineno"> 817</span>  <span class="comment">// we need a new inner node, since both go on same branch at this</span></div>
|
||||
<div class="line"><a name="l00818"></a><span class="lineno"> 818</span>  <span class="comment">// level</span></div>
|
||||
<div class="line"><a name="l00819"></a><span class="lineno"> 819</span>  nodeID = nodeID.getChildNodeID(b1);</div>
|
||||
<div class="line"><a name="l00820"></a><span class="lineno"> 820</span>  node = std::make_shared<SHAMapInnerNode>(<a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>);</div>
|
||||
<div class="line"><a name="l00821"></a><span class="lineno"> 821</span>  }</div>
|
||||
<div class="line"><a name="l00822"></a><span class="lineno"> 822</span>  </div>
|
||||
<div class="line"><a name="l00823"></a><span class="lineno"> 823</span>  <span class="comment">// we can add the two leaf nodes here</span></div>
|
||||
<div class="line"><a name="l00824"></a><span class="lineno"> 824</span>  assert(node->isInner());</div>
|
||||
<div class="line"><a name="l00825"></a><span class="lineno"> 825</span>  </div>
|
||||
<div class="line"><a name="l00826"></a><span class="lineno"> 826</span>  <span class="keyword">auto</span> inner = <span class="keyword">static_cast<</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">></span>(node.<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr/get.html">get</a>());</div>
|
||||
<div class="line"><a name="l00827"></a><span class="lineno"> 827</span>  inner-><a class="code" href="classripple_1_1SHAMapInnerNode.html#a7fb5fc0e5d65ed4c3c77537a8fda8d32">setChild</a>(b1, <a class="code" href="namespaceripple.html#a290b06e05d4261e2042dafbb85f6ccf9">makeTypedLeaf</a>(type, std::move(item), <a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>));</div>
|
||||
<div class="line"><a name="l00828"></a><span class="lineno"> 828</span>  inner->setChild(b2, <a class="code" href="namespaceripple.html#a290b06e05d4261e2042dafbb85f6ccf9">makeTypedLeaf</a>(type, std::move(otherItem), <a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>));</div>
|
||||
<div class="line"><a name="l00829"></a><span class="lineno"> 829</span>  }</div>
|
||||
<div class="line"><a name="l00830"></a><span class="lineno"> 830</span>  </div>
|
||||
<div class="line"><a name="l00831"></a><span class="lineno"> 831</span>  <a class="code" href="classripple_1_1SHAMap.html#a36ba184d7125776bff17e081e9e1d7ed">dirtyUp</a>(stack, tag, node);</div>
|
||||
<div class="line"><a name="l00832"></a><span class="lineno"> 832</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a name="l00833"></a><span class="lineno"> 833</span> }</div>
|
||||
<div class="line"><a name="l00834"></a><span class="lineno"> 834</span>  </div>
|
||||
<div class="line"><a name="l00835"></a><span class="lineno"> 835</span> <span class="keywordtype">bool</span></div>
|
||||
<div class="line"><a name="l00836"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ad628222b8fa175537889873ff6724cc0"> 836</a></span> <a class="code" href="classripple_1_1SHAMap.html#ad628222b8fa175537889873ff6724cc0">SHAMap::addItem</a>(<a class="code" href="namespaceripple.html#ae0356b1de00f841c554c830be509dd58">SHAMapNodeType</a> type, <a class="code" href="classripple_1_1SHAMapItem.html">SHAMapItem</a>&& i)</div>
|
||||
<div class="line"><a name="l00837"></a><span class="lineno"> 837</span> {</div>
|
||||
<div class="line"><a name="l00838"></a><span class="lineno"> 838</span>  <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMap.html#a9bc9928b273e0467788329faa8f65e96">addGiveItem</a>(type, std::make_shared<SHAMapItem const>(std::move(i)));</div>
|
||||
<div class="line"><a name="l00839"></a><span class="lineno"> 839</span> }</div>
|
||||
<div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  </div>
|
||||
<div class="line"><a name="l00841"></a><span class="lineno"> 841</span> <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a></div>
|
||||
<div class="line"><a name="l00842"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a9b0dff3c3bf35efc30104c93becdc079"> 842</a></span> <a class="code" href="classripple_1_1SHAMap.html#a9b0dff3c3bf35efc30104c93becdc079">SHAMap::getHash</a>()<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l00843"></a><span class="lineno"> 843</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l00844"></a><span class="lineno"> 844</span>  <span class="keyword">auto</span> hash = <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->getHash();</div>
|
||||
<div class="line"><a name="l00845"></a><span class="lineno"> 845</span>  <span class="keywordflow">if</span> (hash.isZero())</div>
|
||||
<div class="line"><a name="l00846"></a><span class="lineno"> 846</span>  {</div>
|
||||
<div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  <span class="keyword">const_cast<</span><a class="code" href="classripple_1_1SHAMap.html">SHAMap</a>&<span class="keyword">></span>(*this).<a class="code" href="classripple_1_1SHAMap.html#aee5ccc6cf9fa63aa25765227007893fb">unshare</a>();</div>
|
||||
<div class="line"><a name="l00848"></a><span class="lineno"> 848</span>  hash = <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->getHash();</div>
|
||||
<div class="line"><a name="l00849"></a><span class="lineno"> 849</span>  }</div>
|
||||
<div class="line"><a name="l00850"></a><span class="lineno"> 850</span>  <span class="keywordflow">return</span> hash;</div>
|
||||
<div class="line"><a name="l00851"></a><span class="lineno"> 851</span> }</div>
|
||||
<div class="line"><a name="l00852"></a><span class="lineno"> 852</span>  </div>
|
||||
<div class="line"><a name="l00853"></a><span class="lineno"> 853</span> <span class="keywordtype">bool</span></div>
|
||||
<div class="line"><a name="l00854"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ab40ce9ae2e8df178c78440b40b6a2cda"> 854</a></span> <a class="code" href="classripple_1_1SHAMap.html#ab40ce9ae2e8df178c78440b40b6a2cda">SHAMap::updateGiveItem</a>(</div>
|
||||
<div class="line"><a name="l00855"></a><span class="lineno"> 855</span>  <a class="code" href="namespaceripple.html#ae0356b1de00f841c554c830be509dd58">SHAMapNodeType</a> type,</div>
|
||||
<div class="line"><a name="l00856"></a><span class="lineno"> 856</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMapItem const></a> item)</div>
|
||||
<div class="line"><a name="l00857"></a><span class="lineno"> 857</span> {</div>
|
||||
<div class="line"><a name="l00858"></a><span class="lineno"> 858</span>  <span class="comment">// can't change the tag but can change the hash</span></div>
|
||||
<div class="line"><a name="l00859"></a><span class="lineno"> 859</span>  <a class="code" href="classripple_1_1base__uint.html">uint256</a> tag = item->key();</div>
|
||||
<div class="line"><a name="l00860"></a><span class="lineno"> 860</span>  </div>
|
||||
<div class="line"><a name="l00861"></a><span class="lineno"> 861</span>  assert(<a class="code" href="classripple_1_1SHAMap.html#a50ed233b23a5065f500249cf23f1a183">state_</a> != <a class="code" href="namespaceripple.html#a49003667116eb98c6e966f36e5dd1c77a11efd9ae6f76e706e3f1b34d97584ebc">SHAMapState::Immutable</a>);</div>
|
||||
<div class="line"><a name="l00862"></a><span class="lineno"> 862</span>  </div>
|
||||
<div class="line"><a name="l00863"></a><span class="lineno"> 863</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack.html">SharedPtrNodeStack</a> stack;</div>
|
||||
<div class="line"><a name="l00864"></a><span class="lineno"> 864</span>  <a class="code" href="classripple_1_1SHAMap.html#a57c9afd6af077bbca5efc4ee640c7a2d">walkTowardsKey</a>(tag, &stack);</div>
|
||||
<div class="line"><a name="l00865"></a><span class="lineno"> 865</span>  </div>
|
||||
<div class="line"><a name="l00866"></a><span class="lineno"> 866</span>  <span class="keywordflow">if</span> (stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/empty.html">empty</a>())</div>
|
||||
<div class="line"><a name="l00867"></a><span class="lineno"> 867</span>  Throw<SHAMapMissingNode>(<a class="code" href="classripple_1_1SHAMap.html#a343edca635d6cf2df19026569be34313">type_</a>, tag);</div>
|
||||
<div class="line"><a name="l00868"></a><span class="lineno"> 868</span>  </div>
|
||||
<div class="line"><a name="l00869"></a><span class="lineno"> 869</span>  <span class="keyword">auto</span> node = std::dynamic_pointer_cast<SHAMapLeafNode>(stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>().<a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">first</a>);</div>
|
||||
<div class="line"><a name="l00870"></a><span class="lineno"> 870</span>  <span class="keyword">auto</span> nodeID = stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>().<a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">second</a>;</div>
|
||||
<div class="line"><a name="l00871"></a><span class="lineno"> 871</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/pop.html">pop</a>();</div>
|
||||
<div class="line"><a name="l00872"></a><span class="lineno"> 872</span>  </div>
|
||||
<div class="line"><a name="l00873"></a><span class="lineno"> 873</span>  <span class="keywordflow">if</span> (!node || (node->peekItem()->key() != tag))</div>
|
||||
<div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  {</div>
|
||||
<div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  assert(<span class="keyword">false</span>);</div>
|
||||
<div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00877"></a><span class="lineno"> 877</span>  }</div>
|
||||
<div class="line"><a name="l00878"></a><span class="lineno"> 878</span>  </div>
|
||||
<div class="line"><a name="l00879"></a><span class="lineno"> 879</span>  <span class="keywordflow">if</span> (node->getType() != type)</div>
|
||||
<div class="line"><a name="l00880"></a><span class="lineno"> 880</span>  {</div>
|
||||
<div class="line"><a name="l00881"></a><span class="lineno"> 881</span>  JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a3dfb8e2e3eecccdb5cf78ff21bca069c">fatal</a>()) << <span class="stringliteral">"SHAMap::setItem: cross-type change!"</span>;</div>
|
||||
<div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00883"></a><span class="lineno"> 883</span>  }</div>
|
||||
<div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  </div>
|
||||
<div class="line"><a name="l00885"></a><span class="lineno"> 885</span>  node = <a class="code" href="classripple_1_1SHAMap.html#ad4a7aa36e5d6888012e4e4414f98b73c">unshareNode</a>(std::move(node), nodeID);</div>
|
||||
<div class="line"><a name="l00886"></a><span class="lineno"> 886</span>  </div>
|
||||
<div class="line"><a name="l00887"></a><span class="lineno"> 887</span>  <span class="keywordflow">if</span> (node->setItem(std::move(item)))</div>
|
||||
<div class="line"><a name="l00888"></a><span class="lineno"> 888</span>  <a class="code" href="classripple_1_1SHAMap.html#a36ba184d7125776bff17e081e9e1d7ed">dirtyUp</a>(stack, tag, node);</div>
|
||||
<div class="line"><a name="l00889"></a><span class="lineno"> 889</span>  </div>
|
||||
<div class="line"><a name="l00890"></a><span class="lineno"> 890</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a name="l00891"></a><span class="lineno"> 891</span> }</div>
|
||||
<div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  </div>
|
||||
<div class="line"><a name="l00893"></a><span class="lineno"> 893</span> <span class="keywordtype">bool</span></div>
|
||||
<div class="line"><a name="l00894"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ad530edc60b33c2eb590d2be1cb12f2de"> 894</a></span> <a class="code" href="classripple_1_1SHAMap.html#ad530edc60b33c2eb590d2be1cb12f2de">SHAMap::fetchRoot</a>(<a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>& hash, <a class="code" href="classripple_1_1SHAMapSyncFilter.html">SHAMapSyncFilter</a>* filter)</div>
|
||||
<div class="line"><a name="l00895"></a><span class="lineno"> 895</span> {</div>
|
||||
<div class="line"><a name="l00896"></a><span class="lineno"> 896</span>  <span class="keywordflow">if</span> (hash == <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->getHash())</div>
|
||||
<div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a name="l00898"></a><span class="lineno"> 898</span>  </div>
|
||||
<div class="line"><a name="l00899"></a><span class="lineno"> 899</span>  <span class="keywordflow">if</span> (<span class="keyword">auto</span> stream = <a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">trace</a>())</div>
|
||||
<div class="line"><a name="l00900"></a><span class="lineno"> 900</span>  {</div>
|
||||
<div class="line"><a name="l00901"></a><span class="lineno"> 901</span>  <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a343edca635d6cf2df19026569be34313">type_</a> == <a class="code" href="namespaceripple.html#a5d9fe757c37a7602a883d30b14e1bf3cae6bed345f53943469741d7295552fcd4">SHAMapType::TRANSACTION</a>)</div>
|
||||
<div class="line"><a name="l00902"></a><span class="lineno"> 902</span>  {</div>
|
||||
<div class="line"><a name="l00903"></a><span class="lineno"> 903</span>  stream << <span class="stringliteral">"Fetch root TXN node "</span> << hash;</div>
|
||||
<div class="line"><a name="l00904"></a><span class="lineno"> 904</span>  }</div>
|
||||
<div class="line"><a name="l00905"></a><span class="lineno"> 905</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a343edca635d6cf2df19026569be34313">type_</a> == <a class="code" href="namespaceripple.html#a5d9fe757c37a7602a883d30b14e1bf3ca2b848a8cc886d253d21a77c43cd50aae">SHAMapType::STATE</a>)</div>
|
||||
<div class="line"><a name="l00906"></a><span class="lineno"> 906</span>  {</div>
|
||||
<div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  stream << <span class="stringliteral">"Fetch root STATE node "</span> << hash;</div>
|
||||
<div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  }</div>
|
||||
<div class="line"><a name="l00909"></a><span class="lineno"> 909</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l00910"></a><span class="lineno"> 910</span>  {</div>
|
||||
<div class="line"><a name="l00911"></a><span class="lineno"> 911</span>  stream << <span class="stringliteral">"Fetch root SHAMap node "</span> << hash;</div>
|
||||
<div class="line"><a name="l00912"></a><span class="lineno"> 912</span>  }</div>
|
||||
<div class="line"><a name="l00913"></a><span class="lineno"> 913</span>  }</div>
|
||||
<div class="line"><a name="l00914"></a><span class="lineno"> 914</span>  </div>
|
||||
<div class="line"><a name="l00915"></a><span class="lineno"> 915</span>  <span class="keyword">auto</span> newRoot = <a class="code" href="classripple_1_1SHAMap.html#a03833149ffd297c6817572a2c082a3c7">fetchNodeNT</a>(hash, filter);</div>
|
||||
<div class="line"><a name="l00916"></a><span class="lineno"> 916</span>  </div>
|
||||
<div class="line"><a name="l00917"></a><span class="lineno"> 917</span>  <span class="keywordflow">if</span> (newRoot)</div>
|
||||
<div class="line"><a name="l00918"></a><span class="lineno"> 918</span>  {</div>
|
||||
<div class="line"><a name="l00919"></a><span class="lineno"> 919</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a> = newRoot;</div>
|
||||
<div class="line"><a name="l00920"></a><span class="lineno"> 920</span>  assert(<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->getHash() == hash);</div>
|
||||
<div class="line"><a name="l00921"></a><span class="lineno"> 921</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
||||
<div class="line"><a name="l00922"></a><span class="lineno"> 922</span>  }</div>
|
||||
<div class="line"><a name="l00923"></a><span class="lineno"> 923</span>  </div>
|
||||
<div class="line"><a name="l00924"></a><span class="lineno"> 924</span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
||||
<div class="line"><a name="l00925"></a><span class="lineno"> 925</span> }</div>
|
||||
<div class="line"><a name="l00926"></a><span class="lineno"> 926</span>  </div>
|
||||
<div class="line"><a name="l00939"></a><span class="lineno"> 939</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMapTreeNode></a></div>
|
||||
<div class="line"><a name="l00940"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a4756fdd40d2fdb22002ab4d3e25ebde9"> 940</a></span> <a class="code" href="classripple_1_1SHAMap.html#a4756fdd40d2fdb22002ab4d3e25ebde9">SHAMap::writeNode</a>(<a class="code" href="namespaceripple.html#a57d7e7b27df7e719fdf5569f96be60a3">NodeObjectType</a> t, <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMapTreeNode></a> node)<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l00941"></a><span class="lineno"> 941</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l00942"></a><span class="lineno"> 942</span>  assert(node->cowid() == 0);</div>
|
||||
<div class="line"><a name="l00943"></a><span class="lineno"> 943</span>  assert(<a class="code" href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">backed_</a>);</div>
|
||||
<div class="line"><a name="l00944"></a><span class="lineno"> 944</span>  </div>
|
||||
<div class="line"><a name="l00945"></a><span class="lineno"> 945</span>  <a class="code" href="classripple_1_1SHAMap.html#ad0807d9637171e188518d9e453c4e972">canonicalize</a>(node->getHash(), node);</div>
|
||||
<div class="line"><a name="l00946"></a><span class="lineno"> 946</span>  </div>
|
||||
<div class="line"><a name="l00947"></a><span class="lineno"> 947</span>  <a class="code" href="classripple_1_1Serializer.html">Serializer</a> s;</div>
|
||||
<div class="line"><a name="l00948"></a><span class="lineno"> 948</span>  node->serializeWithPrefix(s);</div>
|
||||
<div class="line"><a name="l00949"></a><span class="lineno"> 949</span>  <a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#a2618f6f7bd3709acf853db111c814df2">db</a>().<a class="code" href="classripple_1_1NodeStore_1_1Database.html#a7da2336581ee3348aad97c0d885658d0">store</a>(</div>
|
||||
<div class="line"><a name="l00950"></a><span class="lineno"> 950</span>  t, std::move(s.<a class="code" href="classripple_1_1Serializer.html#a6d7436e5990cb278bd924cef9396df3c">modData</a>()), node->getHash().as_uint256(), <a class="code" href="classripple_1_1SHAMap.html#acbedaf0be7acd2816e01be821fdc4697">ledgerSeq_</a>);</div>
|
||||
<div class="line"><a name="l00951"></a><span class="lineno"> 951</span>  <span class="keywordflow">return</span> node;</div>
|
||||
<div class="line"><a name="l00952"></a><span class="lineno"> 952</span> }</div>
|
||||
<div class="line"><a name="l00953"></a><span class="lineno"> 953</span>  </div>
|
||||
<div class="line"><a name="l00954"></a><span class="lineno"> 954</span> <span class="comment">// We can't modify an inner node someone else might have a</span></div>
|
||||
<div class="line"><a name="l00955"></a><span class="lineno"> 955</span> <span class="comment">// pointer to because flushing modifies inner nodes -- it</span></div>
|
||||
<div class="line"><a name="l00956"></a><span class="lineno"> 956</span> <span class="comment">// makes them point to canonical/shared nodes.</span></div>
|
||||
<div class="line"><a name="l00957"></a><span class="lineno"> 957</span> <span class="keyword">template</span> <<span class="keyword">class</span> Node></div>
|
||||
<div class="line"><a name="l00958"></a><span class="lineno"> 958</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<Node></a></div>
|
||||
<div class="line"><a name="l00959"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a5afb093086264fa6ce9573d4703e1e85"> 959</a></span> <a class="code" href="classripple_1_1SHAMap.html#a5afb093086264fa6ce9573d4703e1e85">SHAMap::preFlushNode</a>(<a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<Node></a> node)<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l00960"></a><span class="lineno"> 960</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l00961"></a><span class="lineno"> 961</span>  <span class="comment">// A shared node should never need to be flushed</span></div>
|
||||
<div class="line"><a name="l00962"></a><span class="lineno"> 962</span>  <span class="comment">// because that would imply someone modified it</span></div>
|
||||
<div class="line"><a name="l00963"></a><span class="lineno"> 963</span>  assert(node->cowid() != 0);</div>
|
||||
<div class="line"><a name="l00964"></a><span class="lineno"> 964</span>  </div>
|
||||
<div class="line"><a name="l00965"></a><span class="lineno"> 965</span>  <span class="keywordflow">if</span> (node->cowid() != <a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>)</div>
|
||||
<div class="line"><a name="l00966"></a><span class="lineno"> 966</span>  {</div>
|
||||
<div class="line"><a name="l00967"></a><span class="lineno"> 967</span>  <span class="comment">// Node is not uniquely ours, so unshare it before</span></div>
|
||||
<div class="line"><a name="l00968"></a><span class="lineno"> 968</span>  <span class="comment">// possibly modifying it</span></div>
|
||||
<div class="line"><a name="l00969"></a><span class="lineno"> 969</span>  node = std::static_pointer_cast<Node>(node->clone(<a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>));</div>
|
||||
<div class="line"><a name="l00970"></a><span class="lineno"> 970</span>  }</div>
|
||||
<div class="line"><a name="l00971"></a><span class="lineno"> 971</span>  <span class="keywordflow">return</span> node;</div>
|
||||
<div class="line"><a name="l00972"></a><span class="lineno"> 972</span> }</div>
|
||||
<div class="line"><a name="l00973"></a><span class="lineno"> 973</span>  </div>
|
||||
<div class="line"><a name="l00974"></a><span class="lineno"> 974</span> <span class="keywordtype">int</span></div>
|
||||
<div class="line"><a name="l00975"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#aee5ccc6cf9fa63aa25765227007893fb"> 975</a></span> <a class="code" href="classripple_1_1SHAMap.html#aee5ccc6cf9fa63aa25765227007893fb">SHAMap::unshare</a>()</div>
|
||||
<div class="line"><a name="l00976"></a><span class="lineno"> 976</span> {</div>
|
||||
<div class="line"><a name="l00977"></a><span class="lineno"> 977</span>  <span class="comment">// Don't share nodes with parent map</span></div>
|
||||
<div class="line"><a name="l00978"></a><span class="lineno"> 978</span>  <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMap.html#a64d84916fb3113b9c855dbdad85cc0c2">walkSubTree</a>(<span class="keyword">false</span>, <a class="code" href="namespaceripple.html#a57d7e7b27df7e719fdf5569f96be60a3ac9d2b0df1bd24ef0d09db1040dceac6b">hotUNKNOWN</a>);</div>
|
||||
<div class="line"><a name="l00979"></a><span class="lineno"> 979</span> }</div>
|
||||
<div class="line"><a name="l00980"></a><span class="lineno"> 980</span>  </div>
|
||||
<div class="line"><a name="l00981"></a><span class="lineno"> 981</span> <span class="keywordtype">int</span></div>
|
||||
<div class="line"><a name="l00982"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ae6fddc16c43b58e725afde738f4a70a8"> 982</a></span> <a class="code" href="classripple_1_1SHAMap.html#ae6fddc16c43b58e725afde738f4a70a8">SHAMap::flushDirty</a>(<a class="code" href="namespaceripple.html#a57d7e7b27df7e719fdf5569f96be60a3">NodeObjectType</a> t)</div>
|
||||
<div class="line"><a name="l00983"></a><span class="lineno"> 983</span> {</div>
|
||||
<div class="line"><a name="l00984"></a><span class="lineno"> 984</span>  <span class="comment">// We only write back if this map is backed.</span></div>
|
||||
<div class="line"><a name="l00985"></a><span class="lineno"> 985</span>  <span class="keywordflow">return</span> <a class="code" href="classripple_1_1SHAMap.html#a64d84916fb3113b9c855dbdad85cc0c2">walkSubTree</a>(<a class="code" href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">backed_</a>, t);</div>
|
||||
<div class="line"><a name="l00986"></a><span class="lineno"> 986</span> }</div>
|
||||
<div class="line"><a name="l00987"></a><span class="lineno"> 987</span>  </div>
|
||||
<div class="line"><a name="l00988"></a><span class="lineno"> 988</span> <span class="keywordtype">int</span></div>
|
||||
<div class="line"><a name="l00989"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a64d84916fb3113b9c855dbdad85cc0c2"> 989</a></span> <a class="code" href="classripple_1_1SHAMap.html#a64d84916fb3113b9c855dbdad85cc0c2">SHAMap::walkSubTree</a>(<span class="keywordtype">bool</span> doWrite, <a class="code" href="namespaceripple.html#a57d7e7b27df7e719fdf5569f96be60a3">NodeObjectType</a> t)</div>
|
||||
<div class="line"><a name="l00990"></a><span class="lineno"> 990</span> {</div>
|
||||
<div class="line"><a name="l00991"></a><span class="lineno"> 991</span>  assert(!doWrite || <a class="code" href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">backed_</a>);</div>
|
||||
<div class="line"><a name="l00992"></a><span class="lineno"> 992</span>  </div>
|
||||
<div class="line"><a name="l00993"></a><span class="lineno"> 993</span>  <span class="keywordtype">int</span> flushed = 0;</div>
|
||||
<div class="line"><a name="l00994"></a><span class="lineno"> 994</span>  </div>
|
||||
<div class="line"><a name="l00995"></a><span class="lineno"> 995</span>  <span class="keywordflow">if</span> (!<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a> || (<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->cowid() == 0))</div>
|
||||
<div class="line"><a name="l00996"></a><span class="lineno"> 996</span>  <span class="keywordflow">return</span> flushed;</div>
|
||||
<div class="line"><a name="l00997"></a><span class="lineno"> 997</span>  </div>
|
||||
<div class="line"><a name="l00998"></a><span class="lineno"> 998</span>  <span class="keywordflow">if</span> (<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->isLeaf())</div>
|
||||
<div class="line"><a name="l00999"></a><span class="lineno"> 999</span>  { <span class="comment">// special case -- root_ is leaf</span></div>
|
||||
<div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a> = <a class="code" href="classripple_1_1SHAMap.html#a5afb093086264fa6ce9573d4703e1e85">preFlushNode</a>(std::move(<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>));</div>
|
||||
<div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->updateHash();</div>
|
||||
<div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>->unshare();</div>
|
||||
<div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>  </div>
|
||||
<div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>  <span class="keywordflow">if</span> (doWrite)</div>
|
||||
<div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a> = <a class="code" href="classripple_1_1SHAMap.html#a4756fdd40d2fdb22002ab4d3e25ebde9">writeNode</a>(t, std::move(<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>));</div>
|
||||
<div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>  </div>
|
||||
<div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>  <span class="keywordflow">return</span> 1;</div>
|
||||
<div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>  }</div>
|
||||
<div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>  </div>
|
||||
<div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>  <span class="keyword">auto</span> node = std::static_pointer_cast<SHAMapInnerNode>(<a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>);</div>
|
||||
<div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>  </div>
|
||||
<div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>  <span class="keywordflow">if</span> (node->isEmpty())</div>
|
||||
<div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>  { <span class="comment">// replace empty root with a new empty root</span></div>
|
||||
<div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a> = std::make_shared<SHAMapInnerNode>(0);</div>
|
||||
<div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>  <span class="keywordflow">return</span> 1;</div>
|
||||
<div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>  }</div>
|
||||
<div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>  </div>
|
||||
<div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>  <span class="comment">// Stack of {parent,index,child} pointers representing</span></div>
|
||||
<div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>  <span class="comment">// inner nodes we are in the process of flushing</span></div>
|
||||
<div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>  <span class="keyword">using</span> StackEntry = <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair<std::shared_ptr<SHAMapInnerNode></a>, <span class="keywordtype">int</span>>;</div>
|
||||
<div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack.html">std::stack<StackEntry, std::vector<StackEntry></a>> stack;</div>
|
||||
<div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>  </div>
|
||||
<div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>  node = <a class="code" href="classripple_1_1SHAMap.html#a5afb093086264fa6ce9573d4703e1e85">preFlushNode</a>(std::move(node));</div>
|
||||
<div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>  </div>
|
||||
<div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>  <span class="keywordtype">int</span> pos = 0;</div>
|
||||
<div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>  </div>
|
||||
<div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>  <span class="comment">// We can't flush an inner node until we flush its children</span></div>
|
||||
<div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>  <span class="keywordflow">while</span> (1)</div>
|
||||
<div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>  {</div>
|
||||
<div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>  <span class="keywordflow">while</span> (pos < <a class="code" href="classripple_1_1SHAMap.html#af8599964238eb94d795606f220654db9">branchFactor</a>)</div>
|
||||
<div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>  {</div>
|
||||
<div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>  <span class="keywordflow">if</span> (node->isEmptyBranch(pos))</div>
|
||||
<div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>  {</div>
|
||||
<div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>  ++pos;</div>
|
||||
<div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>  }</div>
|
||||
<div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>  {</div>
|
||||
<div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>  <span class="comment">// No need to do I/O. If the node isn't linked,</span></div>
|
||||
<div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>  <span class="comment">// it can't need to be flushed</span></div>
|
||||
<div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>  <span class="keywordtype">int</span> branch = pos;</div>
|
||||
<div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>  <span class="keyword">auto</span> child = node->getChild(pos++);</div>
|
||||
<div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>  </div>
|
||||
<div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>  <span class="keywordflow">if</span> (child && (child->cowid() != 0))</div>
|
||||
<div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>  {</div>
|
||||
<div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>  <span class="comment">// This is a node that needs to be flushed</span></div>
|
||||
<div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>  </div>
|
||||
<div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>  child = <a class="code" href="classripple_1_1SHAMap.html#a5afb093086264fa6ce9573d4703e1e85">preFlushNode</a>(std::move(child));</div>
|
||||
<div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>  </div>
|
||||
<div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>  <span class="keywordflow">if</span> (child->isInner())</div>
|
||||
<div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>  {</div>
|
||||
<div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>  <span class="comment">// save our place and work on this node</span></div>
|
||||
<div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>  </div>
|
||||
<div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/emplace.html">emplace</a>(std::move(node), branch);</div>
|
||||
<div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>  <span class="comment">// The semantics of this changes when we move to c++-20</span></div>
|
||||
<div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>  <span class="comment">// Right now no move will occur; With c++-20 child will</span></div>
|
||||
<div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>  <span class="comment">// be moved from.</span></div>
|
||||
<div class="line"><a name="l01057"></a><span class="lineno"> 1057</span>  node = std::static_pointer_cast<SHAMapInnerNode>(</div>
|
||||
<div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>  std::move(child));</div>
|
||||
<div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>  pos = 0;</div>
|
||||
<div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>  }</div>
|
||||
<div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>  {</div>
|
||||
<div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>  <span class="comment">// flush this leaf</span></div>
|
||||
<div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>  ++flushed;</div>
|
||||
<div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>  </div>
|
||||
<div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>  assert(node->cowid() == <a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>);</div>
|
||||
<div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>  child->updateHash();</div>
|
||||
<div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>  child->unshare();</div>
|
||||
<div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>  </div>
|
||||
<div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>  <span class="keywordflow">if</span> (doWrite)</div>
|
||||
<div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>  child = <a class="code" href="classripple_1_1SHAMap.html#a4756fdd40d2fdb22002ab4d3e25ebde9">writeNode</a>(t, std::move(child));</div>
|
||||
<div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>  </div>
|
||||
<div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>  node->shareChild(branch, child);</div>
|
||||
<div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>  }</div>
|
||||
<div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>  }</div>
|
||||
<div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>  }</div>
|
||||
<div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>  }</div>
|
||||
<div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>  </div>
|
||||
<div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>  <span class="comment">// update the hash of this inner node</span></div>
|
||||
<div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>  node->updateHashDeep();</div>
|
||||
<div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>  </div>
|
||||
<div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>  <span class="comment">// This inner node can now be shared</span></div>
|
||||
<div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>  node->unshare();</div>
|
||||
<div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>  </div>
|
||||
<div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>  <span class="keywordflow">if</span> (doWrite)</div>
|
||||
<div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>  node = std::static_pointer_cast<SHAMapInnerNode>(</div>
|
||||
<div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>  <a class="code" href="classripple_1_1SHAMap.html#a4756fdd40d2fdb22002ab4d3e25ebde9">writeNode</a>(t, std::move(node)));</div>
|
||||
<div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>  </div>
|
||||
<div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>  ++flushed;</div>
|
||||
<div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>  </div>
|
||||
<div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>  <span class="keywordflow">if</span> (stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/empty.html">empty</a>())</div>
|
||||
<div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>  <span class="keywordflow">break</span>;</div>
|
||||
<div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>  </div>
|
||||
<div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>  <span class="keyword">auto</span> parent = std::move(stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>().first);</div>
|
||||
<div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>  pos = stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>().second;</div>
|
||||
<div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/pop.html">pop</a>();</div>
|
||||
<div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>  </div>
|
||||
<div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>  <span class="comment">// Hook this inner node to its parent</span></div>
|
||||
<div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>  assert(parent->cowid() == <a class="code" href="classripple_1_1SHAMap.html#a9ab1e2b9e495808a7e7b7ce4483460a0">cowid_</a>);</div>
|
||||
<div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>  parent->shareChild(pos, node);</div>
|
||||
<div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>  </div>
|
||||
<div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>  <span class="comment">// Continue with parent's next child, if any</span></div>
|
||||
<div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  node = std::move(parent);</div>
|
||||
<div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>  ++pos;</div>
|
||||
<div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>  }</div>
|
||||
<div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>  </div>
|
||||
<div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>  <span class="comment">// Last inner node is the new root_</span></div>
|
||||
<div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>  <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a> = std::move(node);</div>
|
||||
<div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>  </div>
|
||||
<div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>  <span class="keywordflow">return</span> flushed;</div>
|
||||
<div class="line"><a name="l01111"></a><span class="lineno"> 1111</span> }</div>
|
||||
<div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>  </div>
|
||||
<div class="line"><a name="l01113"></a><span class="lineno"> 1113</span> <span class="keywordtype">void</span></div>
|
||||
<div class="line"><a name="l01114"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a16c47b967da5fd093f51e7331f42c9b6"> 1114</a></span> <a class="code" href="classripple_1_1SHAMap.html#a16c47b967da5fd093f51e7331f42c9b6">SHAMap::dump</a>(<span class="keywordtype">bool</span> hash)<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l01115"></a><span class="lineno"> 1115</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>  <span class="keywordtype">int</span> leafCount = 0;</div>
|
||||
<div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) << <span class="stringliteral">" MAP Contains"</span>;</div>
|
||||
<div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>  </div>
|
||||
<div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack.html">std::stack<std::pair<SHAMapTreeNode*, SHAMapNodeID></a>> stack;</div>
|
||||
<div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>  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#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>.get(), <a class="code" href="classripple_1_1SHAMapNodeID.html">SHAMapNodeID</a>()});</div>
|
||||
<div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>  </div>
|
||||
<div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>  <span class="keywordflow">do</span></div>
|
||||
<div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>  {</div>
|
||||
<div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>  <span class="keyword">auto</span> [node, nodeID] = stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/top.html">top</a>();</div>
|
||||
<div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/pop.html">pop</a>();</div>
|
||||
<div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>  </div>
|
||||
<div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>  JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) << node->getString(nodeID);</div>
|
||||
<div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>  <span class="keywordflow">if</span> (hash)</div>
|
||||
<div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>  {</div>
|
||||
<div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>  JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) << <span class="stringliteral">"Hash: "</span> << node->getHash();</div>
|
||||
<div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>  }</div>
|
||||
<div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>  </div>
|
||||
<div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>  <span class="keywordflow">if</span> (node->isInner())</div>
|
||||
<div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>  {</div>
|
||||
<div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>  <span class="keyword">auto</span> inner = <span class="keyword">static_cast<</span><a class="code" href="classripple_1_1SHAMapInnerNode.html">SHAMapInnerNode</a>*<span class="keyword">></span>(node);</div>
|
||||
<div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i < <a class="code" href="classripple_1_1SHAMap.html#af8599964238eb94d795606f220654db9">branchFactor</a>; ++i)</div>
|
||||
<div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>  {</div>
|
||||
<div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <span class="keywordflow">if</span> (!inner->isEmptyBranch(i))</div>
|
||||
<div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  {</div>
|
||||
<div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>  <span class="keyword">auto</span> child = inner->getChildPointer(i);</div>
|
||||
<div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <span class="keywordflow">if</span> (child)</div>
|
||||
<div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  {</div>
|
||||
<div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  assert(child->getHash() == inner->getChildHash(i));</div>
|
||||
<div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>  stack.<a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack/push.html">push</a>({child, nodeID.getChildNodeID(i)});</div>
|
||||
<div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  }</div>
|
||||
<div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>  }</div>
|
||||
<div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  }</div>
|
||||
<div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>  }</div>
|
||||
<div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>  <span class="keywordflow">else</span></div>
|
||||
<div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  ++leafCount;</div>
|
||||
<div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>  } <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="l01152"></a><span class="lineno"> 1152</span>  </div>
|
||||
<div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>  JLOG(<a class="code" href="classripple_1_1SHAMap.html#a149dff8600718cccd0d5b9e7af9d3c79">journal_</a>.<a class="code" href="classbeast_1_1Journal.html#a87d6bd59020d94110027dcab3d9e3357">info</a>()) << leafCount << <span class="stringliteral">" resident leaves"</span>;</div>
|
||||
<div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> }</div>
|
||||
<div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>  </div>
|
||||
<div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMapTreeNode></a></div>
|
||||
<div class="line"><a name="l01157"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ab39da8aa57430441b1f4fdce7fe6cbfe"> 1157</a></span> <a class="code" href="classripple_1_1SHAMap.html#ab39da8aa57430441b1f4fdce7fe6cbfe">SHAMap::cacheLookup</a>(<a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>& hash)<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l01158"></a><span class="lineno"> 1158</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>  <span class="keyword">auto</span> ret = <a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#a794019ebd9859fb37a7a65b80e8d6df7">getTreeNodeCache</a>(<a class="code" href="classripple_1_1SHAMap.html#acbedaf0be7acd2816e01be821fdc4697">ledgerSeq_</a>)->fetch(hash.<a class="code" href="classripple_1_1SHAMapHash.html#a8f95b5bc14b7085d368f56aeaa17ef4f">as_uint256</a>());</div>
|
||||
<div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>  assert(!ret || !ret->cowid());</div>
|
||||
<div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <span class="keywordflow">return</span> ret;</div>
|
||||
<div class="line"><a name="l01162"></a><span class="lineno"> 1162</span> }</div>
|
||||
<div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>  </div>
|
||||
<div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="keywordtype">void</span></div>
|
||||
<div class="line"><a name="l01165"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#ad0807d9637171e188518d9e453c4e972"> 1165</a></span> <a class="code" href="classripple_1_1SHAMap.html#ad0807d9637171e188518d9e453c4e972">SHAMap::canonicalize</a>(</div>
|
||||
<div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>  <a class="code" href="classripple_1_1SHAMapHash.html">SHAMapHash</a> <span class="keyword">const</span>& hash,</div>
|
||||
<div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr<SHAMapTreeNode></a>& node)<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>  assert(<a class="code" href="classripple_1_1SHAMap.html#a0b1d68d0723680664e14401c86625b9f">backed_</a>);</div>
|
||||
<div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>  assert(node->cowid() == 0);</div>
|
||||
<div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>  assert(node->getHash() == hash);</div>
|
||||
<div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>  </div>
|
||||
<div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>  <a class="code" href="classripple_1_1SHAMap.html#a5268c936212da93659dd05be9304e0bb">f_</a>.<a class="code" href="classripple_1_1Family.html#a794019ebd9859fb37a7a65b80e8d6df7">getTreeNodeCache</a>(<a class="code" href="classripple_1_1SHAMap.html#acbedaf0be7acd2816e01be821fdc4697">ledgerSeq_</a>)</div>
|
||||
<div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>  ->canonicalize_replace_client(hash.<a class="code" href="classripple_1_1SHAMapHash.html#a8f95b5bc14b7085d368f56aeaa17ef4f">as_uint256</a>(), node);</div>
|
||||
<div class="line"><a name="l01175"></a><span class="lineno"> 1175</span> }</div>
|
||||
<div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  </div>
|
||||
<div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> <span class="keywordtype">void</span></div>
|
||||
<div class="line"><a name="l01178"></a><span class="lineno"><a class="line" href="classripple_1_1SHAMap.html#a721b11739ad539851737443deeccf96b"> 1178</a></span> <a class="code" href="classripple_1_1SHAMap.html#a721b11739ad539851737443deeccf96b">SHAMap::invariants</a>()<span class="keyword"> const</span></div>
|
||||
<div class="line"><a name="l01179"></a><span class="lineno"> 1179</span> <span class="keyword"></span>{</div>
|
||||
<div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>  (void)<a class="code" href="classripple_1_1SHAMap.html#a9b0dff3c3bf35efc30104c93becdc079">getHash</a>(); <span class="comment">// update node hashes</span></div>
|
||||
<div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>  <span class="keyword">auto</span> node = <a class="code" href="classripple_1_1SHAMap.html#a5b5f477358f0d5ce1b24d0888ffefb1d">root_</a>.get();</div>
|
||||
<div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>  assert(node != <span class="keyword">nullptr</span>);</div>
|
||||
<div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>  assert(!node->isLeaf());</div>
|
||||
<div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>  <a class="codeRef" href="http://en.cppreference.com/w/cpp/container/stack.html">SharedPtrNodeStack</a> stack;</div>
|
||||
<div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>  <span class="keywordflow">for</span> (<span class="keyword">auto</span> leaf = <a class="code" href="classripple_1_1SHAMap.html#aa349ff193020caf2178e28ef6392e675">peekFirstItem</a>(stack); leaf != <span class="keyword">nullptr</span>;</div>
|
||||
<div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>  leaf = <a class="code" href="classripple_1_1SHAMap.html#a5902b212b3da87e522eef58c6c0c83e9">peekNextItem</a>(leaf->peekItem()->key(), stack))</div>
|
||||
<div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  ;</div>
|
||||
<div class="line"><a name="l01188"></a><span class="lineno"> 1188</span>  node->invariants(<span class="keyword">true</span>);</div>
|
||||
<div class="line"><a name="l01189"></a><span class="lineno"> 1189</span> }</div>
|
||||
<div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>  </div>
|
||||
<div class="line"><a name="l01191"></a><span class="lineno"> 1191</span> } <span class="comment">// namespace ripple</span></div>
|
||||
</div><!-- fragment --></div><!-- contents -->
|
||||
<div class="ttc" id="aclassbeast_1_1Journal_html_a3dfb8e2e3eecccdb5cf78ff21bca069c"><div class="ttname"><a href="classbeast_1_1Journal.html#a3dfb8e2e3eecccdb5cf78ff21bca069c">beast::Journal::fatal</a></div><div class="ttdeci">Stream fatal() const</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00339">Journal.h:339</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMapInnerNode_html_a11f313e4e571af4bd75a5a3f7abeceee"><div class="ttname"><a href="classripple_1_1SHAMapInnerNode.html#a11f313e4e571af4bd75a5a3f7abeceee">ripple::SHAMapInnerNode::isInner</a></div><div class="ttdeci">bool isInner() const override</div><div class="ttdoc">Determines if this is an inner node.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapInnerNode_8h_source.html#l00132">SHAMapInnerNode.h:132</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a57d7e7b27df7e719fdf5569f96be60a3ac9d2b0df1bd24ef0d09db1040dceac6b"><div class="ttname"><a href="namespaceripple.html#a57d7e7b27df7e719fdf5569f96be60a3ac9d2b0df1bd24ef0d09db1040dceac6b">ripple::hotUNKNOWN</a></div><div class="ttdeci">@ hotUNKNOWN</div><div class="ttdef"><b>Definition:</b> <a href="NodeObject_8h_source.html#l00033">NodeObject.h:33</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a721b11739ad539851737443deeccf96b"><div class="ttname"><a href="classripple_1_1SHAMap.html#a721b11739ad539851737443deeccf96b">ripple::SHAMap::invariants</a></div><div class="ttdeci">void invariants() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l01179">SHAMap.cpp:1179</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a721b11739ad539851737443deeccf96b"><div class="ttname"><a href="classripple_1_1SHAMap.html#a721b11739ad539851737443deeccf96b">ripple::SHAMap::invariants</a></div><div class="ttdeci">void invariants() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l01178">SHAMap.cpp:1178</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1Family_html_a794019ebd9859fb37a7a65b80e8d6df7"><div class="ttname"><a href="classripple_1_1Family.html#a794019ebd9859fb37a7a65b80e8d6df7">ripple::Family::getTreeNodeCache</a></div><div class="ttdeci">virtual std::shared_ptr< TreeNodeCache > getTreeNodeCache(std::uint32_t ledgerSeq)=0</div><div class="ttdoc">Return a pointer to the Family Tree Node Cache.</div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_af8599964238eb94d795606f220654db9"><div class="ttname"><a href="classripple_1_1SHAMap.html#af8599964238eb94d795606f220654db9">ripple::SHAMap::branchFactor</a></div><div class="ttdeci">static constexpr unsigned int branchFactor</div><div class="ttdoc">Number of children each non-leaf node has (the 'radix tree' part of the map)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00116">SHAMap.h:116</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_aa3221154f0a1742601dba0160b900ae1"><div class="ttname"><a href="classripple_1_1SHAMap.html#aa3221154f0a1742601dba0160b900ae1">ripple::SHAMap::descendNoStore</a></div><div class="ttdeci">std::shared_ptr< SHAMapTreeNode > descendNoStore(std::shared_ptr< SHAMapInnerNode > const &, int branch) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00340">SHAMap.cpp:340</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a6eaff79c38106bc3b27326d878c902d3a7c6c2e5d48ab37a007cbf70d3ea25fa4"><div class="ttname"><a href="namespaceripple.html#a6eaff79c38106bc3b27326d878c902d3a7c6c2e5d48ab37a007cbf70d3ea25fa4">ripple::ListDisposition::pending</a></div><div class="ttdeci">@ pending</div><div class="ttdoc">List will be valid in the future.</div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMapInnerNode_html_a816fb1a18b49832dcffccc073a5dd929"><div class="ttname"><a href="classripple_1_1SHAMapInnerNode.html#a816fb1a18b49832dcffccc073a5dd929">ripple::SHAMapInnerNode::setChild</a></div><div class="ttdeci">void setChild(int m, std::shared_ptr< SHAMapTreeNode > const &child)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapInnerNode_8cpp_source.html#l00287">SHAMapInnerNode.cpp:287</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_aabe37451093c21757855542d68fba3ce"><div class="ttname"><a href="namespaceripple.html#aabe37451093c21757855542d68fba3ce">ripple::makeSlice</a></div><div class="ttdeci">std::enable_if_t< std::is_same< T, char >::value||std::is_same< T, unsigned char >::value, Slice > makeSlice(std::array< T, N > const &a)</div><div class="ttdef"><b>Definition:</b> <a href="Slice_8h_source.html#l00241">Slice.h:241</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMapNodeID_html_a23e606ffcd8a863d0f678f040001aedf"><div class="ttname"><a href="classripple_1_1SHAMapNodeID.html#a23e606ffcd8a863d0f678f040001aedf">ripple::SHAMapNodeID::getChildNodeID</a></div><div class="ttdeci">SHAMapNodeID getChildNodeID(unsigned int m) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapNodeID_8cpp_source.html#l00074">SHAMapNodeID.cpp:74</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ac12fd99d7dee738a86015218f6e48433"><div class="ttname"><a href="classripple_1_1SHAMap.html#ac12fd99d7dee738a86015218f6e48433">ripple::SHAMap::SHAMap</a></div><div class="ttdeci">SHAMap(SHAMap const &)=delete</div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a5902b212b3da87e522eef58c6c0c83e9"><div class="ttname"><a href="classripple_1_1SHAMap.html#a5902b212b3da87e522eef58c6c0c83e9">ripple::SHAMap::peekNextItem</a></div><div class="ttdeci">SHAMapLeafNode const * peekNextItem(uint256 const &id, SharedPtrNodeStack &stack) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00557">SHAMap.cpp:557</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMapSyncFilter_html_aab30f4bd0cd629af0cb5a7f53afb7fb4"><div class="ttname"><a href="classripple_1_1SHAMapSyncFilter.html#aab30f4bd0cd629af0cb5a7f53afb7fb4">ripple::SHAMapSyncFilter::getNode</a></div><div class="ttdeci">virtual std::optional< Blob > getNode(SHAMapHash const &nodeHash) const =0</div></div>
|
||||
<div class="ttc" id="ashared_ptr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a></div><div class="ttdoc">STL class.</div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a9b0dff3c3bf35efc30104c93becdc079"><div class="ttname"><a href="classripple_1_1SHAMap.html#a9b0dff3c3bf35efc30104c93becdc079">ripple::SHAMap::getHash</a></div><div class="ttdeci">SHAMapHash getHash() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00843">SHAMap.cpp:843</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a9b0dff3c3bf35efc30104c93becdc079"><div class="ttname"><a href="classripple_1_1SHAMap.html#a9b0dff3c3bf35efc30104c93becdc079">ripple::SHAMap::getHash</a></div><div class="ttdeci">SHAMapHash getHash() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00842">SHAMap.cpp:842</a></div></div>
|
||||
<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#l00110">SHAMap.h:110</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_ae0356b1de00f841c554c830be509dd58a603cc9fa7c68a8ccd6d25fbb0dd83248"><div class="ttname"><a href="namespaceripple.html#ae0356b1de00f841c554c830be509dd58a603cc9fa7c68a8ccd6d25fbb0dd83248">ripple::SHAMapNodeType::tnINNER</a></div><div class="ttdeci">@ tnINNER</div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a343edca635d6cf2df19026569be34313"><div class="ttname"><a href="classripple_1_1SHAMap.html#a343edca635d6cf2df19026569be34313">ripple::SHAMap::type_</a></div><div class="ttdeci">const SHAMapType type_</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00109">SHAMap.h:109</a></div></div>
|
||||
@@ -1274,13 +1272,13 @@ $(function() {
|
||||
<div class="ttc" id="anamespaceripple_html_a179c66641961c1b976e7c050860064a3"><div class="ttname"><a href="namespaceripple.html#a179c66641961c1b976e7c050860064a3">ripple::selectBranch</a></div><div class="ttdeci">unsigned int selectBranch(SHAMapNodeID const &id, uint256 const &hash)</div><div class="ttdoc">Returns the branch that would contain the given hash.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapNodeID_8cpp_source.html#l00121">SHAMapNodeID.cpp:121</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ab69c3b19b1d65ff919f578a610f32a3e"><div class="ttname"><a href="classripple_1_1SHAMap.html#ab69c3b19b1d65ff919f578a610f32a3e">ripple::SHAMap::fetchNodeFromDB</a></div><div class="ttdeci">std::shared_ptr< SHAMapTreeNode > fetchNodeFromDB(SHAMapHash const &hash) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00163">SHAMap.cpp:163</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 & modData()</div><div class="ttdef"><b>Definition:</b> <a href="Serializer_8h_source.html#l00178">Serializer.h:178</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ad628222b8fa175537889873ff6724cc0"><div class="ttname"><a href="classripple_1_1SHAMap.html#ad628222b8fa175537889873ff6724cc0">ripple::SHAMap::addItem</a></div><div class="ttdeci">bool addItem(SHAMapNodeType type, SHAMapItem &&i)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00837">SHAMap.cpp:837</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ad628222b8fa175537889873ff6724cc0"><div class="ttname"><a href="classripple_1_1SHAMap.html#ad628222b8fa175537889873ff6724cc0">ripple::SHAMap::addItem</a></div><div class="ttdeci">bool addItem(SHAMapNodeType type, SHAMapItem &&i)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00836">SHAMap.cpp:836</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_ae0356b1de00f841c554c830be509dd58ab2364e40a67b08ba6170314afc07d07b"><div class="ttname"><a href="namespaceripple.html#ae0356b1de00f841c554c830be509dd58ab2364e40a67b08ba6170314afc07d07b">ripple::SHAMapNodeType::tnACCOUNT_STATE</a></div><div class="ttdeci">@ tnACCOUNT_STATE</div></div>
|
||||
<div class="ttc" id="apair_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair::first</a></div><div class="ttdeci">T first</div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a5d9fe757c37a7602a883d30b14e1bf3cae6bed345f53943469741d7295552fcd4"><div class="ttname"><a href="namespaceripple.html#a5d9fe757c37a7602a883d30b14e1bf3cae6bed345f53943469741d7295552fcd4">ripple::SHAMapType::TRANSACTION</a></div><div class="ttdeci">@ TRANSACTION</div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMapInnerNode_html_ad1d3440e82f822d85cc57734a16dc524"><div class="ttname"><a href="classripple_1_1SHAMapInnerNode.html#ad1d3440e82f822d85cc57734a16dc524">ripple::SHAMapInnerNode::canonicalizeChild</a></div><div class="ttdeci">std::shared_ptr< SHAMapTreeNode > canonicalizeChild(int branch, std::shared_ptr< SHAMapTreeNode > node)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapInnerNode_8cpp_source.html#l00371">SHAMapInnerNode.cpp:371</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a64d84916fb3113b9c855dbdad85cc0c2"><div class="ttname"><a href="classripple_1_1SHAMap.html#a64d84916fb3113b9c855dbdad85cc0c2">ripple::SHAMap::walkSubTree</a></div><div class="ttdeci">int walkSubTree(bool doWrite, NodeObjectType t)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00990">SHAMap.cpp:990</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a16c47b967da5fd093f51e7331f42c9b6"><div class="ttname"><a href="classripple_1_1SHAMap.html#a16c47b967da5fd093f51e7331f42c9b6">ripple::SHAMap::dump</a></div><div class="ttdeci">void dump(bool withHashes=false) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l01115">SHAMap.cpp:1115</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a64d84916fb3113b9c855dbdad85cc0c2"><div class="ttname"><a href="classripple_1_1SHAMap.html#a64d84916fb3113b9c855dbdad85cc0c2">ripple::SHAMap::walkSubTree</a></div><div class="ttdeci">int walkSubTree(bool doWrite, NodeObjectType t)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00989">SHAMap.cpp:989</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a16c47b967da5fd093f51e7331f42c9b6"><div class="ttname"><a href="classripple_1_1SHAMap.html#a16c47b967da5fd093f51e7331f42c9b6">ripple::SHAMap::dump</a></div><div class="ttdeci">void dump(bool withHashes=false) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l01114">SHAMap.cpp:1114</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a57d7e7b27df7e719fdf5569f96be60a3"><div class="ttname"><a href="namespaceripple.html#a57d7e7b27df7e719fdf5569f96be60a3">ripple::NodeObjectType</a></div><div class="ttdeci">NodeObjectType</div><div class="ttdoc">The types of node objects.</div><div class="ttdef"><b>Definition:</b> <a href="NodeObject_8h_source.html#l00032">NodeObject.h:32</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a944948c4ffd1bdc5767c58e76edc21ea"><div class="ttname"><a href="classripple_1_1SHAMap.html#a944948c4ffd1bdc5767c58e76edc21ea">ripple::SHAMap::onlyBelow</a></div><div class="ttdeci">std::shared_ptr< SHAMapItem const > const & onlyBelow(SHAMapTreeNode *) const</div><div class="ttdoc">If there is only one leaf below this node, get its contents.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00507">SHAMap.cpp:507</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_ae0356b1de00f841c554c830be509dd58"><div class="ttname"><a href="namespaceripple.html#ae0356b1de00f841c554c830be509dd58">ripple::SHAMapNodeType</a></div><div class="ttdeci">SHAMapNodeType</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8h_source.html#l00046">SHAMapTreeNode.h:46</a></div></div>
|
||||
@@ -1301,7 +1299,7 @@ $(function() {
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ae3639927ea223b4352d9cfe060827944"><div class="ttname"><a href="classripple_1_1SHAMap.html#ae3639927ea223b4352d9cfe060827944">ripple::SHAMap::snapShot</a></div><div class="ttdeci">std::shared_ptr< SHAMap > snapShot(bool isMutable) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00070">SHAMap.cpp:70</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a5d9fe757c37a7602a883d30b14e1bf3ca2b848a8cc886d253d21a77c43cd50aae"><div class="ttname"><a href="namespaceripple.html#a5d9fe757c37a7602a883d30b14e1bf3ca2b848a8cc886d253d21a77c43cd50aae">ripple::SHAMapType::STATE</a></div><div class="ttdeci">@ STATE</div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_aa2ccf44248af5be8a81db7091ad4d019"><div class="ttname"><a href="namespaceripple.html#aa2ccf44248af5be8a81db7091ad4d019">ripple::const_iterator</a></div><div class="ttdeci">Dir::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="Directory_8cpp_source.html#l00024">Directory.cpp:24</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ab39da8aa57430441b1f4fdce7fe6cbfe"><div class="ttname"><a href="classripple_1_1SHAMap.html#ab39da8aa57430441b1f4fdce7fe6cbfe">ripple::SHAMap::cacheLookup</a></div><div class="ttdeci">std::shared_ptr< SHAMapTreeNode > cacheLookup(SHAMapHash const &hash) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l01158">SHAMap.cpp:1158</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ab39da8aa57430441b1f4fdce7fe6cbfe"><div class="ttname"><a href="classripple_1_1SHAMap.html#ab39da8aa57430441b1f4fdce7fe6cbfe">ripple::SHAMap::cacheLookup</a></div><div class="ttdeci">std::shared_ptr< SHAMapTreeNode > cacheLookup(SHAMapHash const &hash) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l01157">SHAMap.cpp:1157</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1Family_html_a195ad5c61d5ef6a5b269232ecea7ca55"><div class="ttname"><a href="classripple_1_1Family.html#a195ad5c61d5ef6a5b269232ecea7ca55">ripple::Family::missingNode</a></div><div class="ttdeci">virtual void missingNode(std::uint32_t refNum)=0</div></div>
|
||||
<div class="ttc" id="aclassripple_1_1Family_html_a2618f6f7bd3709acf853db111c814df2"><div class="ttname"><a href="classripple_1_1Family.html#a2618f6f7bd3709acf853db111c814df2">ripple::Family::db</a></div><div class="ttdeci">virtual NodeStore::Database & db()=0</div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMapLeafNode_html"><div class="ttname"><a href="classripple_1_1SHAMapLeafNode.html">ripple::SHAMapLeafNode</a></div><div class="ttdef"><b>Definition:</b> <a href="SHAMapLeafNode_8h_source.html#l00032">SHAMapLeafNode.h:32</a></div></div>
|
||||
@@ -1316,6 +1314,7 @@ $(function() {
|
||||
<div class="ttc" id="aclassripple_1_1base__uint_html"><div class="ttname"><a href="classripple_1_1base__uint.html">ripple::base_uint< 256 ></a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a0a9bf789b31096bb8938b6fc93bac625"><div class="ttname"><a href="classripple_1_1SHAMap.html#a0a9bf789b31096bb8938b6fc93bac625">ripple::SHAMap::hasItem</a></div><div class="ttdeci">bool hasItem(uint256 const &id) const</div><div class="ttdoc">Does the tree have an item with the given ID?</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00684">SHAMap.cpp:684</a></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 & getChildHash(int m) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapInnerNode_8cpp_source.html#l00361">SHAMapInnerNode.cpp:361</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMapInnerNode_html_a7fb5fc0e5d65ed4c3c77537a8fda8d32"><div class="ttname"><a href="classripple_1_1SHAMapInnerNode.html#a7fb5fc0e5d65ed4c3c77537a8fda8d32">ripple::SHAMapInnerNode::setChild</a></div><div class="ttdeci">void setChild(int m, std::shared_ptr< SHAMapTreeNode > child)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapInnerNode_8cpp_source.html#l00287">SHAMapInnerNode.cpp:287</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="SHAMapInnerNode_8h_source.html#l00041">SHAMapInnerNode.h:41</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_aa349ff193020caf2178e28ef6392e675"><div class="ttname"><a href="classripple_1_1SHAMap.html#aa349ff193020caf2178e28ef6392e675">ripple::SHAMap::peekFirstItem</a></div><div class="ttdeci">SHAMapLeafNode const * peekFirstItem(SharedPtrNodeStack &stack) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00543">SHAMap.cpp:543</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMapItem_html"><div class="ttname"><a href="classripple_1_1SHAMapItem.html">ripple::SHAMapItem</a></div><div class="ttdef"><b>Definition:</b> <a href="SHAMapItem_8h_source.html#l00031">SHAMapItem.h:31</a></div></div>
|
||||
@@ -1333,10 +1332,10 @@ $(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#l00099">SHAMap.h:99</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMapTreeNode_html_a3feaa925a9dc0e847049e6c4cfbb6875"><div class="ttname"><a href="classripple_1_1SHAMapTreeNode.html#a3feaa925a9dc0e847049e6c4cfbb6875">ripple::SHAMapTreeNode::isLeaf</a></div><div class="ttdeci">virtual bool isLeaf() const =0</div><div class="ttdoc">Determines if this is a leaf node.</div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ad0807d9637171e188518d9e453c4e972"><div class="ttname"><a href="classripple_1_1SHAMap.html#ad0807d9637171e188518d9e453c4e972">ripple::SHAMap::canonicalize</a></div><div class="ttdeci">void canonicalize(SHAMapHash const &hash, std::shared_ptr< SHAMapTreeNode > &) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l01166">SHAMap.cpp:1166</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ad0807d9637171e188518d9e453c4e972"><div class="ttname"><a href="classripple_1_1SHAMap.html#ad0807d9637171e188518d9e453c4e972">ripple::SHAMap::canonicalize</a></div><div class="ttdeci">void canonicalize(SHAMapHash const &hash, std::shared_ptr< SHAMapTreeNode > &) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l01165">SHAMap.cpp:1165</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1Family_html"><div class="ttname"><a href="classripple_1_1Family.html">ripple::Family</a></div><div class="ttdef"><b>Definition:</b> <a href="Family_8h_source.html#l00032">Family.h:32</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_ad530edc60b33c2eb590d2be1cb12f2de"><div class="ttname"><a href="classripple_1_1SHAMap.html#ad530edc60b33c2eb590d2be1cb12f2de">ripple::SHAMap::fetchRoot</a></div><div class="ttdeci">bool fetchRoot(SHAMapHash const &hash, SHAMapSyncFilter *filter)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00895">SHAMap.cpp:895</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ad530edc60b33c2eb590d2be1cb12f2de"><div class="ttname"><a href="classripple_1_1SHAMap.html#ad530edc60b33c2eb590d2be1cb12f2de">ripple::SHAMap::fetchRoot</a></div><div class="ttdeci">bool fetchRoot(SHAMapHash const &hash, SHAMapSyncFilter *filter)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00894">SHAMap.cpp:894</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMapTreeNode_html_a454e86c9ed693f8921d53a915d8b1415"><div class="ttname"><a href="classripple_1_1SHAMapTreeNode.html#a454e86c9ed693f8921d53a915d8b1415">ripple::SHAMapTreeNode::getHash</a></div><div class="ttdeci">SHAMapHash const & getHash() const</div><div class="ttdoc">Return the hash of this node.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8h_source.html#l00143">SHAMapTreeNode.h:143</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="aclassripple_1_1SHAMapTreeNode_html_a5631e2f77123e3b73229ef4c890ad60f"><div class="ttname"><a href="classripple_1_1SHAMapTreeNode.html#a5631e2f77123e3b73229ef4c890ad60f">ripple::SHAMapTreeNode::makeFromPrefix</a></div><div class="ttdeci">static std::shared_ptr< SHAMapTreeNode > makeFromPrefix(Slice rawNode, SHAMapHash const &hash)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapTreeNode_8cpp_source.html#l00148">SHAMapTreeNode.cpp:148</a></div></div>
|
||||
@@ -1347,24 +1346,24 @@ $(function() {
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a0fa261a41fdf7f773f104e2e01cf8864"><div class="ttname"><a href="classripple_1_1SHAMap.html#a0fa261a41fdf7f773f104e2e01cf8864">ripple::SHAMap::checkFilter</a></div><div class="ttdeci">std::shared_ptr< SHAMapTreeNode > checkFilter(SHAMapHash const &hash, SHAMapSyncFilter *filter) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00204">SHAMap.cpp:204</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a36ba184d7125776bff17e081e9e1d7ed"><div class="ttname"><a href="classripple_1_1SHAMap.html#a36ba184d7125776bff17e081e9e1d7ed">ripple::SHAMap::dirtyUp</a></div><div class="ttdeci">void dirtyUp(SharedPtrNodeStack &stack, uint256 const &target, std::shared_ptr< SHAMapTreeNode > terminal)</div><div class="ttdoc">Update hashes up to the root.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00094">SHAMap.cpp:94</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_af6a56124ffdd304fb80e45c9b8ae7e62"><div class="ttname"><a href="classripple_1_1SHAMap.html#af6a56124ffdd304fb80e45c9b8ae7e62">ripple::SHAMap::findKey</a></div><div class="ttdeci">SHAMapLeafNode * findKey(uint256 const &id) const</div><div class="ttdoc">Return nullptr if key not found.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00154">SHAMap.cpp:154</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ab40ce9ae2e8df178c78440b40b6a2cda"><div class="ttname"><a href="classripple_1_1SHAMap.html#ab40ce9ae2e8df178c78440b40b6a2cda">ripple::SHAMap::updateGiveItem</a></div><div class="ttdeci">bool updateGiveItem(SHAMapNodeType type, std::shared_ptr< SHAMapItem const >)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00855">SHAMap.cpp:855</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ab40ce9ae2e8df178c78440b40b6a2cda"><div class="ttname"><a href="classripple_1_1SHAMap.html#ab40ce9ae2e8df178c78440b40b6a2cda">ripple::SHAMap::updateGiveItem</a></div><div class="ttdeci">bool updateGiveItem(SHAMapNodeType type, std::shared_ptr< SHAMapItem const >)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00854">SHAMap.cpp:854</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a290b06e05d4261e2042dafbb85f6ccf9"><div class="ttname"><a href="namespaceripple.html#a290b06e05d4261e2042dafbb85f6ccf9">ripple::makeTypedLeaf</a></div><div class="ttdeci">std::shared_ptr< SHAMapLeafNode > makeTypedLeaf(SHAMapNodeType type, std::shared_ptr< SHAMapItem const > item, std::uint32_t owner)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00031">SHAMap.cpp:31</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a71caeac6f4a3bce67cc8476a440509c1"><div class="ttname"><a href="classripple_1_1SHAMap.html#a71caeac6f4a3bce67cc8476a440509c1">ripple::SHAMap::end</a></div><div class="ttdeci">const_iterator end() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00744">SHAMap.h:744</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a57c9afd6af077bbca5efc4ee640c7a2d"><div class="ttname"><a href="classripple_1_1SHAMap.html#a57c9afd6af077bbca5efc4ee640c7a2d">ripple::SHAMap::walkTowardsKey</a></div><div class="ttdeci">SHAMapLeafNode * walkTowardsKey(uint256 const &id, SharedPtrNodeStack *stack=nullptr) const</div><div class="ttdoc">Walk towards the specified id, returning the node.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00128">SHAMap.cpp:128</a></div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_aefd2f77338ce3c9a2fffc4f0b289b483"><div class="ttname"><a href="namespaceripple.html#aefd2f77338ce3c9a2fffc4f0b289b483">ripple::LogicError</a></div><div class="ttdeci">void LogicError(std::string const &how) noexcept</div><div class="ttdoc">Called when faulty logic causes a broken invariant.</div><div class="ttdef"><b>Definition:</b> <a href="contract_8cpp_source.html#l00048">contract.cpp:48</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a9bc9928b273e0467788329faa8f65e96"><div class="ttname"><a href="classripple_1_1SHAMap.html#a9bc9928b273e0467788329faa8f65e96">ripple::SHAMap::addGiveItem</a></div><div class="ttdeci">bool addGiveItem(SHAMapNodeType type, std::shared_ptr< SHAMapItem const > item)</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00768">SHAMap.cpp:768</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_aee5ccc6cf9fa63aa25765227007893fb"><div class="ttname"><a href="classripple_1_1SHAMap.html#aee5ccc6cf9fa63aa25765227007893fb">ripple::SHAMap::unshare</a></div><div class="ttdeci">int unshare()</div><div class="ttdoc">Convert any modified nodes to shared.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00976">SHAMap.cpp:976</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_aee5ccc6cf9fa63aa25765227007893fb"><div class="ttname"><a href="classripple_1_1SHAMap.html#aee5ccc6cf9fa63aa25765227007893fb">ripple::SHAMap::unshare</a></div><div class="ttdeci">int unshare()</div><div class="ttdoc">Convert any modified nodes to shared.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00975">SHAMap.cpp:975</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a07ce8e5379558b4c0e256cbbf2636cb7"><div class="ttname"><a href="classripple_1_1SHAMap.html#a07ce8e5379558b4c0e256cbbf2636cb7">ripple::SHAMap::descendAsync</a></div><div class="ttdeci">SHAMapTreeNode * descendAsync(SHAMapInnerNode *parent, int branch, SHAMapSyncFilter *filter, bool &pending, descendCallback &&) const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00380">SHAMap.cpp:380</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a4756fdd40d2fdb22002ab4d3e25ebde9"><div class="ttname"><a href="classripple_1_1SHAMap.html#a4756fdd40d2fdb22002ab4d3e25ebde9">ripple::SHAMap::writeNode</a></div><div class="ttdeci">std::shared_ptr< SHAMapTreeNode > writeNode(NodeObjectType t, std::shared_ptr< SHAMapTreeNode > node) const</div><div class="ttdoc">write and canonicalize modified node</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00941">SHAMap.cpp:941</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a4756fdd40d2fdb22002ab4d3e25ebde9"><div class="ttname"><a href="classripple_1_1SHAMap.html#a4756fdd40d2fdb22002ab4d3e25ebde9">ripple::SHAMap::writeNode</a></div><div class="ttdeci">std::shared_ptr< SHAMapTreeNode > writeNode(NodeObjectType t, std::shared_ptr< SHAMapTreeNode > node) const</div><div class="ttdoc">write and canonicalize modified node</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00940">SHAMap.cpp:940</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a16961b82bb1c661845b14c88b4e80dc3"><div class="ttname"><a href="classripple_1_1SHAMap.html#a16961b82bb1c661845b14c88b4e80dc3">ripple::SHAMap::leafDepth</a></div><div class="ttdeci">static constexpr unsigned int leafDepth</div><div class="ttdoc">The depth of the hash map: data is only present in the leaves.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8h_source.html#l00120">SHAMap.h:120</a></div></div>
|
||||
<div class="ttc" id="aempty_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/stack/empty.html">std::stack::empty</a></div><div class="ttdeci">T empty(T... args)</div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a49003667116eb98c6e966f36e5dd1c77a11efd9ae6f76e706e3f1b34d97584ebc"><div class="ttname"><a href="namespaceripple.html#a49003667116eb98c6e966f36e5dd1c77a11efd9ae6f76e706e3f1b34d97584ebc">ripple::SHAMapState::Immutable</a></div><div class="ttdeci">@ Immutable</div><div class="ttdoc">The map is set in stone and cannot be changed.</div></div>
|
||||
<div class="ttc" id="apush_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/stack/push.html">std::stack::push</a></div><div class="ttdeci">T push(T... args)</div></div>
|
||||
<div class="ttc" id="anamespaceripple_html_a5d9fe757c37a7602a883d30b14e1bf3c"><div class="ttname"><a href="namespaceripple.html#a5d9fe757c37a7602a883d30b14e1bf3c">ripple::SHAMapType</a></div><div class="ttdeci">SHAMapType</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapMissingNode_8h_source.html#l00032">SHAMapMissingNode.h:32</a></div></div>
|
||||
<div class="ttc" id="amake_pair_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a></div><div class="ttdeci">T make_pair(T... args)</div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a5afb093086264fa6ce9573d4703e1e85"><div class="ttname"><a href="classripple_1_1SHAMap.html#a5afb093086264fa6ce9573d4703e1e85">ripple::SHAMap::preFlushNode</a></div><div class="ttdeci">std::shared_ptr< Node > preFlushNode(std::shared_ptr< Node > node) const</div><div class="ttdoc">prepare a node to be modified before flushing</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00960">SHAMap.cpp:960</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_a5afb093086264fa6ce9573d4703e1e85"><div class="ttname"><a href="classripple_1_1SHAMap.html#a5afb093086264fa6ce9573d4703e1e85">ripple::SHAMap::preFlushNode</a></div><div class="ttdeci">std::shared_ptr< Node > preFlushNode(std::shared_ptr< Node > node) const</div><div class="ttdoc">prepare a node to be modified before flushing</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00959">SHAMap.cpp:959</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1NodeStore_1_1Database_html_a780601a4dce8d688490a24a61f8cea9e"><div class="ttname"><a href="classripple_1_1NodeStore_1_1Database.html#a780601a4dce8d688490a24a61f8cea9e">ripple::NodeStore::Database::fetchNodeObject</a></div><div class="ttdeci">std::shared_ptr< NodeObject > fetchNodeObject(uint256 const &hash, std::uint32_t ledgerSeq=0, FetchType fetchType=FetchType::synchronous, bool duplicate=false)</div><div class="ttdoc">Fetch a node object.</div><div class="ttdef"><b>Definition:</b> <a href="Database_8cpp_source.html#l00252">Database.cpp:252</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ae6fddc16c43b58e725afde738f4a70a8"><div class="ttname"><a href="classripple_1_1SHAMap.html#ae6fddc16c43b58e725afde738f4a70a8">ripple::SHAMap::flushDirty</a></div><div class="ttdeci">int flushDirty(NodeObjectType t)</div><div class="ttdoc">Flush modified nodes to the nodestore and convert them to shared.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00983">SHAMap.cpp:983</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ae6fddc16c43b58e725afde738f4a70a8"><div class="ttname"><a href="classripple_1_1SHAMap.html#ae6fddc16c43b58e725afde738f4a70a8">ripple::SHAMap::flushDirty</a></div><div class="ttdeci">int flushDirty(NodeObjectType t)</div><div class="ttdoc">Flush modified nodes to the nodestore and convert them to shared.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00982">SHAMap.cpp:982</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 & journal()=0</div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMap_html_ada99838217423830f916a2e194023fd9"><div class="ttname"><a href="classripple_1_1SHAMap.html#ada99838217423830f916a2e194023fd9">ripple::SHAMap::lower_bound</a></div><div class="ttdeci">const_iterator lower_bound(uint256 const &id) const</div><div class="ttdoc">Find the object with the greatest object id smaller than the input id.</div><div class="ttdef"><b>Definition:</b> <a href="SHAMap_8cpp_source.html#l00646">SHAMap.cpp:646</a></div></div>
|
||||
<div class="ttc" id="aclassripple_1_1SHAMapLeafNode_html_a1b82b561c8fe9afc2a4a281dbb3e833c"><div class="ttname"><a href="classripple_1_1SHAMapLeafNode.html#a1b82b561c8fe9afc2a4a281dbb3e833c">ripple::SHAMapLeafNode::peekItem</a></div><div class="ttdeci">std::shared_ptr< SHAMapItem const > const & peekItem() const</div><div class="ttdef"><b>Definition:</b> <a href="SHAMapLeafNode_8cpp_source.html#l00044">SHAMapLeafNode.cpp:44</a></div></div>
|
||||
|
||||
Reference in New Issue
Block a user