This commit is contained in:
intelliot
2023-09-01 22:54:46 +00:00
parent 752df72c34
commit d7f3a62db6
294 changed files with 29706 additions and 29336 deletions

View File

@@ -1599,73 +1599,73 @@ $(function() {
<div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;}</div>
<div class="line"><a name="l01529"></a><span class="lineno"> 1529</span>&#160; </div>
<div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;<a class="code" href="namespaceripple.html#adfb760bc3e4ccb79d5d4f6ecff2f1817">TER</a></div>
<div class="line"><a name="l01531"></a><span class="lineno"><a class="line" href="namespaceripple.html#a1853d68963f99c793be414cf0d1bc8d5"> 1531</a></span>&#160;<a class="code" href="namespaceripple.html#a1853d68963f99c793be414cf0d1bc8d5">cleanupOnAccountDelete</a>(</div>
<div class="line"><a name="l01531"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac63838a9be23c18086f1f05c78867399"> 1531</a></span>&#160;<a class="code" href="namespaceripple.html#ac63838a9be23c18086f1f05c78867399">cleanupOnAccountDelete</a>(</div>
<div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160; <a class="code" href="classripple_1_1ApplyView.html">ApplyView</a>&amp; view,</div>
<div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160; <a class="code" href="structripple_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; ownerDirKeylet,</div>
<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;<a class="code" href="namespaceripple.html#adfb760bc3e4ccb79d5d4f6ecff2f1817">TER</a>(<a class="code" href="namespaceripple.html#ac151bf19e1f4daae2b04c65c65117139">LedgerEntryType</a>, <a class="code" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp;, <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE&gt;</a>&amp;)&gt;</div>
<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; deleter,</div>
<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <a class="code" href="classbeast_1_1Journal.html">beast::Journal</a> j,</div>
<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;uint16_t&gt;</a> maxNodesToDelete)</div>
<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;{</div>
<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <span class="comment">// Delete all the entries in the account directory.</span></div>
<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE&gt;</a> sleDirNode{};</div>
<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uDirEntry{0};</div>
<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> dirEntry{beast::zero};</div>
<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> deleted = 0;</div>
<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; </div>
<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <span class="keywordflow">if</span> (view.<a class="code" href="classripple_1_1ReadView.html#ac1d377c35a8332d069b09be8f4008dec">exists</a>(ownerDirKeylet) &amp;&amp;</div>
<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; <a class="code" href="namespaceripple.html#a34251c908a52d50d055160c19d6e6e56">dirFirst</a>(view, ownerDirKeylet.<a class="code" href="structripple_1_1Keylet.html#a482983062843a8682fcea76a309c73db">key</a>, sleDirNode, uDirEntry, dirEntry))</div>
<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; {</div>
<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; <span class="keywordflow">do</span></div>
<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; {</div>
<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; <span class="keywordflow">if</span> (maxNodesToDelete &amp;&amp; ++deleted &gt; *maxNodesToDelete)</div>
<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca576f5411ab4458ec9842480e7ebe7072">tecINCOMPLETE</a>;</div>
<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; </div>
<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; <span class="comment">// Choose the right way to delete each directory node.</span></div>
<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="keyword">auto</span> sleItem = view.<a class="code" href="classripple_1_1ApplyView.html#aad9fb1233dec10dcc10c2e3b1da6a723">peek</a>(<a class="code" href="namespaceripple_1_1keylet.html#a1fc176ed1b328b0ef5392b5b5468e269">keylet::child</a>(dirEntry));</div>
<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; <span class="keywordflow">if</span> (!sleItem)</div>
<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; {</div>
<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; <span class="comment">// Directory node has an invalid index. Bail out.</span></div>
<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; JLOG(j.<a class="code" href="classbeast_1_1Journal.html#a3dfb8e2e3eecccdb5cf78ff21bca069c">fatal</a>())</div>
<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; &lt;&lt; <span class="stringliteral">&quot;DeleteAccount: Directory node in ledger &quot;</span> &lt;&lt; view.<a class="code" href="classripple_1_1ReadView.html#ac284afc905c482953c35c61b459fd85b">seq</a>()</div>
<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; &lt;&lt; <span class="stringliteral">&quot; has index to object that is missing: &quot;</span></div>
<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; &lt;&lt; <a class="code" href="namespaceripple.html#af9776f187d3686a7fba4c2d2fbeebdf4">to_string</a>(dirEntry);</div>
<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ab5c44faf987ebd7709fa11a2c8502b5f">tefBAD_LEDGER</a>;</div>
<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; }</div>
<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; </div>
<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; <a class="code" href="namespaceripple.html#ac151bf19e1f4daae2b04c65c65117139">LedgerEntryType</a> <span class="keyword">const</span> nodeType{safe_cast&lt;LedgerEntryType&gt;(</div>
<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; sleItem-&gt;getFieldU16(<a class="code" href="namespaceripple.html#a95e082491139cffc65c01b6fcaa3edfe">sfLedgerEntryType</a>))};</div>
<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; </div>
<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; <span class="comment">// Deleter handles the details of specific account-owned object</span></div>
<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; <span class="comment">// deletion</span></div>
<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> ter = deleter(nodeType, dirEntry, sleItem);</div>
<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; ter != <a class="code" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; <span class="keywordflow">return</span> ter;</div>
<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; </div>
<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <span class="comment">// dirFirst() and dirNext() are like iterators with exposed</span></div>
<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <span class="comment">// internal state. We&#39;ll take advantage of that exposed state</span></div>
<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; <span class="comment">// to solve a common C++ problem: iterator invalidation while</span></div>
<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; <span class="comment">// deleting elements from a container.</span></div>
<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; <span class="comment">// We have just deleted one directory entry, which means our</span></div>
<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <span class="comment">// &quot;iterator state&quot; is invalid.</span></div>
<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; <span class="comment">// 1. During the process of getting an entry from the</span></div>
<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <span class="comment">// directory uDirEntry was incremented from 0 to 1.</span></div>
<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <span class="comment">// 2. We then deleted the entry at index 0, which means the</span></div>
<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; <span class="comment">// entry that was at 1 has now moved to 0.</span></div>
<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; <span class="comment">// 3. So we verify that uDirEntry is indeed 1. Then we jam it</span></div>
<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; <span class="comment">// back to zero to &quot;un-invalidate&quot; the iterator.</span></div>
<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; assert(uDirEntry == 1);</div>
<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; <span class="keywordflow">if</span> (uDirEntry != 1)</div>
<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; {</div>
<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; JLOG(j.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; &lt;&lt; <span class="stringliteral">&quot;DeleteAccount iterator re-validation failed.&quot;</span>;</div>
<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ab5c44faf987ebd7709fa11a2c8502b5f">tefBAD_LEDGER</a>;</div>
<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; }</div>
<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; uDirEntry = 0;</div>
<div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">EntryDeleter</a> <span class="keyword">const</span>&amp; deleter,</div>
<div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160; <a class="code" href="classbeast_1_1Journal.html">beast::Journal</a> j,</div>
<div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;uint16_t&gt;</a> maxNodesToDelete)</div>
<div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;{</div>
<div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160; <span class="comment">// Delete all the entries in the account directory.</span></div>
<div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE&gt;</a> sleDirNode{};</div>
<div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160; <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> uDirEntry{0};</div>
<div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160; <a class="code" href="classripple_1_1base__uint.html">uint256</a> dirEntry{beast::zero};</div>
<div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160; <a class="codeRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> deleted = 0;</div>
<div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160; </div>
<div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160; <span class="keywordflow">if</span> (view.<a class="code" href="classripple_1_1ReadView.html#ac1d377c35a8332d069b09be8f4008dec">exists</a>(ownerDirKeylet) &amp;&amp;</div>
<div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160; <a class="code" href="namespaceripple.html#a34251c908a52d50d055160c19d6e6e56">dirFirst</a>(view, ownerDirKeylet.<a class="code" href="structripple_1_1Keylet.html#a482983062843a8682fcea76a309c73db">key</a>, sleDirNode, uDirEntry, dirEntry))</div>
<div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160; {</div>
<div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160; <span class="keywordflow">do</span></div>
<div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160; {</div>
<div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160; <span class="keywordflow">if</span> (maxNodesToDelete &amp;&amp; ++deleted &gt; *maxNodesToDelete)</div>
<div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca576f5411ab4458ec9842480e7ebe7072">tecINCOMPLETE</a>;</div>
<div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160; </div>
<div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160; <span class="comment">// Choose the right way to delete each directory node.</span></div>
<div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160; <span class="keyword">auto</span> sleItem = view.<a class="code" href="classripple_1_1ApplyView.html#aad9fb1233dec10dcc10c2e3b1da6a723">peek</a>(<a class="code" href="namespaceripple_1_1keylet.html#a1fc176ed1b328b0ef5392b5b5468e269">keylet::child</a>(dirEntry));</div>
<div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160; <span class="keywordflow">if</span> (!sleItem)</div>
<div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160; {</div>
<div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; <span class="comment">// Directory node has an invalid index. Bail out.</span></div>
<div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160; JLOG(j.<a class="code" href="classbeast_1_1Journal.html#a3dfb8e2e3eecccdb5cf78ff21bca069c">fatal</a>())</div>
<div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160; &lt;&lt; <span class="stringliteral">&quot;DeleteAccount: Directory node in ledger &quot;</span> &lt;&lt; view.<a class="code" href="classripple_1_1ReadView.html#ac284afc905c482953c35c61b459fd85b">seq</a>()</div>
<div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160; &lt;&lt; <span class="stringliteral">&quot; has index to object that is missing: &quot;</span></div>
<div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160; &lt;&lt; <a class="code" href="namespaceripple.html#af9776f187d3686a7fba4c2d2fbeebdf4">to_string</a>(dirEntry);</div>
<div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ab5c44faf987ebd7709fa11a2c8502b5f">tefBAD_LEDGER</a>;</div>
<div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160; }</div>
<div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160; </div>
<div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160; <a class="code" href="namespaceripple.html#ac151bf19e1f4daae2b04c65c65117139">LedgerEntryType</a> <span class="keyword">const</span> nodeType{safe_cast&lt;LedgerEntryType&gt;(</div>
<div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160; sleItem-&gt;getFieldU16(<a class="code" href="namespaceripple.html#a95e082491139cffc65c01b6fcaa3edfe">sfLedgerEntryType</a>))};</div>
<div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160; </div>
<div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160; <span class="comment">// Deleter handles the details of specific account-owned object</span></div>
<div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160; <span class="comment">// deletion</span></div>
<div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160; <span class="keyword">auto</span> <span class="keyword">const</span> [ter, skipEntry] = deleter(nodeType, dirEntry, sleItem);</div>
<div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160; <span class="keywordflow">if</span> (ter != <a class="code" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>)</div>
<div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160; <span class="keywordflow">return</span> ter;</div>
<div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160; </div>
<div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160; <span class="comment">// dirFirst() and dirNext() are like iterators with exposed</span></div>
<div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160; <span class="comment">// internal state. We&#39;ll take advantage of that exposed state</span></div>
<div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160; <span class="comment">// to solve a common C++ problem: iterator invalidation while</span></div>
<div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160; <span class="comment">// deleting elements from a container.</span></div>
<div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160; <span class="comment">// We have just deleted one directory entry, which means our</span></div>
<div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160; <span class="comment">// &quot;iterator state&quot; is invalid.</span></div>
<div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160; <span class="comment">// 1. During the process of getting an entry from the</span></div>
<div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160; <span class="comment">// directory uDirEntry was incremented from &#39;it&#39; to &#39;it&#39;+1.</span></div>
<div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160; <span class="comment">// 2. We then deleted the entry at index &#39;it&#39;, which means the</span></div>
<div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160; <span class="comment">// entry that was at &#39;it&#39;+1 has now moved to &#39;it&#39;.</span></div>
<div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160; <span class="comment">//</span></div>
<div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160; <span class="comment">// 3. So we verify that uDirEntry is indeed &#39;it&#39;+1. Then we jam it</span></div>
<div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160; <span class="comment">// back to &#39;it&#39; to &quot;un-invalidate&quot; the iterator.</span></div>
<div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160; assert(uDirEntry &gt;= 1);</div>
<div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160; <span class="keywordflow">if</span> (uDirEntry == 0)</div>
<div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160; {</div>
<div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160; JLOG(j.<a class="code" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160; &lt;&lt; <span class="stringliteral">&quot;DeleteAccount iterator re-validation failed.&quot;</span>;</div>
<div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160; <span class="keywordflow">return</span> <a class="code" href="namespaceripple.html#a75cb21d7f1df42f2fdc8efddb79b63f4ab5c44faf987ebd7709fa11a2c8502b5f">tefBAD_LEDGER</a>;</div>
<div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160; }</div>
<div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160; <span class="keywordflow">if</span> (skipEntry == <a class="code" href="namespaceripple.html#a5c353aea81a72e698c287a3e5289619aabafd7322c6e97d25b6299b5d6fe8920b">SkipEntry::No</a>)</div>
<div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160; uDirEntry--;</div>
<div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160; </div>
<div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160; } <span class="keywordflow">while</span> (</div>
<div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160; <a class="code" href="namespaceripple.html#a3a022ec9e19a1b18a0ac3bdf7328a877">dirNext</a>(view, ownerDirKeylet.<a class="code" href="structripple_1_1Keylet.html#a482983062843a8682fcea76a309c73db">key</a>, sleDirNode, uDirEntry, dirEntry));</div>
@@ -1749,7 +1749,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1Rules_html_a1a8388a2b9588aa9446ece92a88e0dd2"><div class="ttname"><a href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">ripple::Rules::enabled</a></div><div class="ttdeci">bool enabled(uint256 const &amp;feature) const</div><div class="ttdoc">Returns true if a feature is enabled.</div><div class="ttdef"><b>Definition:</b> <a href="Rules_8cpp_source.html#l00094">Rules.cpp:94</a></div></div>
<div class="ttc" id="ashared_ptr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a></div><div class="ttdoc">STL class.</div></div>
<div class="ttc" id="anamespaceripple_1_1keylet_html_a5660f18c64be5f8270fe66fcc25d0de8"><div class="ttname"><a href="namespaceripple_1_1keylet.html#a5660f18c64be5f8270fe66fcc25d0de8">ripple::keylet::amendments</a></div><div class="ttdeci">Keylet const &amp; amendments() noexcept</div><div class="ttdoc">The index of the amendment table.</div><div class="ttdef"><b>Definition:</b> <a href="Indexes_8cpp_source.html#l00164">Indexes.cpp:164</a></div></div>
<div class="ttc" id="anamespaceripple_html_a17a9a9b903b66e49f5413d82ce79f085a852cabbbe21a9b4d63aff777eceab2fd"><div class="ttname"><a href="namespaceripple.html#a17a9a9b903b66e49f5413d82ce79f085a852cabbbe21a9b4d63aff777eceab2fd">ripple::fhZERO_IF_FROZEN</a></div><div class="ttdeci">@ fhZERO_IF_FROZEN</div><div class="ttdef"><b>Definition:</b> <a href="View_8h_source.html#l00078">View.h:78</a></div></div>
<div class="ttc" id="anamespaceripple_html_a17a9a9b903b66e49f5413d82ce79f085a852cabbbe21a9b4d63aff777eceab2fd"><div class="ttname"><a href="namespaceripple.html#a17a9a9b903b66e49f5413d82ce79f085a852cabbbe21a9b4d63aff777eceab2fd">ripple::fhZERO_IF_FROZEN</a></div><div class="ttdeci">@ fhZERO_IF_FROZEN</div><div class="ttdef"><b>Definition:</b> <a href="View_8h_source.html#l00079">View.h:79</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac1d430838f9c822e6c0722f54807ebef"><div class="ttname"><a href="namespaceripple.html#ac1d430838f9c822e6c0722f54807ebef">ripple::forEachItemAfter</a></div><div class="ttdeci">bool forEachItemAfter(ReadView const &amp;view, Keylet const &amp;root, uint256 const &amp;after, std::uint64_t const hint, unsigned int limit, std::function&lt; bool(std::shared_ptr&lt; SLE const &gt; const &amp;)&gt; const &amp;f)</div><div class="ttdoc">Iterate all items after an item in the given directory.</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00411">View.cpp:411</a></div></div>
<div class="ttc" id="anamespaceripple_html_a7038e25fafd9239c031a42b0f285ddf4"><div class="ttname"><a href="namespaceripple.html#a7038e25fafd9239c031a42b0f285ddf4">ripple::sfOwnerNode</a></div><div class="ttdeci">const SF_UINT64 sfOwnerNode</div></div>
<div class="ttc" id="astructripple_1_1Rate_html"><div class="ttname"><a href="structripple_1_1Rate.html">ripple::Rate</a></div><div class="ttdoc">Represents a transfer rate.</div><div class="ttdef"><b>Definition:</b> <a href="Rate_8h_source.html#l00037">Rate.h:37</a></div></div>
@@ -1787,7 +1787,7 @@ $(function() {
<div class="ttc" id="afunction_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_a532cc28fd8b3d99c5de749e7e78fd08d"><div class="ttname"><a href="classripple_1_1STAmount.html#a532cc28fd8b3d99c5de749e7e78fd08d">ripple::STAmount::setIssuer</a></div><div class="ttdeci">void setIssuer(AccountID const &amp;uIssuer)</div><div class="ttdef"><b>Definition:</b> <a href="STAmount_8h_source.html#l00433">STAmount.h:433</a></div></div>
<div class="ttc" id="aclassripple_1_1ReadView_html_a1427aa6cbbda99c50b9ca0ebf6e0d0b3"><div class="ttname"><a href="classripple_1_1ReadView.html#a1427aa6cbbda99c50b9ca0ebf6e0d0b3">ripple::ReadView::parentCloseTime</a></div><div class="ttdeci">NetClock::time_point parentCloseTime() const</div><div class="ttdoc">Returns the close time of the previous ledger.</div><div class="ttdef"><b>Definition:</b> <a href="ReadView_8h_source.html#l00115">ReadView.h:115</a></div></div>
<div class="ttc" id="anamespaceripple_html_a17a9a9b903b66e49f5413d82ce79f085"><div class="ttname"><a href="namespaceripple.html#a17a9a9b903b66e49f5413d82ce79f085">ripple::FreezeHandling</a></div><div class="ttdeci">FreezeHandling</div><div class="ttdoc">Controls the treatment of frozen account balances.</div><div class="ttdef"><b>Definition:</b> <a href="View_8h_source.html#l00078">View.h:78</a></div></div>
<div class="ttc" id="anamespaceripple_html_a17a9a9b903b66e49f5413d82ce79f085"><div class="ttname"><a href="namespaceripple.html#a17a9a9b903b66e49f5413d82ce79f085">ripple::FreezeHandling</a></div><div class="ttdeci">FreezeHandling</div><div class="ttdoc">Controls the treatment of frozen account balances.</div><div class="ttdef"><b>Definition:</b> <a href="View_8h_source.html#l00079">View.h:79</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38ca576f5411ab4458ec9842480e7ebe7072"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca576f5411ab4458ec9842480e7ebe7072">ripple::tecINCOMPLETE</a></div><div class="ttdeci">@ tecINCOMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00305">TER.h:305</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_a930d70ff72f71414fcd5b560610cefb6"><div class="ttname"><a href="classbeast_1_1Journal.html#a930d70ff72f71414fcd5b560610cefb6">beast::Journal::getNullSink</a></div><div class="ttdeci">static Sink &amp; getNullSink()</div><div class="ttdoc">Returns a Sink which does nothing.</div><div class="ttdef"><b>Definition:</b> <a href="beast__Journal_8cpp_source.html#l00072">beast_Journal.cpp:72</a></div></div>
<div class="ttc" id="anamespaceripple_html_a8ca9b43bfc508a3fdbc296fb926320ce"><div class="ttname"><a href="namespaceripple.html#a8ca9b43bfc508a3fdbc296fb926320ce">ripple::parityRate</a></div><div class="ttdeci">const Rate parityRate(QUALITY_ONE)</div><div class="ttdoc">A transfer rate signifying a 1:1 exchange.</div><div class="ttdef"><b>Definition:</b> <a href="Rate_8h_source.html#l00101">Rate.h:101</a></div></div>
@@ -1814,7 +1814,7 @@ $(function() {
<div class="ttc" id="anamespaceripple_html_a7e31af9d90dac8c9e4272bf597d83fb4"><div class="ttname"><a href="namespaceripple.html#a7e31af9d90dac8c9e4272bf597d83fb4">ripple::adjustOwnerCount</a></div><div class="ttdeci">void adjustOwnerCount(ApplyView &amp;view, std::shared_ptr&lt; SLE &gt; const &amp;sle, std::int32_t amount, beast::Journal j)</div><div class="ttdoc">Adjust the owner count up or down.</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00730">View.cpp:730</a></div></div>
<div class="ttc" id="anamespaceripple_html_a260d2970ac1119109937ed1c5d4ca962a453d7db3d36a5516e925c466d1dc0ac1"><div class="ttname"><a href="namespaceripple.html#a260d2970ac1119109937ed1c5d4ca962a453d7db3d36a5516e925c466d1dc0ac1">ripple::telFAILED_PROCESSING</a></div><div class="ttdeci">@ telFAILED_PROCESSING</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00055">TER.h:55</a></div></div>
<div class="ttc" id="anamespaceripple_html_a4a9c7b33fef9015d6406302ef80b63c5a3de81b62b486203f6b8e4f2cd0832ae1"><div class="ttname"><a href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5a3de81b62b486203f6b8e4f2cd0832ae1">ripple::lsfDefaultRipple</a></div><div class="ttdeci">@ lsfDefaultRipple</div><div class="ttdef"><b>Definition:</b> <a href="LedgerFormats_8h_source.html#l00238">LedgerFormats.h:238</a></div></div>
<div class="ttc" id="anamespaceripple_html_a9722ac6213471ba4b92259afc6edc2b1"><div class="ttname"><a href="namespaceripple.html#a9722ac6213471ba4b92259afc6edc2b1">ripple::majorityAmendments_t</a></div><div class="ttdeci">std::map&lt; uint256, NetClock::time_point &gt; majorityAmendments_t</div><div class="ttdef"><b>Definition:</b> <a href="View_8h_source.html#l00222">View.h:222</a></div></div>
<div class="ttc" id="anamespaceripple_html_a9722ac6213471ba4b92259afc6edc2b1"><div class="ttname"><a href="namespaceripple.html#a9722ac6213471ba4b92259afc6edc2b1">ripple::majorityAmendments_t</a></div><div class="ttdeci">std::map&lt; uint256, NetClock::time_point &gt; majorityAmendments_t</div><div class="ttdef"><b>Definition:</b> <a href="View_8h_source.html#l00223">View.h:223</a></div></div>
<div class="ttc" id="anamespaceripple_1_1keylet_html_a50c370db96b4fdcdd202d9c2c38afce9"><div class="ttname"><a href="namespaceripple_1_1keylet.html#a50c370db96b4fdcdd202d9c2c38afce9">ripple::keylet::account</a></div><div class="ttdeci">Keylet account(AccountID const &amp;id) noexcept</div><div class="ttdoc">AccountID root.</div><div class="ttdef"><b>Definition:</b> <a href="Indexes_8cpp_source.html#l00134">Indexes.cpp:134</a></div></div>
<div class="ttc" id="aenable_if_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/enable_if.html">std::enable_if_t</a></div></div>
<div class="ttc" id="aclassripple_1_1STObject_html_a7eedf70fc6afba6c2b8c6b2ba27ba23e"><div class="ttname"><a href="classripple_1_1STObject.html#a7eedf70fc6afba6c2b8c6b2ba27ba23e">ripple::STObject::setFieldAmount</a></div><div class="ttdeci">void setFieldAmount(SField const &amp;field, STAmount const &amp;)</div><div class="ttdef"><b>Definition:</b> <a href="STObject_8cpp_source.html#l00707">STObject.cpp:707</a></div></div>
@@ -1850,6 +1850,7 @@ $(function() {
<div class="ttc" id="anamespaceripple_html_af487c2d8c871030560b07f7b7c118fd1"><div class="ttname"><a href="namespaceripple.html#af487c2d8c871030560b07f7b7c118fd1">ripple::sfAMMID</a></div><div class="ttdeci">const SF_UINT256 sfAMMID</div></div>
<div class="ttc" id="aclassripple_1_1STLedgerEntry_html_a3c289baf99474db3d44d381e43358723"><div class="ttname"><a href="classripple_1_1STLedgerEntry.html#a3c289baf99474db3d44d381e43358723">ripple::STLedgerEntry::getType</a></div><div class="ttdeci">LedgerEntryType getType() const</div><div class="ttdef"><b>Definition:</b> <a href="STLedgerEntry_8h_source.html#l00119">STLedgerEntry.h:119</a></div></div>
<div class="ttc" id="aclassripple_1_1ReadView_html_a3351e0244f921234d5ba005a07ddf539"><div class="ttname"><a href="classripple_1_1ReadView.html#a3351e0244f921234d5ba005a07ddf539">ripple::ReadView::read</a></div><div class="ttdeci">virtual std::shared_ptr&lt; SLE const &gt; read(Keylet const &amp;k) const =0</div><div class="ttdoc">Return the state item associated with a key.</div></div>
<div class="ttc" id="anamespaceripple_html_ac63838a9be23c18086f1f05c78867399"><div class="ttname"><a href="namespaceripple.html#ac63838a9be23c18086f1f05c78867399">ripple::cleanupOnAccountDelete</a></div><div class="ttdeci">TER cleanupOnAccountDelete(ApplyView &amp;view, Keylet const &amp;ownerDirKeylet, EntryDeleter const &amp;deleter, beast::Journal j, std::optional&lt; uint16_t &gt; maxNodesToDelete)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l01531">View.cpp:1531</a></div></div>
<div class="ttc" id="anamespaceripple_html_ae93a0ce909950194e6f9aaed7579ea74"><div class="ttname"><a href="namespaceripple.html#ae93a0ce909950194e6f9aaed7579ea74">ripple::areCompatible</a></div><div class="ttdeci">bool areCompatible(ReadView const &amp;validLedger, ReadView const &amp;testLedger, beast::Journal::Stream &amp;s, const char *reason)</div><div class="ttdoc">Return false if the test ledger is provably incompatible with the valid ledger, that is,...</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00499">View.cpp:499</a></div></div>
<div class="ttc" id="anamespaceripple_html_a15bb971c7e554fc3df218aba54c33fcc"><div class="ttname"><a href="namespaceripple.html#a15bb971c7e554fc3df218aba54c33fcc">ripple::accountFunds</a></div><div class="ttdeci">STAmount accountFunds(ReadView const &amp;view, AccountID const &amp;id, STAmount const &amp;saDefault, FreezeHandling freezeHandling, beast::Journal j)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00282">View.cpp:282</a></div></div>
<div class="ttc" id="anamespaceripple_html_a5ee3f52d4feaf2ad6775033fbae860da"><div class="ttname"><a href="namespaceripple.html#a5ee3f52d4feaf2ad6775033fbae860da">ripple::transferXRP</a></div><div class="ttdeci">TER transferXRP(ApplyView &amp;view, AccountID const &amp;from, AccountID const &amp;to, STAmount const &amp;amount, beast::Journal j)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l01469">View.cpp:1469</a></div></div>
@@ -1870,7 +1871,6 @@ $(function() {
<div class="ttc" id="anamespaceripple_html_a95e082491139cffc65c01b6fcaa3edfe"><div class="ttname"><a href="namespaceripple.html#a95e082491139cffc65c01b6fcaa3edfe">ripple::sfLedgerEntryType</a></div><div class="ttdeci">const SF_UINT16 sfLedgerEntryType</div></div>
<div class="ttc" id="anamespaceripple_html_ac151bf19e1f4daae2b04c65c65117139"><div class="ttname"><a href="namespaceripple.html#ac151bf19e1f4daae2b04c65c65117139">ripple::LedgerEntryType</a></div><div class="ttdeci">LedgerEntryType</div><div class="ttdoc">Identifiers for on-ledger objects.</div><div class="ttdef"><b>Definition:</b> <a href="LedgerFormats_8h_source.html#l00053">LedgerFormats.h:53</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38cac480d742e7760c48047bb3ccc50a40ef"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac480d742e7760c48047bb3ccc50a40ef">ripple::tecNO_LINE</a></div><div class="ttdeci">@ tecNO_LINE</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00271">TER.h:271</a></div></div>
<div class="ttc" id="anamespaceripple_html_a1853d68963f99c793be414cf0d1bc8d5"><div class="ttname"><a href="namespaceripple.html#a1853d68963f99c793be414cf0d1bc8d5">ripple::cleanupOnAccountDelete</a></div><div class="ttdeci">TER cleanupOnAccountDelete(ApplyView &amp;view, Keylet const &amp;ownerDirKeylet, std::function&lt; TER(LedgerEntryType, uint256 const &amp;, std::shared_ptr&lt; SLE &gt; &amp;)&gt; deleter, beast::Journal j, std::optional&lt; uint16_t &gt; maxNodesToDelete)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l01531">View.cpp:1531</a></div></div>
<div class="ttc" id="astructripple_1_1Fees_html_acb07843d0d0e3ccacd7cf51d5296fe40"><div class="ttname"><a href="structripple_1_1Fees.html#acb07843d0d0e3ccacd7cf51d5296fe40">ripple::Fees::accountReserve</a></div><div class="ttdeci">XRPAmount accountReserve(std::size_t ownerCount) const</div><div class="ttdoc">Returns the account reserve given the owner count, in drops.</div><div class="ttdef"><b>Definition:</b> <a href="protocol_2Fees_8h_source.html#l00049">protocol/Fees.h:49</a></div></div>
<div class="ttc" id="aclassripple_1_1ReadView_html_ac284afc905c482953c35c61b459fd85b"><div class="ttname"><a href="classripple_1_1ReadView.html#ac284afc905c482953c35c61b459fd85b">ripple::ReadView::seq</a></div><div class="ttdeci">LedgerIndex seq() const</div><div class="ttdoc">Returns the sequence number of the base ledger.</div><div class="ttdef"><b>Definition:</b> <a href="ReadView_8h_source.html#l00122">ReadView.h:122</a></div></div>
<div class="ttc" id="aclassripple_1_1base__uint_html_a1f9135f2eef3ec702d5f17e679733e8e"><div class="ttname"><a href="classripple_1_1base__uint.html#a1f9135f2eef3ec702d5f17e679733e8e">ripple::base_uint::zero</a></div><div class="ttdeci">void zero()</div><div class="ttdef"><b>Definition:</b> <a href="base__uint_8h_source.html#l00542">base_uint.h:542</a></div></div>
@@ -1880,6 +1880,7 @@ $(function() {
<div class="ttc" id="anamespaceripple_html_adebe4d783be9c979e67fdbb2bc27162fac110e4ea19a46f9ce263c5d746b34178"><div class="ttname"><a href="namespaceripple.html#adebe4d783be9c979e67fdbb2bc27162fac110e4ea19a46f9ce263c5d746b34178">ripple::terNO_AMM</a></div><div class="ttdeci">@ terNO_AMM</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00210">TER.h:210</a></div></div>
<div class="ttc" id="acassert_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/cassert.html">cassert</a></div></div>
<div class="ttc" id="aclassripple_1_1ReadView_html_a6989ce9f6240d5c600d3a4f526f89d29"><div class="ttname"><a href="classripple_1_1ReadView.html#a6989ce9f6240d5c600d3a4f526f89d29">ripple::ReadView::ownerCountHook</a></div><div class="ttdeci">virtual std::uint32_t ownerCountHook(AccountID const &amp;account, std::uint32_t count) const</div><div class="ttdef"><b>Definition:</b> <a href="ReadView_8h_source.html#l00196">ReadView.h:196</a></div></div>
<div class="ttc" id="anamespaceripple_html_a5c353aea81a72e698c287a3e5289619aabafd7322c6e97d25b6299b5d6fe8920b"><div class="ttname"><a href="namespaceripple.html#a5c353aea81a72e698c287a3e5289619aabafd7322c6e97d25b6299b5d6fe8920b">ripple::SkipEntry::No</a></div><div class="ttdeci">@ No</div></div>
<div class="ttc" id="anamespaceripple_html_ab8a9c54401e8209fca7396c6b9c610f4"><div class="ttname"><a href="namespaceripple.html#ab8a9c54401e8209fca7396c6b9c610f4">ripple::sfBalance</a></div><div class="ttdeci">const SF_AMOUNT sfBalance</div></div>
<div class="ttc" id="aclassripple_1_1STVector256_html"><div class="ttname"><a href="classripple_1_1STVector256.html">ripple::STVector256</a></div><div class="ttdef"><b>Definition:</b> <a href="STVector256_8h_source.html#l00029">STVector256.h:29</a></div></div>
<div class="ttc" id="anamespaceripple_1_1detail_html_a1e1dc66b9b23e22fac4c3a2591358f7e"><div class="ttname"><a href="namespaceripple_1_1detail.html#a1e1dc66b9b23e22fac4c3a2591358f7e">ripple::detail::internalDirFirst</a></div><div class="ttdeci">bool internalDirFirst(V &amp;view, uint256 const &amp;root, std::shared_ptr&lt; N &gt; &amp;page, unsigned int &amp;index, uint256 &amp;entry)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00089">View.cpp:89</a></div></div>