mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-20 02:55:50 +00:00
2070 lines
386 KiB
HTML
2070 lines
386 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
|
|
<meta name="generator" content="Doxygen 1.9.8"/>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1"/>
|
|
<title>rippled: STAmount.cpp Source File</title>
|
|
<link href="tabs.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="jquery.js"></script>
|
|
<script type="text/javascript" src="dynsections.js"></script>
|
|
<link href="search/search.css" rel="stylesheet" type="text/css"/>
|
|
<script type="text/javascript" src="search/searchdata.js"></script>
|
|
<script type="text/javascript" src="search/search.js"></script>
|
|
<link href="doxygen.css" rel="stylesheet" type="text/css" />
|
|
</head>
|
|
<body>
|
|
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
|
<div id="titlearea">
|
|
<table cellspacing="0" cellpadding="0">
|
|
<tbody>
|
|
<tr id="projectrow">
|
|
<td id="projectalign">
|
|
<div id="projectname">rippled
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<!-- end header part -->
|
|
<!-- Generated by Doxygen 1.9.8 -->
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
var searchBox = new SearchBox("searchBox", "search/",'.html');
|
|
/* @license-end */
|
|
</script>
|
|
<script type="text/javascript" src="menudata.js"></script>
|
|
<script type="text/javascript" src="menu.js"></script>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(function() {
|
|
initMenu('',true,false,'search.php','Search');
|
|
$(document).ready(function() { init_search(); });
|
|
});
|
|
/* @license-end */
|
|
</script>
|
|
<div id="main-nav"></div>
|
|
<script type="text/javascript">
|
|
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&dn=expat.txt MIT */
|
|
$(document).ready(function() { init_codefold(0); });
|
|
/* @license-end */
|
|
</script>
|
|
<!-- window showing the filter options -->
|
|
<div id="MSearchSelectWindow"
|
|
onmouseover="return searchBox.OnSearchSelectShow()"
|
|
onmouseout="return searchBox.OnSearchSelectHide()"
|
|
onkeydown="return searchBox.OnSearchSelectKey(event)">
|
|
</div>
|
|
|
|
<!-- iframe showing the search results (closed by default) -->
|
|
<div id="MSearchResultsWindow">
|
|
<div id="MSearchResults">
|
|
<div class="SRPage">
|
|
<div id="SRIndex">
|
|
<div id="SRResults"></div>
|
|
<div class="SRStatus" id="Loading">Loading...</div>
|
|
<div class="SRStatus" id="Searching">Searching...</div>
|
|
<div class="SRStatus" id="NoMatches">No Matches</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="nav-path" class="navpath">
|
|
<ul>
|
|
<li class="navelem"><a class="el" href="dir_90ffdbabf412cfdffe6b2193e0ce938a.html">libxrpl</a></li><li class="navelem"><a class="el" href="dir_4cb643486f27a568a0d40f174f670f35.html">protocol</a></li> </ul>
|
|
</div>
|
|
</div><!-- top -->
|
|
<div class="header">
|
|
<div class="headertitle"><div class="title">STAmount.cpp</div></div>
|
|
</div><!--header-->
|
|
<div class="contents">
|
|
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include <xrpl/basics/LocalValue.h></span></div>
|
|
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="preprocessor">#include <xrpl/basics/Log.h></span></div>
|
|
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include <xrpl/basics/Number.h></span></div>
|
|
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include <xrpl/basics/base_uint.h></span></div>
|
|
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include <xrpl/basics/contract.h></span></div>
|
|
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include <xrpl/basics/safe_cast.h></span></div>
|
|
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include <xrpl/beast/core/LexicalCast.h></span></div>
|
|
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include <xrpl/beast/utility/Zero.h></span></div>
|
|
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include <xrpl/beast/utility/instrumentation.h></span></div>
|
|
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="preprocessor">#include <xrpl/json/json_forwards.h></span></div>
|
|
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include <xrpl/json/json_value.h></span></div>
|
|
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include <xrpl/protocol/AccountID.h></span></div>
|
|
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="preprocessor">#include <xrpl/protocol/Asset.h></span></div>
|
|
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include <xrpl/protocol/IOUAmount.h></span></div>
|
|
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="preprocessor">#include <xrpl/protocol/Issue.h></span></div>
|
|
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include <xrpl/protocol/MPTAmount.h></span></div>
|
|
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include <xrpl/protocol/MPTIssue.h></span></div>
|
|
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include <xrpl/protocol/Protocol.h></span></div>
|
|
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include <xrpl/protocol/SField.h></span></div>
|
|
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include <xrpl/protocol/STAmount.h></span></div>
|
|
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include <xrpl/protocol/STBase.h></span></div>
|
|
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#include <xrpl/protocol/STNumber.h></span></div>
|
|
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span><span class="preprocessor">#include <xrpl/protocol/Serializer.h></span></div>
|
|
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include <xrpl/protocol/SystemParameters.h></span></div>
|
|
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include <xrpl/protocol/UintTypes.h></span></div>
|
|
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include <xrpl/protocol/XRPAmount.h></span></div>
|
|
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include <xrpl/protocol/jss.h></span></div>
|
|
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
|
|
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span><span class="preprocessor">#include <boost/algorithm/string/classification.hpp></span></div>
|
|
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span><span class="preprocessor">#include <boost/algorithm/string/split.hpp></span></div>
|
|
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span><span class="preprocessor">#include <boost/multiprecision/detail/default_ops.hpp></span></div>
|
|
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span><span class="preprocessor">#include <boost/multiprecision/fwd.hpp></span></div>
|
|
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="preprocessor">#include <boost/regex/v5/regbase.hpp></span></div>
|
|
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span><span class="preprocessor">#include <boost/regex/v5/regex.hpp></span></div>
|
|
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span><span class="preprocessor">#include <boost/regex/v5/regex_fwd.hpp></span></div>
|
|
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span><span class="preprocessor">#include <boost/regex/v5/regex_match.hpp></span></div>
|
|
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> </div>
|
|
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span><span class="preprocessor">#include <<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/algorithm.html">algorithm</a>></span></div>
|
|
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span><span class="preprocessor">#include <<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/cstddef.html">cstddef</a>></span></div>
|
|
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span><span class="preprocessor">#include <<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/cstdint.html">cstdint</a>></span></div>
|
|
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span><span class="preprocessor">#include <<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/exception.html">exception</a>></span></div>
|
|
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span><span class="preprocessor">#include <<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/iterator.html">iterator</a>></span></div>
|
|
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span><span class="preprocessor">#include <<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/limits.html">limits</a>></span></div>
|
|
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span><span class="preprocessor">#include <<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/memory.html">memory</a>></span></div>
|
|
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span><span class="preprocessor">#include <<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/stdexcept.html">stdexcept</a>></span></div>
|
|
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span><span class="preprocessor">#include <<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/string.html">string</a>></span></div>
|
|
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span><span class="preprocessor">#include <<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/utility.html">utility</a>></span></div>
|
|
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span><span class="preprocessor">#include <<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/vector.html">vector</a>></span></div>
|
|
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
|
|
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespaceripple.html">ripple</a> {</div>
|
|
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> </div>
|
|
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"><a class="line" href="namespaceripple.html#ae78e6fdf69701c0f0c8952468ee49e96"> 52</a></span><span class="keyword">static</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <span class="keyword">const</span> <a class="code hl_variable" href="namespaceripple.html#ae78e6fdf69701c0f0c8952468ee49e96">tenTo14</a> = 100000000000000ull;</div>
|
|
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="namespaceripple.html#a5ad1aaa8fb2bf36539e8817488a2076f"> 53</a></span><span class="keyword">static</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <span class="keyword">const</span> <a class="code hl_variable" href="namespaceripple.html#a5ad1aaa8fb2bf36539e8817488a2076f">tenTo14m1</a> = <a class="code hl_variable" href="namespaceripple.html#ae78e6fdf69701c0f0c8952468ee49e96">tenTo14</a> - 1;</div>
|
|
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="namespaceripple.html#a3fe32b2904420f2f653103f040ca488c"> 54</a></span><span class="keyword">static</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <span class="keyword">const</span> <a class="code hl_variable" href="namespaceripple.html#a3fe32b2904420f2f653103f040ca488c">tenTo17</a> = <a class="code hl_variable" href="namespaceripple.html#ae78e6fdf69701c0f0c8952468ee49e96">tenTo14</a> * 1000;</div>
|
|
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> </div>
|
|
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span><span class="keyword">static</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a></div>
|
|
<div class="foldopen" id="foldopen00058" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"><a class="line" href="namespaceripple.html#aa188903e7be862775b4591c37dc1a8a6"> 58</a></span><a class="code hl_function" href="namespaceripple.html#aa188903e7be862775b4591c37dc1a8a6">getInt64Value</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& amount, <span class="keywordtype">bool</span> <a class="code hl_function" href="namespaceripple_1_1credentials.html#ab0cd6a3f76fa9f09c5f1c2d6fffc11e0">valid</a>, <span class="keywordtype">char</span> <span class="keyword">const</span>* error)</div>
|
|
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span>{</div>
|
|
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple_1_1credentials.html#ab0cd6a3f76fa9f09c5f1c2d6fffc11e0">valid</a>)</div>
|
|
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> Throw<std::runtime_error>(error);</div>
|
|
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> XRPL_ASSERT(</div>
|
|
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> amount.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>() == 0, <span class="stringliteral">"ripple::getInt64Value : exponent is zero"</span>);</div>
|
|
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> </div>
|
|
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="keyword">auto</span> ret = <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a><span class="keyword">></span>(amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>());</div>
|
|
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> </div>
|
|
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> XRPL_ASSERT(</div>
|
|
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a><span class="keyword">></span>(ret) == amount.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>(),</div>
|
|
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="stringliteral">"ripple::getInt64Value : mantissa must roundtrip"</span>);</div>
|
|
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> </div>
|
|
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keywordflow">if</span> (amount.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>())</div>
|
|
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> ret = -ret;</div>
|
|
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> </div>
|
|
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> <span class="keywordflow">return</span> ret;</div>
|
|
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> </div>
|
|
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span><span class="keyword">static</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a></div>
|
|
<div class="foldopen" id="foldopen00078" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c"> 78</a></span><a class="code hl_function" href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c">getSNValue</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& amount)</div>
|
|
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span>{</div>
|
|
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#aa188903e7be862775b4591c37dc1a8a6">getInt64Value</a>(amount, amount.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>(), <span class="stringliteral">"amount is not native!"</span>);</div>
|
|
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
|
|
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span><span class="keyword">static</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a></div>
|
|
<div class="foldopen" id="foldopen00084" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="namespaceripple.html#aabc169489c016c71f6980a121352832e"> 84</a></span><a class="code hl_function" href="namespaceripple.html#aabc169489c016c71f6980a121352832e">getMPTValue</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& amount)</div>
|
|
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span>{</div>
|
|
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#aa188903e7be862775b4591c37dc1a8a6">getInt64Value</a>(</div>
|
|
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> amount, amount.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>(), <span class="stringliteral">"amount is not MPT!"</span>);</div>
|
|
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> </div>
|
|
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span><span class="keyword">static</span> <span class="keywordtype">bool</span></div>
|
|
<div class="foldopen" id="foldopen00091" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"><a class="line" href="namespaceripple.html#a30c2e63999ddc369a258a7c2766e968f"> 91</a></span><a class="code hl_function" href="namespaceripple.html#a30c2e63999ddc369a258a7c2766e968f">areComparable</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v1, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v2)</div>
|
|
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span>{</div>
|
|
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">if</span> (v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>>() && v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>>())</div>
|
|
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">return</span> v1.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() == v2.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() &&</div>
|
|
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a4faedb8cf3aa230868cc0ecd3b0da6d6">get</a><<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>>().currency == v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a4faedb8cf3aa230868cc0ecd3b0da6d6">get</a><<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>>().<a class="code hl_variable" href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">currency</a>;</div>
|
|
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keywordflow">if</span> (v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>() && v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <span class="keywordflow">return</span> v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a4faedb8cf3aa230868cc0ecd3b0da6d6">get</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>() == v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a4faedb8cf3aa230868cc0ecd3b0da6d6">get</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>();</div>
|
|
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
|
|
<div class="foldopen" id="foldopen00101" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#aeeeb64eb7e4a2fbff4d37a6557802bb9"> 101</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#aeeeb64eb7e4a2fbff4d37a6557802bb9">STAmount::STAmount</a>(<a class="code hl_class" href="classripple_1_1SerialIter.html">SerialIter</a>& sit, <a class="code hl_class" href="classripple_1_1SField.html">SField</a> <span class="keyword">const</span>& name) : <a class="code hl_class" href="classripple_1_1STBase.html">STBase</a>(name)</div>
|
|
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span>{</div>
|
|
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> = sit.<a class="code hl_function" href="classripple_1_1SerialIter.html#af720e6387dcaba61af9c9c724e33097e">get64</a>();</div>
|
|
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> </div>
|
|
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="comment">// native or MPT</span></div>
|
|
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordflow">if</span> ((<a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> & <a class="code hl_variable" href="classripple_1_1STAmount.html#a7f9cd54ff0ad45b8fe5a17d4b48378d4">cIssuedCurrency</a>) == 0)</div>
|
|
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> {</div>
|
|
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">if</span> ((<a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> & <a class="code hl_variable" href="classripple_1_1STAmount.html#a83d035107b7e2038db4f4fea771f0fc4">cMPToken</a>) != 0)</div>
|
|
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> {</div>
|
|
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="comment">// is MPT</span></div>
|
|
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> = 0;</div>
|
|
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> = (<a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> & <a class="code hl_variable" href="classripple_1_1STAmount.html#a4d03d1d0fab2d8e6c43a6bb4b2d52160">cPositive</a>) == 0;</div>
|
|
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = (<a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> << 8) | sit.<a class="code hl_function" href="classripple_1_1SerialIter.html#abd5f83aa8b3943ca9cbfa005aaa33734">get8</a>();</div>
|
|
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a> = sit.<a class="code hl_function" href="classripple_1_1SerialIter.html#a29c9a480919f3d09b48fe49ffdd69823">get192</a>();</div>
|
|
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> }</div>
|
|
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="comment">// else is XRP</span></div>
|
|
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a> = <a class="code hl_function" href="namespaceripple.html#a02be1da6bd3d611ea7a48b208b060b6c">xrpIssue</a>();</div>
|
|
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> <span class="comment">// positive</span></div>
|
|
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="keywordflow">if</span> ((<a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> & <a class="code hl_variable" href="classripple_1_1STAmount.html#a4d03d1d0fab2d8e6c43a6bb4b2d52160">cPositive</a>) != 0)</div>
|
|
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> {</div>
|
|
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = <a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> & <a class="code hl_variable" href="classripple_1_1STAmount.html#ac489a5d21c87eeadae5e63c8c9083fd6">cValueMask</a>;</div>
|
|
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> = 0;</div>
|
|
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> = <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> }</div>
|
|
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> </div>
|
|
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> <span class="comment">// negative</span></div>
|
|
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> == 0)</div>
|
|
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> Throw<std::runtime_error>(<span class="stringliteral">"negative zero is not canonical"</span>);</div>
|
|
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
|
|
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = <a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> & <a class="code hl_variable" href="classripple_1_1STAmount.html#ac489a5d21c87eeadae5e63c8c9083fd6">cValueMask</a>;</div>
|
|
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> = 0;</div>
|
|
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> }</div>
|
|
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
|
|
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <a class="code hl_class" href="classripple_1_1Issue.html">Issue</a> <a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>;</div>
|
|
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>.<a class="code hl_variable" href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">currency</a> = sit.<a class="code hl_function" href="classripple_1_1SerialIter.html#a2fe5dd5ca6e8bf2f927b1ddefeb3430b">get160</a>();</div>
|
|
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> </div>
|
|
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#a20d30277b9c78756b3d14493055a307c">isXRP</a>(<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>.<a class="code hl_variable" href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">currency</a>))</div>
|
|
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> Throw<std::runtime_error>(<span class="stringliteral">"invalid native currency"</span>);</div>
|
|
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
|
|
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>.<a class="code hl_variable" href="classripple_1_1Issue.html#a46e4805870b1bad6a8691bed0b8acec8">account</a> = sit.<a class="code hl_function" href="classripple_1_1SerialIter.html#a2fe5dd5ca6e8bf2f927b1ddefeb3430b">get160</a>();</div>
|
|
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> </div>
|
|
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#a20d30277b9c78756b3d14493055a307c">isXRP</a>(<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>.<a class="code hl_variable" href="classripple_1_1Issue.html#a46e4805870b1bad6a8691bed0b8acec8">account</a>))</div>
|
|
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> Throw<std::runtime_error>(<span class="stringliteral">"invalid native account"</span>);</div>
|
|
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> </div>
|
|
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// 10 bits for the offset, sign and "not native" flag</span></div>
|
|
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="keywordtype">int</span> offset = <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(<a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> >> (64 - 10));</div>
|
|
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
|
|
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> <a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> &= ~(1023ull << (64 - 10));</div>
|
|
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
|
|
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a>)</div>
|
|
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> {</div>
|
|
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keywordtype">bool</span> isNegative = (offset & 256) == 0;</div>
|
|
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> offset = (offset & 255) - 97; <span class="comment">// center the range</span></div>
|
|
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> </div>
|
|
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> <span class="keywordflow">if</span> (value < cMinValue || value > <a class="code hl_variable" href="classripple_1_1STAmount.html#aa0f01e6eacfb24a14b792ab8bd288de3">cMaxValue</a> || offset < <a class="code hl_variable" href="classripple_1_1STAmount.html#a539c35e311bcd82305e49e1f2948e880">cMinOffset</a> ||</div>
|
|
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> offset > <a class="code hl_variable" href="classripple_1_1STAmount.html#a5392e4fd5eef1038f40b1d260b7ad1ae">cMaxOffset</a>)</div>
|
|
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> {</div>
|
|
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> Throw<std::runtime_error>(<span class="stringliteral">"invalid currency value"</span>);</div>
|
|
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> }</div>
|
|
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
|
|
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a> = <a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>;</div>
|
|
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = <a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a>;</div>
|
|
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> = offset;</div>
|
|
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> = isNegative;</div>
|
|
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <a class="code hl_function" href="classripple_1_1STAmount.html#a104f16b3dcb68a0b317788706c347809">canonicalize</a>();</div>
|
|
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> }</div>
|
|
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> </div>
|
|
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">if</span> (offset != 512)</div>
|
|
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> Throw<std::runtime_error>(<span class="stringliteral">"invalid currency value"</span>);</div>
|
|
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> </div>
|
|
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a> = <a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>;</div>
|
|
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = 0;</div>
|
|
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> = 0;</div>
|
|
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> = <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <a class="code hl_function" href="classripple_1_1STAmount.html#a104f16b3dcb68a0b317788706c347809">canonicalize</a>();</div>
|
|
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> </div>
|
|
<div class="foldopen" id="foldopen00183" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#ac6a5ec0c212fb6e0bbd8ae07e6e25f25"> 183</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#aeeeb64eb7e4a2fbff4d37a6557802bb9">STAmount::STAmount</a>(<a class="code hl_class" href="classripple_1_1SField.html">SField</a> <span class="keyword">const</span>& name, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a> mantissa)</div>
|
|
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> : <a class="code hl_class" href="classripple_1_1STBase.html">STBase</a>(name), mAsset(<a class="code hl_function" href="namespaceripple.html#a02be1da6bd3d611ea7a48b208b060b6c">xrpIssue</a>()), mOffset(0)</div>
|
|
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span>{</div>
|
|
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <a class="code hl_function" href="classripple_1_1STAmount.html#ae252d978fddac8a365f6fc67556843f2">set</a>(<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>);</div>
|
|
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
|
|
<div class="foldopen" id="foldopen00189" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#ab4a7cf8e33b47e8b5e414e1287305d9e"> 189</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#aeeeb64eb7e4a2fbff4d37a6557802bb9">STAmount::STAmount</a>(<a class="code hl_class" href="classripple_1_1SField.html">SField</a> <span class="keyword">const</span>& name, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> mantissa, <span class="keywordtype">bool</span> negative)</div>
|
|
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> : <a class="code hl_class" href="classripple_1_1STBase.html">STBase</a>(name)</div>
|
|
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> , mAsset(<a class="code hl_function" href="namespaceripple.html#a02be1da6bd3d611ea7a48b208b060b6c">xrpIssue</a>())</div>
|
|
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> , mValue(mantissa)</div>
|
|
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> , mOffset(0)</div>
|
|
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> , mIsNegative(negative)</div>
|
|
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span>{</div>
|
|
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> XRPL_ASSERT(</div>
|
|
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> <= <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits.html">std::numeric_limits<std::int64_t>::max</a>(),</div>
|
|
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="stringliteral">"ripple::STAmount::STAmount(SField, std::uint64_t, bool) : maximum "</span></div>
|
|
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="stringliteral">"mantissa input"</span>);</div>
|
|
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> </div>
|
|
<div class="foldopen" id="foldopen00202" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#acf94630ec77a345750b3688baea0490c"> 202</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#aeeeb64eb7e4a2fbff4d37a6557802bb9">STAmount::STAmount</a>(<a class="code hl_class" href="classripple_1_1SField.html">SField</a> <span class="keyword">const</span>& name, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& from)</div>
|
|
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> : <a class="code hl_class" href="classripple_1_1STBase.html">STBase</a>(name)</div>
|
|
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> , mAsset(from.mAsset)</div>
|
|
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> , mValue(from.mValue)</div>
|
|
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> , mOffset(from.mOffset)</div>
|
|
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> , mIsNegative(from.mIsNegative)</div>
|
|
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span>{</div>
|
|
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> XRPL_ASSERT(</div>
|
|
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> <= <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits.html">std::numeric_limits<std::int64_t>::max</a>(),</div>
|
|
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="stringliteral">"ripple::STAmount::STAmount(SField, STAmount) : maximum input"</span>);</div>
|
|
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <a class="code hl_function" href="classripple_1_1STAmount.html#a104f16b3dcb68a0b317788706c347809">canonicalize</a>();</div>
|
|
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> </div>
|
|
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> </div>
|
|
<div class="foldopen" id="foldopen00217" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a7f096cadcfb0e67e88c6913afd87ea2e"> 217</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#aeeeb64eb7e4a2fbff4d37a6557802bb9">STAmount::STAmount</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> mantissa, <span class="keywordtype">bool</span> negative)</div>
|
|
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> : mAsset(<a class="code hl_function" href="namespaceripple.html#a02be1da6bd3d611ea7a48b208b060b6c">xrpIssue</a>())</div>
|
|
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> , mValue(mantissa)</div>
|
|
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> , mOffset(0)</div>
|
|
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> , mIsNegative(mantissa != 0 && negative)</div>
|
|
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span>{</div>
|
|
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> XRPL_ASSERT(</div>
|
|
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> <= <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits.html">std::numeric_limits<std::int64_t>::max</a>(),</div>
|
|
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <span class="stringliteral">"ripple::STAmount::STAmount(std::uint64_t, bool) : maximum mantissa "</span></div>
|
|
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="stringliteral">"input"</span>);</div>
|
|
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> </div>
|
|
<div class="foldopen" id="foldopen00229" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a67baee148280677d33108339eb2a3d6e"> 229</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#aeeeb64eb7e4a2fbff4d37a6557802bb9">STAmount::STAmount</a>(<a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a> <span class="keyword">const</span>& amount)</div>
|
|
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> : mAsset(<a class="code hl_function" href="namespaceripple.html#a02be1da6bd3d611ea7a48b208b060b6c">xrpIssue</a>()), mOffset(0), mIsNegative(amount < <a class="code hl_namespace" href="namespacebeast.html">beast</a>::zero)</div>
|
|
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span>{</div>
|
|
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a>)</div>
|
|
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = unsafe_cast<std::uint64_t>(-amount.<a class="code hl_function" href="classripple_1_1XRPAmount.html#a8a65b5528d6021159c5b8772aa86cfc1">drops</a>());</div>
|
|
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = unsafe_cast<std::uint64_t>(amount.<a class="code hl_function" href="classripple_1_1XRPAmount.html#a8a65b5528d6021159c5b8772aa86cfc1">drops</a>());</div>
|
|
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> </div>
|
|
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <a class="code hl_function" href="classripple_1_1STAmount.html#a104f16b3dcb68a0b317788706c347809">canonicalize</a>();</div>
|
|
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> </div>
|
|
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/unique_ptr.html">std::unique_ptr<STAmount></a></div>
|
|
<div class="foldopen" id="foldopen00241" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a6a24e9e13e8aaaabf693f101c1a8e21b"> 241</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a6a24e9e13e8aaaabf693f101c1a8e21b">STAmount::construct</a>(<a class="code hl_class" href="classripple_1_1SerialIter.html">SerialIter</a>& sit, <a class="code hl_class" href="classripple_1_1SField.html">SField</a> <span class="keyword">const</span>& name)</div>
|
|
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span>{</div>
|
|
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::make_unique<STAmount></a>(sit, name);</div>
|
|
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> </div>
|
|
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span><a class="code hl_class" href="classripple_1_1STBase.html">STBase</a>*</div>
|
|
<div class="foldopen" id="foldopen00247" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#abf159f0fdfeb655c111a50b303a0d774"> 247</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#abf159f0fdfeb655c111a50b303a0d774">STAmount::copy</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> n, <span class="keywordtype">void</span>* buf)<span class="keyword"> const</span></div>
|
|
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span><span class="keyword"></span>{</div>
|
|
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1STBase.html#a84fe46ac92fe704869cc6d64c49dd1ba">emplace</a>(n, buf, *<span class="keyword">this</span>);</div>
|
|
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> </div>
|
|
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span><a class="code hl_class" href="classripple_1_1STBase.html">STBase</a>*</div>
|
|
<div class="foldopen" id="foldopen00253" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a359188da6f9563edb159e0651f6ccf6e"> 253</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a359188da6f9563edb159e0651f6ccf6e">STAmount::move</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> n, <span class="keywordtype">void</span>* buf)</div>
|
|
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span>{</div>
|
|
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1STBase.html#a84fe46ac92fe704869cc6d64c49dd1ba">emplace</a>(n, buf, std::move(*<span class="keyword">this</span>));</div>
|
|
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> </div>
|
|
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span><span class="comment">// Conversion</span></div>
|
|
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span><a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a></div>
|
|
<div class="foldopen" id="foldopen00264" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a6c2ca92e9c91e2a34493d61e02d79ebf"> 264</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a6c2ca92e9c91e2a34493d61e02d79ebf">STAmount::xrp</a>()<span class="keyword"> const</span></div>
|
|
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span><span class="keyword"></span>{</div>
|
|
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>())</div>
|
|
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> Throw<std::logic_error>(</div>
|
|
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <span class="stringliteral">"Cannot return non-native STAmount as XRPAmount"</span>);</div>
|
|
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> </div>
|
|
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="keyword">auto</span> drops = <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">XRPAmount::value_type</a><span class="keyword">></span>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a>);</div>
|
|
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> XRPL_ASSERT(<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> == 0, <span class="stringliteral">"ripple::STAmount::xrp : amount is canonical"</span>);</div>
|
|
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> </div>
|
|
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a>)</div>
|
|
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> drops = -drops;</div>
|
|
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> </div>
|
|
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a>{drops};</div>
|
|
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> </div>
|
|
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span><a class="code hl_class" href="classripple_1_1IOUAmount.html">IOUAmount</a></div>
|
|
<div class="foldopen" id="foldopen00280" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a094bda660d23e258021a2c63112ebc9a"> 280</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a094bda660d23e258021a2c63112ebc9a">STAmount::iou</a>()<span class="keyword"> const</span></div>
|
|
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span><span class="keyword"></span>{</div>
|
|
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() || !holds<Issue>())</div>
|
|
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> Throw<std::logic_error>(<span class="stringliteral">"Cannot return non-IOU STAmount as IOUAmount"</span>);</div>
|
|
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> </div>
|
|
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">auto</span> <a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a> = <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a><span class="keyword">></span>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a>);</div>
|
|
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keyword">auto</span> <a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a> = <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a>;</div>
|
|
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> </div>
|
|
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a>)</div>
|
|
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a> = -<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>;</div>
|
|
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> </div>
|
|
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">return</span> {<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>, <a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>};</div>
|
|
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div>
|
|
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span><a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a></div>
|
|
<div class="foldopen" id="foldopen00295" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069"> 295</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">STAmount::mpt</a>()<span class="keyword"> const</span></div>
|
|
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span><span class="keyword"></span>{</div>
|
|
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">if</span> (!holds<MPTIssue>())</div>
|
|
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> Throw<std::logic_error>(<span class="stringliteral">"Cannot return STAmount as MPTAmount"</span>);</div>
|
|
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> </div>
|
|
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <span class="keyword">auto</span> <a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> = <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">MPTAmount::value_type</a><span class="keyword">></span>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a>);</div>
|
|
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> XRPL_ASSERT(<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> == 0, <span class="stringliteral">"ripple::STAmount::mpt : amount is canonical"</span>);</div>
|
|
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> </div>
|
|
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a>)</div>
|
|
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a> = -<a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a>;</div>
|
|
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> </div>
|
|
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{<a class="code hl_function" href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">value</a>};</div>
|
|
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> </div>
|
|
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span><a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>&</div>
|
|
<div class="foldopen" id="foldopen00310" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#aa5bf0545fabd14cc515c79a439ed70d5"> 310</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a26e41013034a7a5a484c7727fdaadbba">STAmount::operator=</a>(<a class="code hl_class" href="classripple_1_1IOUAmount.html">IOUAmount</a> <span class="keyword">const</span>& iou)</div>
|
|
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span>{</div>
|
|
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> XRPL_ASSERT(</div>
|
|
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() == <span class="keyword">false</span>,</div>
|
|
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="stringliteral">"ripple::STAmount::operator=(IOUAmount) : is not XRP"</span>);</div>
|
|
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> = <a class="code hl_function" href="classripple_1_1STAmount.html#a094bda660d23e258021a2c63112ebc9a">iou</a>.<a class="code hl_function" href="classripple_1_1IOUAmount.html#a4123b52991469e91f146e23382f49d6c">exponent</a>();</div>
|
|
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> = <a class="code hl_function" href="classripple_1_1STAmount.html#a094bda660d23e258021a2c63112ebc9a">iou</a> < beast::zero;</div>
|
|
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a>)</div>
|
|
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a><span class="keyword">></span>(-<a class="code hl_function" href="classripple_1_1STAmount.html#a094bda660d23e258021a2c63112ebc9a">iou</a>.<a class="code hl_function" href="classripple_1_1IOUAmount.html#a7569b6462cf1abb6018ccfbe8428bfab">mantissa</a>());</div>
|
|
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a><span class="keyword">></span>(<a class="code hl_function" href="classripple_1_1STAmount.html#a094bda660d23e258021a2c63112ebc9a">iou</a>.<a class="code hl_function" href="classripple_1_1IOUAmount.html#a7569b6462cf1abb6018ccfbe8428bfab">mantissa</a>());</div>
|
|
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
|
|
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> </div>
|
|
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span><span class="comment">// Operators</span></div>
|
|
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> </div>
|
|
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span><a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>&</div>
|
|
<div class="foldopen" id="foldopen00331" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a5736362e5b3e1b55e9f07ce75643190e"> 331</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a5736362e5b3e1b55e9f07ce75643190e">STAmount::operator+=</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& a)</div>
|
|
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span>{</div>
|
|
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> *<span class="keyword">this</span> = *<span class="keyword">this</span> + a;</div>
|
|
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
|
|
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> </div>
|
|
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span><a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>&</div>
|
|
<div class="foldopen" id="foldopen00338" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a796e10f39a5856f195555461d5949fdd"> 338</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a796e10f39a5856f195555461d5949fdd">STAmount::operator-=</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& a)</div>
|
|
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span>{</div>
|
|
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> *<span class="keyword">this</span> = *<span class="keyword">this</span> - a;</div>
|
|
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keywordflow">return</span> *<span class="keyword">this</span>;</div>
|
|
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> </div>
|
|
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span><a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a></div>
|
|
<div class="foldopen" id="foldopen00345" data-start="{" data-end="};">
|
|
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#af43083bb6200c6ea99ae78b4b6109e1b"> 345</a></span><a class="code hl_function" href="namespaceripple.html#ace0e9e05ea99ff46933e70502b74de95">operator+</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v1, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v2)</div>
|
|
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span>{</div>
|
|
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a30c2e63999ddc369a258a7c2766e968f">areComparable</a>(v1, v2))</div>
|
|
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> Throw<std::runtime_error>(<span class="stringliteral">"Can't add amounts that are't comparable!"</span>);</div>
|
|
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> </div>
|
|
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keywordflow">if</span> (v2 == beast::zero)</div>
|
|
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keywordflow">return</span> v1;</div>
|
|
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> </div>
|
|
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keywordflow">if</span> (v1 == beast::zero)</div>
|
|
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> {</div>
|
|
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="comment">// Result must be in terms of v1 currency and issuer.</span></div>
|
|
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">return</span> {</div>
|
|
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> v1.<a class="code hl_function" href="classripple_1_1STBase.html#a48097bca334d2f32a1d7861b59ae2e30">getFName</a>(),</div>
|
|
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>(),</div>
|
|
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> v2.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>(),</div>
|
|
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>(),</div>
|
|
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> v2.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>()};</div>
|
|
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> }</div>
|
|
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> </div>
|
|
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <span class="keywordflow">if</span> (v1.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>())</div>
|
|
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">return</span> {v1.<a class="code hl_function" href="classripple_1_1STBase.html#a48097bca334d2f32a1d7861b59ae2e30">getFName</a>(), <a class="code hl_function" href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c">getSNValue</a>(v1) + <a class="code hl_function" href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c">getSNValue</a>(v2)};</div>
|
|
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">if</span> (v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keywordflow">return</span> {v1.<a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a>, v1.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>() + v2.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>().<a class="code hl_function" href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">value</a>()};</div>
|
|
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> </div>
|
|
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#afa1f08ba17ac61380c442f9f2fa2e7b4">getSTNumberSwitchover</a>())</div>
|
|
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> {</div>
|
|
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <span class="keyword">auto</span> x = v1;</div>
|
|
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> x = v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a094bda660d23e258021a2c63112ebc9a">iou</a>() + v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a094bda660d23e258021a2c63112ebc9a">iou</a>();</div>
|
|
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <span class="keywordflow">return</span> x;</div>
|
|
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> }</div>
|
|
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> </div>
|
|
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <span class="keywordtype">int</span> ov1 = v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>(), ov2 = v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>();</div>
|
|
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a> vv1 = <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a><span class="keyword">></span>(v1.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>());</div>
|
|
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a> vv2 = <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a><span class="keyword">></span>(v2.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>());</div>
|
|
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> </div>
|
|
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="keywordflow">if</span> (v1.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>())</div>
|
|
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> vv1 = -vv1;</div>
|
|
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> </div>
|
|
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <span class="keywordflow">if</span> (v2.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>())</div>
|
|
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> vv2 = -vv2;</div>
|
|
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> </div>
|
|
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> <span class="keywordflow">while</span> (ov1 < ov2)</div>
|
|
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> {</div>
|
|
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> vv1 /= 10;</div>
|
|
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> ++ov1;</div>
|
|
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> }</div>
|
|
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> </div>
|
|
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <span class="keywordflow">while</span> (ov2 < ov1)</div>
|
|
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> {</div>
|
|
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> vv2 /= 10;</div>
|
|
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> ++ov2;</div>
|
|
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> }</div>
|
|
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> </div>
|
|
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <span class="comment">// This addition cannot overflow an std::int64_t. It can overflow an</span></div>
|
|
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="comment">// STAmount and the constructor will throw.</span></div>
|
|
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> </div>
|
|
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a> fv = vv1 + vv2;</div>
|
|
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> </div>
|
|
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keywordflow">if</span> ((fv >= -10) && (fv <= 10))</div>
|
|
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> <span class="keywordflow">return</span> {v1.<a class="code hl_function" href="classripple_1_1STBase.html#a48097bca334d2f32a1d7861b59ae2e30">getFName</a>(), v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>()};</div>
|
|
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> </div>
|
|
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <span class="keywordflow">if</span> (fv >= 0)</div>
|
|
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{</div>
|
|
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> v1.<a class="code hl_function" href="classripple_1_1STBase.html#a48097bca334d2f32a1d7861b59ae2e30">getFName</a>(),</div>
|
|
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>(),</div>
|
|
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a><span class="keyword">></span>(fv),</div>
|
|
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> ov1,</div>
|
|
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <span class="keyword">false</span>};</div>
|
|
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> </div>
|
|
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{</div>
|
|
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> v1.<a class="code hl_function" href="classripple_1_1STBase.html#a48097bca334d2f32a1d7861b59ae2e30">getFName</a>(), v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>(), <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a><span class="keyword">></span>(-fv), ov1, <span class="keyword">true</span>};</div>
|
|
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> </div>
|
|
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span><a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a></div>
|
|
<div class="foldopen" id="foldopen00419" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"><a class="line" href="namespaceripple.html#a8151ed92af94be4e20f56836d0010f84"> 419</a></span><a class="code hl_function" href="namespaceripple.html#ac73696ba9cf84191fe3d33d6ef9043c7">operator-</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v1, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v2)</div>
|
|
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span>{</div>
|
|
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <span class="keywordflow">return</span> v1 + (-v2);</div>
|
|
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> </div>
|
|
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> </div>
|
|
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <span class="keyword">const</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#afcd276e76921eac7cb0aa914bf434f9a">STAmount::uRateOne</a> = <a class="code hl_function" href="namespaceripple.html#a73cc988e7ba5d5ee0fd9db53740917ec">getRate</a>(STAmount(1), STAmount(1));</div>
|
|
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> </div>
|
|
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span><span class="keywordtype">void</span></div>
|
|
<div class="foldopen" id="foldopen00429" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a6aef86da93fd4fba3359c356a3222921"> 429</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a6aef86da93fd4fba3359c356a3222921">STAmount::setIssue</a>(<a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span>& asset)</div>
|
|
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span>{</div>
|
|
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a> = <a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>;</div>
|
|
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> </div>
|
|
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span><span class="comment">// Convert an offer into an index amount so they sort by rate.</span></div>
|
|
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span><span class="comment">// A taker will take the best, lowest, rate first.</span></div>
|
|
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span><span class="comment">// (e.g. a taker will prefer pay 1 get 3 over pay 1 get 2.</span></div>
|
|
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span><span class="comment">// --> offerOut: takerGets: How much the offerer is selling to the taker.</span></div>
|
|
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span><span class="comment">// --> offerIn: takerPays: How much the offerer is receiving from the taker.</span></div>
|
|
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span><span class="comment">// <-- uRate: normalize(offerIn/offerOut)</span></div>
|
|
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span><span class="comment">// A lower rate is better for the person taking the order.</span></div>
|
|
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span><span class="comment">// The taker gets more for less with a lower rate.</span></div>
|
|
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span><span class="comment">// Zero is returned if the offer is worthless.</span></div>
|
|
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a></div>
|
|
<div class="foldopen" id="foldopen00444" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"><a class="line" href="namespaceripple.html#a73cc988e7ba5d5ee0fd9db53740917ec"> 444</a></span><a class="code hl_function" href="namespaceripple.html#a73cc988e7ba5d5ee0fd9db53740917ec">getRate</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& offerOut, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& offerIn)</div>
|
|
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span>{</div>
|
|
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">if</span> (offerOut == beast::zero)</div>
|
|
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <span class="keywordflow">return</span> 0;</div>
|
|
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">try</span></div>
|
|
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> {</div>
|
|
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> r = <a class="code hl_function" href="namespaceripple.html#a0ad557cc32ca87dcea19af8e30c63c6a">divide</a>(offerIn, offerOut, <a class="code hl_function" href="namespaceripple.html#a9e3dc59bb58c33f14b3c0d3070b94d98">noIssue</a>());</div>
|
|
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> <span class="keywordflow">if</span> (r == beast::zero) <span class="comment">// offer is too good</span></div>
|
|
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> <span class="keywordflow">return</span> 0;</div>
|
|
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> XRPL_ASSERT(</div>
|
|
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> (r.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>() >= -100) && (r.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>() <= 155),</div>
|
|
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <span class="stringliteral">"ripple::getRate : exponent inside range"</span>);</div>
|
|
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> ret = r.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>() + 100;</div>
|
|
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">return</span> (ret << (64 - 8)) | r.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>();</div>
|
|
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> }</div>
|
|
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&)</div>
|
|
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> {</div>
|
|
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> }</div>
|
|
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> </div>
|
|
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> <span class="comment">// overflow -- very bad offer</span></div>
|
|
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">return</span> 0;</div>
|
|
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> </div>
|
|
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span><span class="keywordtype">bool</span></div>
|
|
<div class="foldopen" id="foldopen00486" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"><a class="line" href="namespaceripple.html#a3c48650a4989da7655d4bedcbf6acffe"> 486</a></span><a class="code hl_function" href="namespaceripple.html#a3c48650a4989da7655d4bedcbf6acffe">canAdd</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& a, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& b)</div>
|
|
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span>{</div>
|
|
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> <span class="comment">// cannot add different currencies</span></div>
|
|
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a30c2e63999ddc369a258a7c2766e968f">areComparable</a>(a, b))</div>
|
|
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> </div>
|
|
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> <span class="comment">// special case: adding anything to zero is always fine</span></div>
|
|
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <span class="keywordflow">if</span> (a == beast::zero || b == beast::zero)</div>
|
|
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> </div>
|
|
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> <span class="comment">// XRP case (overflow & underflow check)</span></div>
|
|
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#a20d30277b9c78756b3d14493055a307c">isXRP</a>(a) && <a class="code hl_function" href="namespaceripple.html#a20d30277b9c78756b3d14493055a307c">isXRP</a>(b))</div>
|
|
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> {</div>
|
|
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a> A = a.<a class="code hl_function" href="classripple_1_1STAmount.html#a6c2ca92e9c91e2a34493d61e02d79ebf">xrp</a>();</div>
|
|
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a> B = b.<a class="code hl_function" href="classripple_1_1STAmount.html#a6c2ca92e9c91e2a34493d61e02d79ebf">xrp</a>();</div>
|
|
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> </div>
|
|
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> <span class="keywordflow">if</span> ((B > <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a>{0} &&</div>
|
|
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> A > <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a>{<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits/max.html">std::numeric_limits<XRPAmount::value_type>::max</a>()} -</div>
|
|
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> B) ||</div>
|
|
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> (B < <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a>{0} &&</div>
|
|
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> A < <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a>{<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits/min.html">std::numeric_limits<XRPAmount::value_type>::min</a>()} -</div>
|
|
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> B))</div>
|
|
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> {</div>
|
|
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> }</div>
|
|
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> }</div>
|
|
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> </div>
|
|
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> <span class="comment">// IOU case (precision check)</span></div>
|
|
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">if</span> (a.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>>() && b.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>>())</div>
|
|
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> {</div>
|
|
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> <span class="keyword">static</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>{<a class="code hl_class" href="classripple_1_1IOUAmount.html">IOUAmount</a>{1, 0}, <a class="code hl_function" href="namespaceripple.html#a9e3dc59bb58c33f14b3c0d3070b94d98">noIssue</a>()};</div>
|
|
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keyword">static</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> maxLoss{<a class="code hl_class" href="classripple_1_1IOUAmount.html">IOUAmount</a>{1, -4}, <a class="code hl_function" href="namespaceripple.html#a9e3dc59bb58c33f14b3c0d3070b94d98">noIssue</a>()};</div>
|
|
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> lhs = <a class="code hl_function" href="namespaceripple.html#a0ad557cc32ca87dcea19af8e30c63c6a">divide</a>((a - b) + b, a, <a class="code hl_function" href="namespaceripple.html#a9e3dc59bb58c33f14b3c0d3070b94d98">noIssue</a>()) - <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>;</div>
|
|
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> rhs = <a class="code hl_function" href="namespaceripple.html#a0ad557cc32ca87dcea19af8e30c63c6a">divide</a>((b - a) + a, b, <a class="code hl_function" href="namespaceripple.html#a9e3dc59bb58c33f14b3c0d3070b94d98">noIssue</a>()) - <a class="code hl_variable" href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">one</a>;</div>
|
|
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">return</span> ((rhs.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() ? -rhs : rhs) +</div>
|
|
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> (lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() ? -lhs : lhs)) <= maxLoss;</div>
|
|
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> }</div>
|
|
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> </div>
|
|
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> <span class="comment">// MPT (overflow & underflow check)</span></div>
|
|
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="keywordflow">if</span> (a.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>() && b.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> {</div>
|
|
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a> A = a.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>();</div>
|
|
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a> B = b.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>();</div>
|
|
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">if</span> ((B > <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{0} &&</div>
|
|
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> A > <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits/max.html">std::numeric_limits<MPTAmount::value_type>::max</a>()} -</div>
|
|
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> B) ||</div>
|
|
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> (B < <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{0} &&</div>
|
|
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> A < <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits/min.html">std::numeric_limits<MPTAmount::value_type>::min</a>()} -</div>
|
|
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> B))</div>
|
|
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> {</div>
|
|
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> }</div>
|
|
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span> </div>
|
|
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> }</div>
|
|
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <span class="comment">// LCOV_EXCL_START</span></div>
|
|
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> UNREACHABLE(<span class="stringliteral">"STAmount::canAdd : unexpected STAmount type"</span>);</div>
|
|
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> <span class="comment">// LCOV_EXCL_STOP</span></div>
|
|
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> </div>
|
|
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span><span class="keywordtype">bool</span></div>
|
|
<div class="foldopen" id="foldopen00566" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"><a class="line" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c"> 566</a></span><a class="code hl_function" href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">canSubtract</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& a, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& b)</div>
|
|
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span>{</div>
|
|
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> <span class="comment">// Cannot subtract different currencies</span></div>
|
|
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a30c2e63999ddc369a258a7c2766e968f">areComparable</a>(a, b))</div>
|
|
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> </div>
|
|
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="comment">// Special case: subtracting zero is always fine</span></div>
|
|
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">if</span> (b == beast::zero)</div>
|
|
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> </div>
|
|
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="comment">// XRP case (underflow & overflow check)</span></div>
|
|
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#a20d30277b9c78756b3d14493055a307c">isXRP</a>(a) && <a class="code hl_function" href="namespaceripple.html#a20d30277b9c78756b3d14493055a307c">isXRP</a>(b))</div>
|
|
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> {</div>
|
|
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a> A = a.<a class="code hl_function" href="classripple_1_1STAmount.html#a6c2ca92e9c91e2a34493d61e02d79ebf">xrp</a>();</div>
|
|
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a> B = b.<a class="code hl_function" href="classripple_1_1STAmount.html#a6c2ca92e9c91e2a34493d61e02d79ebf">xrp</a>();</div>
|
|
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="comment">// Check for underflow</span></div>
|
|
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> <span class="keywordflow">if</span> (B > <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a>{0} && A < B)</div>
|
|
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> </div>
|
|
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> <span class="comment">// Check for overflow</span></div>
|
|
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">if</span> (B < <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a>{0} &&</div>
|
|
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> A > <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a>{<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits/max.html">std::numeric_limits<XRPAmount::value_type>::max</a>()} +</div>
|
|
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> B)</div>
|
|
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> </div>
|
|
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> }</div>
|
|
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> </div>
|
|
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <span class="comment">// IOU case (no underflow)</span></div>
|
|
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">if</span> (a.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>>() && b.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>>())</div>
|
|
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> {</div>
|
|
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> }</div>
|
|
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> </div>
|
|
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <span class="comment">// MPT case (underflow & overflow check)</span></div>
|
|
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <span class="keywordflow">if</span> (a.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>() && b.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> {</div>
|
|
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a> A = a.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>();</div>
|
|
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a> B = b.<a class="code hl_function" href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">mpt</a>();</div>
|
|
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> </div>
|
|
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="comment">// Underflow check</span></div>
|
|
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">if</span> (B > <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{0} && A < B)</div>
|
|
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> </div>
|
|
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> <span class="comment">// Overflow check</span></div>
|
|
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> <span class="keywordflow">if</span> (B < <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{0} &&</div>
|
|
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> A > <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits/max.html">std::numeric_limits<MPTAmount::value_type>::max</a>()} +</div>
|
|
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> B)</div>
|
|
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> }</div>
|
|
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <span class="comment">// LCOV_EXCL_START</span></div>
|
|
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> UNREACHABLE(<span class="stringliteral">"STAmount::canSubtract : unexpected STAmount type"</span>);</div>
|
|
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="comment">// LCOV_EXCL_STOP</span></div>
|
|
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> </div>
|
|
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span><span class="keywordtype">void</span></div>
|
|
<div class="foldopen" id="foldopen00624" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a75dd101f324f37e45ae0d1e5decd8f9a"> 624</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a75dd101f324f37e45ae0d1e5decd8f9a">STAmount::setJson</a>(<a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>& elem)<span class="keyword"> const</span></div>
|
|
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span><span class="keyword"></span>{</div>
|
|
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> elem = <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>;</div>
|
|
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> </div>
|
|
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>())</div>
|
|
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> {</div>
|
|
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> <span class="comment">// It is an error for currency or issuer not to be specified for valid</span></div>
|
|
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="comment">// json.</span></div>
|
|
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> elem[jss::value] = <a class="code hl_function" href="classripple_1_1STAmount.html#aa65826cb148b5d15412fceecca5ae47c">getText</a>();</div>
|
|
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a>.<a class="code hl_function" href="classripple_1_1Asset.html#a80f16856b37f4ac1b6c30c5c3f01a10e">setJson</a>(elem);</div>
|
|
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> }</div>
|
|
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> {</div>
|
|
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> elem = <a class="code hl_function" href="classripple_1_1STAmount.html#aa65826cb148b5d15412fceecca5ae47c">getText</a>();</div>
|
|
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> }</div>
|
|
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> </div>
|
|
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span><span class="comment">// STBase</span></div>
|
|
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> </div>
|
|
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span><a class="code hl_enumeration" href="namespaceripple.html#a3e7e3f29aef85bcca06706da54e950fc">SerializedTypeID</a></div>
|
|
<div class="foldopen" id="foldopen00648" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a86b562f0d5185fedf5a71756dc0be19f"> 648</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a86b562f0d5185fedf5a71756dc0be19f">STAmount::getSType</a>()<span class="keyword"> const</span></div>
|
|
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span><span class="keyword"></span>{</div>
|
|
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> <span class="keywordflow">return</span> STI_AMOUNT;</div>
|
|
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> </div>
|
|
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div>
|
|
<div class="foldopen" id="foldopen00654" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#aee39db45aa65eddca7002ad9bf3e7877"> 654</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#aee39db45aa65eddca7002ad9bf3e7877">STAmount::getFullText</a>()<span class="keyword"> const</span></div>
|
|
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span><span class="keyword"></span>{</div>
|
|
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> ret;</div>
|
|
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> </div>
|
|
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/reserve.html">reserve</a>(64);</div>
|
|
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> ret = <a class="code hl_function" href="classripple_1_1STAmount.html#aa65826cb148b5d15412fceecca5ae47c">getText</a>() + <span class="stringliteral">"/"</span> + <a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a>.<a class="code hl_function" href="classripple_1_1Asset.html#af851b082d3b0a834e892819d1ff4dc92">getText</a>();</div>
|
|
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> <span class="keywordflow">return</span> ret;</div>
|
|
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> </div>
|
|
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div>
|
|
<div class="foldopen" id="foldopen00664" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#aa65826cb148b5d15412fceecca5ae47c"> 664</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#aa65826cb148b5d15412fceecca5ae47c">STAmount::getText</a>()<span class="keyword"> const</span></div>
|
|
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span><span class="keyword"></span>{</div>
|
|
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> <span class="comment">// keep full internal accuracy, but make more human friendly if posible</span></div>
|
|
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> <span class="keywordflow">if</span> (*<span class="keyword">this</span> == beast::zero)</div>
|
|
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">return</span> <span class="stringliteral">"0"</span>;</div>
|
|
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> </div>
|
|
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span> raw_value(<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a>));</div>
|
|
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> ret;</div>
|
|
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> </div>
|
|
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a>)</div>
|
|
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(1, <span class="charliteral">'-'</span>);</div>
|
|
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> </div>
|
|
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> scientific(</div>
|
|
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> != 0) && ((<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> < -25) || (<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> > -5)));</div>
|
|
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> </div>
|
|
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() || <a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a>.<a class="code hl_function" href="classripple_1_1Asset.html#af57f2647e425e58da9f4acf919843480">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>() || scientific)</div>
|
|
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> {</div>
|
|
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(raw_value);</div>
|
|
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> </div>
|
|
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> <span class="keywordflow">if</span> (scientific)</div>
|
|
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> {</div>
|
|
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(1, <span class="charliteral">'e'</span>);</div>
|
|
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a>));</div>
|
|
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> }</div>
|
|
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> </div>
|
|
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> <span class="keywordflow">return</span> ret;</div>
|
|
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> }</div>
|
|
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> </div>
|
|
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> XRPL_ASSERT(<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> + 43 > 0, <span class="stringliteral">"ripple::STAmount::getText : minimum offset"</span>);</div>
|
|
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> </div>
|
|
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <span class="keywordtype">size_t</span> <span class="keyword">const</span> pad_prefix = 27;</div>
|
|
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <span class="keywordtype">size_t</span> <span class="keyword">const</span> pad_suffix = 23;</div>
|
|
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> </div>
|
|
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> val;</div>
|
|
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/reserve.html">reserve</a>(raw_value.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">length</a>() + pad_prefix + pad_suffix);</div>
|
|
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(pad_prefix, <span class="charliteral">'0'</span>);</div>
|
|
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(raw_value);</div>
|
|
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(pad_suffix, <span class="charliteral">'0'</span>);</div>
|
|
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> </div>
|
|
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> <span class="keywordtype">size_t</span> <span class="keyword">const</span> offset(<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> + 43);</div>
|
|
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> </div>
|
|
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> <span class="keyword">auto</span> pre_from(val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/begin.html">begin</a>());</div>
|
|
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> <span class="keyword">auto</span> <span class="keyword">const</span> pre_to(val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/begin.html">begin</a>() + offset);</div>
|
|
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> </div>
|
|
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> <span class="keyword">auto</span> <span class="keyword">const</span> post_from(val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/begin.html">begin</a>() + offset);</div>
|
|
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> <span class="keyword">auto</span> post_to(val.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/end.html">end</a>());</div>
|
|
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> </div>
|
|
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> <span class="comment">// Crop leading zeroes. Take advantage of the fact that there's always a</span></div>
|
|
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> <span class="comment">// fixed amount of leading zeroes and skip them.</span></div>
|
|
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> <span class="keywordflow">if</span> (<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/iterator/distance.html">std::distance</a>(pre_from, pre_to) > pad_prefix)</div>
|
|
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> pre_from += pad_prefix;</div>
|
|
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> </div>
|
|
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> XRPL_ASSERT(</div>
|
|
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> post_to >= post_from,</div>
|
|
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> <span class="stringliteral">"ripple::STAmount::getText : first distance check"</span>);</div>
|
|
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> </div>
|
|
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> pre_from = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if</a>(pre_from, pre_to, [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> c != <span class="charliteral">'0'</span>; });</div>
|
|
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> </div>
|
|
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> <span class="comment">// Crop trailing zeroes. Take advantage of the fact that there's always a</span></div>
|
|
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> <span class="comment">// fixed amount of trailing zeroes and skip them.</span></div>
|
|
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> <span class="keywordflow">if</span> (<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/iterator/distance.html">std::distance</a>(post_from, post_to) > pad_suffix)</div>
|
|
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> post_to -= pad_suffix;</div>
|
|
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> </div>
|
|
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> XRPL_ASSERT(</div>
|
|
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> post_to >= post_from,</div>
|
|
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> <span class="stringliteral">"ripple::STAmount::getText : second distance check"</span>);</div>
|
|
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> </div>
|
|
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> post_to = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if</a>(</div>
|
|
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/iterator/make_reverse_iterator.html">std::make_reverse_iterator</a>(post_to),</div>
|
|
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/iterator/make_reverse_iterator.html">std::make_reverse_iterator</a>(post_from),</div>
|
|
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> [](<span class="keywordtype">char</span> c) { <span class="keywordflow">return</span> c != <span class="charliteral">'0'</span>; })</div>
|
|
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> .base();</div>
|
|
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> </div>
|
|
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> <span class="comment">// Assemble the output:</span></div>
|
|
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> <span class="keywordflow">if</span> (pre_from == pre_to)</div>
|
|
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(1, <span class="charliteral">'0'</span>);</div>
|
|
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(pre_from, pre_to);</div>
|
|
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> </div>
|
|
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> <span class="keywordflow">if</span> (post_to != post_from)</div>
|
|
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> {</div>
|
|
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(1, <span class="charliteral">'.'</span>);</div>
|
|
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> ret.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">append</a>(post_from, post_to);</div>
|
|
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> }</div>
|
|
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> </div>
|
|
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> <span class="keywordflow">return</span> ret;</div>
|
|
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> </div>
|
|
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span><a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a></div>
|
|
<div class="foldopen" id="foldopen00753" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a181a52a4cdeca099d04a31ec43123388"> 753</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a181a52a4cdeca099d04a31ec43123388">STAmount::getJson</a>(<a class="code hl_struct" href="structripple_1_1JsonOptions.html">JsonOptions</a>)<span class="keyword"> const</span></div>
|
|
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span><span class="keyword"></span>{</div>
|
|
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> elem;</div>
|
|
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> <a class="code hl_function" href="classripple_1_1STAmount.html#a75dd101f324f37e45ae0d1e5decd8f9a">setJson</a>(elem);</div>
|
|
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> <span class="keywordflow">return</span> elem;</div>
|
|
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> </div>
|
|
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span><span class="keywordtype">void</span></div>
|
|
<div class="foldopen" id="foldopen00761" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a7bf29283f8f8748b8fb5624197a4140f"> 761</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a7bf29283f8f8748b8fb5624197a4140f">STAmount::add</a>(<a class="code hl_class" href="classripple_1_1Serializer.html">Serializer</a>& s)<span class="keyword"> const</span></div>
|
|
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span><span class="keyword"></span>{</div>
|
|
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>())</div>
|
|
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> {</div>
|
|
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> XRPL_ASSERT(<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> == 0, <span class="stringliteral">"ripple::STAmount::add : zero offset"</span>);</div>
|
|
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> </div>
|
|
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a>)</div>
|
|
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> s.<a class="code hl_function" href="classripple_1_1Serializer.html#a58e3966f7e8a8ffd7c9576f401cf8ab0">add64</a>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> | <a class="code hl_variable" href="classripple_1_1STAmount.html#a4d03d1d0fab2d8e6c43a6bb4b2d52160">cPositive</a>);</div>
|
|
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> s.<a class="code hl_function" href="classripple_1_1Serializer.html#a58e3966f7e8a8ffd7c9576f401cf8ab0">add64</a>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a>);</div>
|
|
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> }</div>
|
|
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a>.<a class="code hl_function" href="classripple_1_1Asset.html#af57f2647e425e58da9f4acf919843480">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> {</div>
|
|
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> <span class="keyword">auto</span> u8 = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">></span>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a83d035107b7e2038db4f4fea771f0fc4">cMPToken</a> >> 56);</div>
|
|
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a>)</div>
|
|
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> u8 |= <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span><span class="keyword">></span>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a4d03d1d0fab2d8e6c43a6bb4b2d52160">cPositive</a> >> 56);</div>
|
|
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> s.<a class="code hl_function" href="classripple_1_1Serializer.html#ab6de064efbc9b2efaeff2b069a02b644">add8</a>(u8);</div>
|
|
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> s.<a class="code hl_function" href="classripple_1_1Serializer.html#a58e3966f7e8a8ffd7c9576f401cf8ab0">add64</a>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a>);</div>
|
|
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> s.<a class="code hl_function" href="classripple_1_1Serializer.html#a96daec54ca0c8ec7f6e7e683e9abbe0e">addBitString</a>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a>.<a class="code hl_function" href="classripple_1_1Asset.html#ad01a6377ea4c6c8d14804d0954a49e6f">get</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>().<a class="code hl_function" href="classripple_1_1MPTIssue.html#ad6cbfdbce5a5d92e1536fc9835b54757">getMptID</a>());</div>
|
|
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> }</div>
|
|
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> {</div>
|
|
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">if</span> (*<span class="keyword">this</span> == beast::zero)</div>
|
|
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> s.<a class="code hl_function" href="classripple_1_1Serializer.html#a58e3966f7e8a8ffd7c9576f401cf8ab0">add64</a>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a7f9cd54ff0ad45b8fe5a17d4b48378d4">cIssuedCurrency</a>);</div>
|
|
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a>) <span class="comment">// 512 = not native</span></div>
|
|
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> s.<a class="code hl_function" href="classripple_1_1Serializer.html#a58e3966f7e8a8ffd7c9576f401cf8ab0">add64</a>(</div>
|
|
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> |</div>
|
|
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> (<span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a><span class="keyword">></span>(<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> + 512 + 97) << (64 - 10)));</div>
|
|
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <span class="keywordflow">else</span> <span class="comment">// 256 = positive</span></div>
|
|
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> s.<a class="code hl_function" href="classripple_1_1Serializer.html#a58e3966f7e8a8ffd7c9576f401cf8ab0">add64</a>(</div>
|
|
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> |</div>
|
|
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> (<span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a><span class="keyword">></span>(<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> + 512 + 256 + 97)</div>
|
|
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> << (64 - 10)));</div>
|
|
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> s.<a class="code hl_function" href="classripple_1_1Serializer.html#a96daec54ca0c8ec7f6e7e683e9abbe0e">addBitString</a>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a>.<a class="code hl_function" href="classripple_1_1Asset.html#ad01a6377ea4c6c8d14804d0954a49e6f">get</a><<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>>().<a class="code hl_variable" href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">currency</a>);</div>
|
|
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> s.<a class="code hl_function" href="classripple_1_1Serializer.html#a96daec54ca0c8ec7f6e7e683e9abbe0e">addBitString</a>(<a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a>.<a class="code hl_function" href="classripple_1_1Asset.html#ad01a6377ea4c6c8d14804d0954a49e6f">get</a><<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>>().<a class="code hl_variable" href="classripple_1_1Issue.html#a46e4805870b1bad6a8691bed0b8acec8">account</a>);</div>
|
|
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> }</div>
|
|
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> </div>
|
|
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span><span class="keywordtype">bool</span></div>
|
|
<div class="foldopen" id="foldopen00800" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#aac6d573d4015571671dd2c38c8620022"> 800</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#aac6d573d4015571671dd2c38c8620022">STAmount::isEquivalent</a>(<a class="code hl_class" href="classripple_1_1STBase.html">STBase</a> <span class="keyword">const</span>& t)<span class="keyword"> const</span></div>
|
|
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span><span class="keyword"></span>{</div>
|
|
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>* v = <span class="keyword">dynamic_cast<</span><a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> const*<span class="keyword">></span>(&t);</div>
|
|
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="keywordflow">return</span> v && (*v == *<span class="keyword">this</span>);</div>
|
|
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> </div>
|
|
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span><span class="keywordtype">bool</span></div>
|
|
<div class="foldopen" id="foldopen00807" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a78eb39e1724fd6263bd688f055ce8028"> 807</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a78eb39e1724fd6263bd688f055ce8028">STAmount::isDefault</a>()<span class="keyword"> const</span></div>
|
|
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span><span class="keyword"></span>{</div>
|
|
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">return</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> == 0) && <a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>();</div>
|
|
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> </div>
|
|
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> </div>
|
|
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span><span class="comment">// amount = mValue * [10 ^ mOffset]</span></div>
|
|
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span><span class="comment">// Representation range is 10^80 - 10^(-80).</span></div>
|
|
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span><span class="comment">// On the wire:</span></div>
|
|
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span><span class="comment">// - high bit is 0 for XRP, 1 for issued currency</span></div>
|
|
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span><span class="comment">// - next bit is 1 for positive, 0 for negative (except 0 issued currency, which</span></div>
|
|
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span><span class="comment">// is a special case of 0x8000000000000000</span></div>
|
|
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span><span class="comment">// - for issued currencies, the next 8 bits are (mOffset+97).</span></div>
|
|
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span><span class="comment">// The +97 is so that this value is always positive.</span></div>
|
|
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span><span class="comment">// - The remaining bits are significant digits (mantissa)</span></div>
|
|
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span><span class="comment">// That's 54 bits for issued currency and 62 bits for native</span></div>
|
|
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span><span class="comment">// (but XRP only needs 57 bits for the max value of 10^17 drops)</span></div>
|
|
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span><span class="comment">// mValue is zero if the amount is zero, otherwise it's within the range</span></div>
|
|
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span><span class="comment">// 10^15 to (10^16 - 1) inclusive.</span></div>
|
|
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span><span class="comment">// mOffset is in the range -96 to +80.</span></div>
|
|
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span><span class="keywordtype">void</span></div>
|
|
<div class="foldopen" id="foldopen00831" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#a104f16b3dcb68a0b317788706c347809"> 831</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#a104f16b3dcb68a0b317788706c347809">STAmount::canonicalize</a>()</div>
|
|
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span>{</div>
|
|
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() || <a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a>.<a class="code hl_function" href="classripple_1_1Asset.html#af57f2647e425e58da9f4acf919843480">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> {</div>
|
|
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> <span class="comment">// native and MPT currency amounts should always have an offset of zero</span></div>
|
|
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> <span class="comment">// log(2^64,10) ~ 19.2</span></div>
|
|
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> == 0 || <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> <= -20)</div>
|
|
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> {</div>
|
|
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = 0;</div>
|
|
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> = 0;</div>
|
|
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> = <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> }</div>
|
|
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> </div>
|
|
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> <span class="comment">// log(cMaxNativeN, 10) == 17</span></div>
|
|
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() && <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> > 17)</div>
|
|
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> Throw<std::runtime_error>(<span class="stringliteral">"Native currency amount out of range"</span>);</div>
|
|
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> <span class="comment">// log(maxMPTokenAmount, 10) ~ 18.96</span></div>
|
|
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">mAsset</a>.<a class="code hl_function" href="classripple_1_1Asset.html#af57f2647e425e58da9f4acf919843480">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>() && <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> > 18)</div>
|
|
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> Throw<std::runtime_error>(<span class="stringliteral">"MPT amount out of range"</span>);</div>
|
|
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> </div>
|
|
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#afa1f08ba17ac61380c442f9f2fa2e7b4">getSTNumberSwitchover</a>())</div>
|
|
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> {</div>
|
|
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> num(</div>
|
|
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> ? -<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> : <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a>, <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a>, <a class="code hl_struct" href="structripple_1_1Number_1_1unchecked.html">Number::unchecked</a>{});</div>
|
|
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> <span class="keyword">auto</span> <a class="code hl_function" href="classripple_1_1STAmount.html#ae252d978fddac8a365f6fc67556843f2">set</a> = [&](<span class="keyword">auto</span> <span class="keyword">const</span>& val) {</div>
|
|
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> = val.value() < 0;</div>
|
|
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> ? -val.value() : val.value();</div>
|
|
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> };</div>
|
|
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>())</div>
|
|
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> <a class="code hl_function" href="namespaceripple.html#a53f80df10254751781250aa20704e98f">set</a>(<a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a>{num});</div>
|
|
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> <a class="code hl_function" href="namespaceripple.html#a53f80df10254751781250aa20704e98f">set</a>(<a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{num});</div>
|
|
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> = 0;</div>
|
|
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> }</div>
|
|
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> {</div>
|
|
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> <span class="keywordflow">while</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> < 0)</div>
|
|
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> {</div>
|
|
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> /= 10;</div>
|
|
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> ++<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a>;</div>
|
|
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> }</div>
|
|
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> </div>
|
|
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> <span class="keywordflow">while</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> > 0)</div>
|
|
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> {</div>
|
|
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <span class="comment">// N.B. do not move the overflow check to after the</span></div>
|
|
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> <span class="comment">// multiplication</span></div>
|
|
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() && <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> > <a class="code hl_variable" href="classripple_1_1STAmount.html#a251693eb2dea7c8f517428e9baf5afb1">cMaxNativeN</a>)</div>
|
|
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> Throw<std::runtime_error>(</div>
|
|
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> <span class="stringliteral">"Native currency amount out of range"</span>);</div>
|
|
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() && <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> > <a class="code hl_variable" href="namespaceripple.html#a47fbaf29602fea01a79eb987cc21371c">maxMPTokenAmount</a>)</div>
|
|
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> Throw<std::runtime_error>(<span class="stringliteral">"MPT amount out of range"</span>);</div>
|
|
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> </div>
|
|
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> *= 10;</div>
|
|
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> --<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a>;</div>
|
|
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> }</div>
|
|
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> }</div>
|
|
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> </div>
|
|
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() && <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> > <a class="code hl_variable" href="classripple_1_1STAmount.html#a251693eb2dea7c8f517428e9baf5afb1">cMaxNativeN</a>)</div>
|
|
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> Throw<std::runtime_error>(<span class="stringliteral">"Native currency amount out of range"</span>);</div>
|
|
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() && <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> > <a class="code hl_variable" href="namespaceripple.html#a47fbaf29602fea01a79eb987cc21371c">maxMPTokenAmount</a>)</div>
|
|
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> Throw<std::runtime_error>(<span class="stringliteral">"MPT amount out of range"</span>);</div>
|
|
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> </div>
|
|
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> }</div>
|
|
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> </div>
|
|
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#afa1f08ba17ac61380c442f9f2fa2e7b4">getSTNumberSwitchover</a>())</div>
|
|
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> {</div>
|
|
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> *<span class="keyword">this</span> = <a class="code hl_function" href="classripple_1_1STAmount.html#a094bda660d23e258021a2c63112ebc9a">iou</a>();</div>
|
|
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> }</div>
|
|
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> </div>
|
|
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> == 0)</div>
|
|
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> {</div>
|
|
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> = -100;</div>
|
|
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> = <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> }</div>
|
|
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> </div>
|
|
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> <span class="keywordflow">while</span> ((<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> < <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">cMinValue</a>) && (<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> > <a class="code hl_variable" href="classripple_1_1STAmount.html#a539c35e311bcd82305e49e1f2948e880">cMinOffset</a>))</div>
|
|
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> {</div>
|
|
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> *= 10;</div>
|
|
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> --<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a>;</div>
|
|
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> }</div>
|
|
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> </div>
|
|
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> <span class="keywordflow">while</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> > <a class="code hl_variable" href="classripple_1_1STAmount.html#aa0f01e6eacfb24a14b792ab8bd288de3">cMaxValue</a>)</div>
|
|
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> {</div>
|
|
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> >= <a class="code hl_variable" href="classripple_1_1STAmount.html#a5392e4fd5eef1038f40b1d260b7ad1ae">cMaxOffset</a>)</div>
|
|
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> Throw<std::runtime_error>(<span class="stringliteral">"value overflow"</span>);</div>
|
|
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> </div>
|
|
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> /= 10;</div>
|
|
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> ++<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a>;</div>
|
|
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> }</div>
|
|
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> </div>
|
|
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> <span class="keywordflow">if</span> ((<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> < <a class="code hl_variable" href="classripple_1_1STAmount.html#a539c35e311bcd82305e49e1f2948e880">cMinOffset</a>) || (<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> < <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">cMinValue</a>))</div>
|
|
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span> {</div>
|
|
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = 0;</div>
|
|
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> = <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> = -100;</div>
|
|
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> <span class="keywordflow">return</span>;</div>
|
|
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> }</div>
|
|
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span> </div>
|
|
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> > <a class="code hl_variable" href="classripple_1_1STAmount.html#a5392e4fd5eef1038f40b1d260b7ad1ae">cMaxOffset</a>)</div>
|
|
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> Throw<std::runtime_error>(<span class="stringliteral">"value overflow"</span>);</div>
|
|
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> </div>
|
|
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span> XRPL_ASSERT(</div>
|
|
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> == 0) || ((<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> >= <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">cMinValue</a>) && (<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> <= <a class="code hl_variable" href="classripple_1_1STAmount.html#aa0f01e6eacfb24a14b792ab8bd288de3">cMaxValue</a>)),</div>
|
|
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> <span class="stringliteral">"ripple::STAmount::canonicalize : value inside range"</span>);</div>
|
|
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> XRPL_ASSERT(</div>
|
|
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> == 0) || ((<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> >= <a class="code hl_variable" href="classripple_1_1STAmount.html#a539c35e311bcd82305e49e1f2948e880">cMinOffset</a>) && (<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> <= <a class="code hl_variable" href="classripple_1_1STAmount.html#a5392e4fd5eef1038f40b1d260b7ad1ae">cMaxOffset</a>)),</div>
|
|
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> <span class="stringliteral">"ripple::STAmount::canonicalize : offset inside range"</span>);</div>
|
|
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> XRPL_ASSERT(</div>
|
|
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span> (<a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> != 0) || (<a class="code hl_variable" href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">mOffset</a> != -100),</div>
|
|
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> <span class="stringliteral">"ripple::STAmount::canonicalize : value or offset set"</span>);</div>
|
|
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span> </div>
|
|
<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span><span class="keywordtype">void</span></div>
|
|
<div class="foldopen" id="foldopen00948" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"><a class="line" href="classripple_1_1STAmount.html#ae252d978fddac8a365f6fc67556843f2"> 948</a></span><a class="code hl_function" href="classripple_1_1STAmount.html#ae252d978fddac8a365f6fc67556843f2">STAmount::set</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a> v)</div>
|
|
<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span>{</div>
|
|
<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> <span class="keywordflow">if</span> (v < 0)</div>
|
|
<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> {</div>
|
|
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a><span class="keyword">></span>(-v);</div>
|
|
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> }</div>
|
|
<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> {</div>
|
|
<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">mIsNegative</a> = <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> <a class="code hl_variable" href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">mValue</a> = <span class="keyword">static_cast<</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a><span class="keyword">></span>(v);</div>
|
|
<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span> }</div>
|
|
<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span> </div>
|
|
<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"> 962</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span> </div>
|
|
<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span><a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a></div>
|
|
<div class="foldopen" id="foldopen00965" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"><a class="line" href="namespaceripple.html#a4afbbae0910419307600d5545004e5be"> 965</a></span><a class="code hl_function" href="namespaceripple.html#a4afbbae0910419307600d5545004e5be">amountFromQuality</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> rate)</div>
|
|
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span>{</div>
|
|
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> <span class="keywordflow">if</span> (rate == 0)</div>
|
|
<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(<a class="code hl_function" href="namespaceripple.html#a9e3dc59bb58c33f14b3c0d3070b94d98">noIssue</a>());</div>
|
|
<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> </div>
|
|
<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> mantissa = rate & ~(255ull << (64 - 8));</div>
|
|
<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> <span class="keywordtype">int</span> exponent = <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(rate >> (64 - 8)) - 100;</div>
|
|
<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> </div>
|
|
<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(<a class="code hl_function" href="namespaceripple.html#a9e3dc59bb58c33f14b3c0d3070b94d98">noIssue</a>(), mantissa, exponent);</div>
|
|
<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span> </div>
|
|
<div class="line"><a id="l00976" name="l00976"></a><span class="lineno"> 976</span>STAmount</div>
|
|
<div class="foldopen" id="foldopen00977" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00977" name="l00977"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac82a0d6ad7894711d8f33c7c3392d277"> 977</a></span><a class="code hl_function" href="namespaceripple.html#ac82a0d6ad7894711d8f33c7c3392d277">amountFromString</a>(<a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span>& asset, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span>& amount)</div>
|
|
<div class="line"><a id="l00978" name="l00978"></a><span class="lineno"> 978</span>{</div>
|
|
<div class="line"><a id="l00979" name="l00979"></a><span class="lineno"> 979</span> <span class="keyword">auto</span> <span class="keyword">const</span> parts = <a class="code hl_function" href="namespaceripple.html#a0e5b39a497ac693654e5a85c1209216e">partsFromString</a>(amount);</div>
|
|
<div class="line"><a id="l00980" name="l00980"></a><span class="lineno"> 980</span> <span class="keywordflow">if</span> ((asset.<a class="code hl_function" href="classripple_1_1Asset.html#a09d7cb36a7e8da2f4471cd947a07672c">native</a>() || asset.<a class="code hl_function" href="classripple_1_1Asset.html#af57f2647e425e58da9f4acf919843480">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>()) && parts.exponent < 0)</div>
|
|
<div class="line"><a id="l00981" name="l00981"></a><span class="lineno"> 981</span> Throw<std::runtime_error>(</div>
|
|
<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span> <span class="stringliteral">"XRP and MPT must be specified as integral amount."</span>);</div>
|
|
<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"> 983</span> <span class="keywordflow">return</span> {asset, parts.mantissa, parts.exponent, parts.negative};</div>
|
|
<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> </div>
|
|
<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span>STAmount</div>
|
|
<div class="foldopen" id="foldopen00987" data-start="{" data-end="}">
|
|
<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"><a class="line" href="namespaceripple.html#a3c25b36b542a985c4f2d344df683a2dd"> 987</a></span><a class="code hl_function" href="namespaceripple.html#a3c25b36b542a985c4f2d344df683a2dd">amountFromJson</a>(<a class="code hl_class" href="classripple_1_1SField.html">SField</a> <span class="keyword">const</span>& name, <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> <span class="keyword">const</span>& v)</div>
|
|
<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span>{</div>
|
|
<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> asset;</div>
|
|
<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> </div>
|
|
<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> value;</div>
|
|
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> currencyOrMPTID;</div>
|
|
<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> issuer;</div>
|
|
<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span> <span class="keywordtype">bool</span> isMPT = <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> </div>
|
|
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> <span class="keywordflow">if</span> (v.<a class="code hl_function" href="classJson_1_1Value.html#abde4070e21e46dc4f8203f66582cb19f">isNull</a>())</div>
|
|
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span> {</div>
|
|
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> Throw<std::runtime_error>(</div>
|
|
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> <span class="stringliteral">"XRP may not be specified with a null Json value"</span>);</div>
|
|
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> }</div>
|
|
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v.<a class="code hl_function" href="classJson_1_1Value.html#a8cf96c0f2a552051fcfc78ffee60e037">isObject</a>())</div>
|
|
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span> {</div>
|
|
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a841eec1048fec16c05561ef0fb40e1b3">validJSONAsset</a>(v))</div>
|
|
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span> Throw<std::runtime_error>(<span class="stringliteral">"Invalid Asset's Json specification"</span>);</div>
|
|
<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> </div>
|
|
<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span> value = v[jss::value];</div>
|
|
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span> <span class="keywordflow">if</span> (v.<a class="code hl_function" href="classJson_1_1Value.html#abfa90c81f6aee7877bd5fb4c8445994f">isMember</a>(jss::mpt_issuance_id))</div>
|
|
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span> {</div>
|
|
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> isMPT = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> currencyOrMPTID = v[jss::mpt_issuance_id];</div>
|
|
<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span> }</div>
|
|
<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> {</div>
|
|
<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span> currencyOrMPTID = v[jss::currency];</div>
|
|
<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span> issuer = v[jss::issuer];</div>
|
|
<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span> }</div>
|
|
<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> }</div>
|
|
<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v.<a class="code hl_function" href="classJson_1_1Value.html#a1627eb9d6568d6d0252fa8bb711c0a59">isArray</a>())</div>
|
|
<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> {</div>
|
|
<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> value = v.<a class="code hl_function" href="classJson_1_1Value.html#acd7f7ba84f8aba84bce7b742c87ea8d6">get</a>(<a class="code hl_typedef" href="namespaceJson.html#ab1488c31a37eea2d37f36a0961372572">Json::UInt</a>(0), 0);</div>
|
|
<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> currencyOrMPTID = v.<a class="code hl_function" href="classJson_1_1Value.html#acd7f7ba84f8aba84bce7b742c87ea8d6">get</a>(<a class="code hl_typedef" href="namespaceJson.html#ab1488c31a37eea2d37f36a0961372572">Json::UInt</a>(1), <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4ea7d9899633b4409bd3fc107e6737f8391">Json::nullValue</a>);</div>
|
|
<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> issuer = v.<a class="code hl_function" href="classJson_1_1Value.html#acd7f7ba84f8aba84bce7b742c87ea8d6">get</a>(<a class="code hl_typedef" href="namespaceJson.html#ab1488c31a37eea2d37f36a0961372572">Json::UInt</a>(2), <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4ea7d9899633b4409bd3fc107e6737f8391">Json::nullValue</a>);</div>
|
|
<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> }</div>
|
|
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (v.<a class="code hl_function" href="classJson_1_1Value.html#a71e1f82cf1c3eaf969d400dcffb163a6">isString</a>())</div>
|
|
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> {</div>
|
|
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> val = v.<a class="code hl_function" href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">asString</a>();</div>
|
|
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector<std::string></a> elements;</div>
|
|
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> boost::split(elements, val, boost::is_any_of(<span class="stringliteral">"\t\n\r ,/"</span>));</div>
|
|
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> </div>
|
|
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span> <span class="keywordflow">if</span> (elements.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>() > 3)</div>
|
|
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> Throw<std::runtime_error>(<span class="stringliteral">"invalid amount string"</span>);</div>
|
|
<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span> </div>
|
|
<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span> value = elements[0];</div>
|
|
<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span> </div>
|
|
<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span> <span class="keywordflow">if</span> (elements.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>() > 1)</div>
|
|
<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span> currencyOrMPTID = elements[1];</div>
|
|
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> </div>
|
|
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span> <span class="keywordflow">if</span> (elements.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/size.html">size</a>() > 2)</div>
|
|
<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span> issuer = elements[2];</div>
|
|
<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> }</div>
|
|
<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span> {</div>
|
|
<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"> 1043</span> value = v;</div>
|
|
<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span> }</div>
|
|
<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span> </div>
|
|
<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> native = !currencyOrMPTID.<a class="code hl_function" href="classJson_1_1Value.html#a71e1f82cf1c3eaf969d400dcffb163a6">isString</a>() ||</div>
|
|
<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span> currencyOrMPTID.<a class="code hl_function" href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">asString</a>().<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/empty.html">empty</a>() ||</div>
|
|
<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span> (currencyOrMPTID.<a class="code hl_function" href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">asString</a>() == <a class="code hl_function" href="namespaceripple.html#a4ba7590b028e34be0d0a8f0777ec3253">systemCurrencyCode</a>());</div>
|
|
<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span> </div>
|
|
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span> <span class="keywordflow">if</span> (native)</div>
|
|
<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span> {</div>
|
|
<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span> <span class="keywordflow">if</span> (v.<a class="code hl_function" href="classJson_1_1Value.html#a478d6ca4b353199e3b9f91b9cfebc7ba">isObjectOrNull</a>())</div>
|
|
<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span> Throw<std::runtime_error>(<span class="stringliteral">"XRP may not be specified as an object"</span>);</div>
|
|
<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span> asset = <a class="code hl_function" href="namespaceripple.html#a02be1da6bd3d611ea7a48b208b060b6c">xrpIssue</a>();</div>
|
|
<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> }</div>
|
|
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> {</div>
|
|
<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> <span class="keywordflow">if</span> (isMPT)</div>
|
|
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> {</div>
|
|
<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span> <span class="comment">// sequence (32 bits) + account (160 bits)</span></div>
|
|
<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> <a class="code hl_class" href="classripple_1_1base__uint.html">uint192</a> u;</div>
|
|
<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span> <span class="keywordflow">if</span> (!u.<a class="code hl_function" href="classripple_1_1base__uint.html#a698d3fd0c0f0155995c87d2f48ac90d5">parseHex</a>(currencyOrMPTID.<a class="code hl_function" href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">asString</a>()))</div>
|
|
<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span> Throw<std::runtime_error>(<span class="stringliteral">"invalid MPTokenIssuanceID"</span>);</div>
|
|
<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> asset = u;</div>
|
|
<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span> }</div>
|
|
<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span> {</div>
|
|
<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span> <a class="code hl_class" href="classripple_1_1Issue.html">Issue</a> issue;</div>
|
|
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#afca83ec321d40b83929b54d5faf9433b">to_currency</a>(issue.<a class="code hl_variable" href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">currency</a>, currencyOrMPTID.<a class="code hl_function" href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">asString</a>()))</div>
|
|
<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span> Throw<std::runtime_error>(<span class="stringliteral">"invalid currency"</span>);</div>
|
|
<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span> <span class="keywordflow">if</span> (!issuer.<a class="code hl_function" href="classJson_1_1Value.html#a71e1f82cf1c3eaf969d400dcffb163a6">isString</a>() ||</div>
|
|
<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span> !<a class="code hl_function" href="namespaceripple.html#a300af819bde0c7c49207d10cd787e62e">to_issuer</a>(issue.<a class="code hl_variable" href="classripple_1_1Issue.html#a46e4805870b1bad6a8691bed0b8acec8">account</a>, issuer.<a class="code hl_function" href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">asString</a>()))</div>
|
|
<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span> Throw<std::runtime_error>(<span class="stringliteral">"invalid issuer"</span>);</div>
|
|
<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"> 1074</span> <span class="keywordflow">if</span> (issue.<a class="code hl_function" href="classripple_1_1Issue.html#a8615e07409164d6d0a8084879ad7bc8c">native</a>())</div>
|
|
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> Throw<std::runtime_error>(<span class="stringliteral">"invalid issuer"</span>);</div>
|
|
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> asset = issue;</div>
|
|
<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span> }</div>
|
|
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> }</div>
|
|
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> </div>
|
|
<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> <a class="code hl_struct" href="structripple_1_1NumberParts.html">NumberParts</a> parts;</div>
|
|
<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> </div>
|
|
<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span> <span class="keywordflow">if</span> (value.<a class="code hl_function" href="classJson_1_1Value.html#aff51d8b52979ca06cf9d909accd5f695">isInt</a>())</div>
|
|
<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> {</div>
|
|
<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span> <span class="keywordflow">if</span> (value.<a class="code hl_function" href="classJson_1_1Value.html#a614d635bc248a592593feb322cd15ab8">asInt</a>() >= 0)</div>
|
|
<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span> {</div>
|
|
<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> parts.<a class="code hl_variable" href="structripple_1_1NumberParts.html#a5ebc7ad5e7d42a01866590209853c307">mantissa</a> = value.<a class="code hl_function" href="classJson_1_1Value.html#a614d635bc248a592593feb322cd15ab8">asInt</a>();</div>
|
|
<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span> }</div>
|
|
<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span> {</div>
|
|
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span> parts.<a class="code hl_variable" href="structripple_1_1NumberParts.html#a5ebc7ad5e7d42a01866590209853c307">mantissa</a> = value.<a class="code hl_function" href="classJson_1_1Value.html#a70920835cd4c4758f565670b4ed8c1d6">asAbsUInt</a>();</div>
|
|
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span> parts.<a class="code hl_variable" href="structripple_1_1NumberParts.html#a61ca32728dc41c4d813fc637703423bc">negative</a> = <span class="keyword">true</span>;</div>
|
|
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span> }</div>
|
|
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span> }</div>
|
|
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (value.<a class="code hl_function" href="classJson_1_1Value.html#abdda463d3269015f883587349726cfbc">isUInt</a>())</div>
|
|
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span> {</div>
|
|
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span> parts.<a class="code hl_variable" href="structripple_1_1NumberParts.html#a5ebc7ad5e7d42a01866590209853c307">mantissa</a> = v.<a class="code hl_function" href="classJson_1_1Value.html#a74b305583ec3aacf4f9dd06e799dc265">asUInt</a>();</div>
|
|
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span> }</div>
|
|
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (value.<a class="code hl_function" href="classJson_1_1Value.html#a71e1f82cf1c3eaf969d400dcffb163a6">isString</a>())</div>
|
|
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> {</div>
|
|
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> parts = <a class="code hl_function" href="namespaceripple.html#a0e5b39a497ac693654e5a85c1209216e">partsFromString</a>(value.<a class="code hl_function" href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">asString</a>());</div>
|
|
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> <span class="comment">// Can't specify XRP or MPT using fractional representation</span></div>
|
|
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> <span class="keywordflow">if</span> ((asset.<a class="code hl_function" href="classripple_1_1Asset.html#a09d7cb36a7e8da2f4471cd947a07672c">native</a>() || asset.<a class="code hl_function" href="classripple_1_1Asset.html#af57f2647e425e58da9f4acf919843480">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>()) && parts.<a class="code hl_variable" href="structripple_1_1NumberParts.html#a06bfc986bb3699e7658f9449fd4afd6d">exponent</a> < 0)</div>
|
|
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> Throw<std::runtime_error>(</div>
|
|
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> <span class="stringliteral">"XRP and MPT must be specified as integral amount."</span>);</div>
|
|
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> }</div>
|
|
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> {</div>
|
|
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> Throw<std::runtime_error>(<span class="stringliteral">"invalid amount type"</span>);</div>
|
|
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span> }</div>
|
|
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> </div>
|
|
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span> <span class="keywordflow">return</span> {name, asset, parts.<a class="code hl_variable" href="structripple_1_1NumberParts.html#a5ebc7ad5e7d42a01866590209853c307">mantissa</a>, parts.<a class="code hl_variable" href="structripple_1_1NumberParts.html#a06bfc986bb3699e7658f9449fd4afd6d">exponent</a>, parts.<a class="code hl_variable" href="structripple_1_1NumberParts.html#a61ca32728dc41c4d813fc637703423bc">negative</a>};</div>
|
|
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span> </div>
|
|
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span><span class="keywordtype">bool</span></div>
|
|
<div class="foldopen" id="foldopen01115" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"><a class="line" href="namespaceripple.html#aa9cb2090c47c4d84b469ae634cdfdc59"> 1115</a></span><a class="code hl_function" href="namespaceripple.html#aa9cb2090c47c4d84b469ae634cdfdc59">amountFromJsonNoThrow</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>& result, <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> <span class="keyword">const</span>& jvSource)</div>
|
|
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span>{</div>
|
|
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> <span class="keywordflow">try</span></div>
|
|
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span> {</div>
|
|
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> result = <a class="code hl_function" href="namespaceripple.html#a3c25b36b542a985c4f2d344df683a2dd">amountFromJson</a>(<a class="code hl_variable" href="namespaceripple.html#ac9c72789f495577fbc38a95e993fd2df">sfGeneric</a>, jvSource);</div>
|
|
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
|
|
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span> }</div>
|
|
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>& e)</div>
|
|
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> {</div>
|
|
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span> JLOG(<a class="code hl_function" href="namespaceripple.html#a94e13759bd026c8ac305482e17f05adb">debugLog</a>().warn())</div>
|
|
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span> << <span class="stringliteral">"amountFromJsonNoThrow: caught: "</span> << e.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>();</div>
|
|
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span> }</div>
|
|
<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span> </div>
|
|
<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span><span class="comment">// Operators</span></div>
|
|
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span> </div>
|
|
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span><span class="keywordtype">bool</span></div>
|
|
<div class="foldopen" id="foldopen01137" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"><a class="line" href="namespaceripple.html#a3eead9c1ec4443af904bc39385d2e965"> 1137</a></span><a class="code hl_function" href="namespaceripple.html#adb9995d7c8e8a2aa3d702b73edfa0672">operator==</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& lhs, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& rhs)</div>
|
|
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span>{</div>
|
|
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a30c2e63999ddc369a258a7c2766e968f">areComparable</a>(lhs, rhs) && lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() == rhs.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() &&</div>
|
|
<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span> lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>() == rhs.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>() && lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>() == rhs.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>();</div>
|
|
<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"> 1141</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span> </div>
|
|
<div class="foldopen" id="foldopen01143" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"><a class="line" href="namespaceripple.html#ae1d2e8e3b7a2047ab1097dbdd259a88f"> 1143</a></span><span class="keywordtype">bool</span></div>
|
|
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span><a class="code hl_function" href="namespaceripple.html#ab06a7c4d14d99773c29bcfbd0bf81d34">operator<</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& lhs, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& rhs)</div>
|
|
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span>{</div>
|
|
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="namespaceripple.html#a30c2e63999ddc369a258a7c2766e968f">areComparable</a>(lhs, rhs))</div>
|
|
<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span> Throw<std::runtime_error>(</div>
|
|
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span> <span class="stringliteral">"Can't compare amounts that are't comparable!"</span>);</div>
|
|
<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span> </div>
|
|
<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span> <span class="keywordflow">if</span> (lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() != rhs.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>())</div>
|
|
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> <span class="keywordflow">return</span> lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>();</div>
|
|
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> </div>
|
|
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span> <span class="keywordflow">if</span> (lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>() == 0)</div>
|
|
<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span> {</div>
|
|
<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span> <span class="keywordflow">if</span> (rhs.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>())</div>
|
|
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span> <span class="keywordflow">return</span> rhs.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>() != 0;</div>
|
|
<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span> }</div>
|
|
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> </div>
|
|
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> <span class="comment">// We know that lhs is non-zero and both sides have the same sign. Since</span></div>
|
|
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> <span class="comment">// rhs is zero (and thus not negative), lhs must, therefore, be strictly</span></div>
|
|
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> <span class="comment">// greater than zero. So if rhs is zero, the comparison must be false.</span></div>
|
|
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> <span class="keywordflow">if</span> (rhs.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>() == 0)</div>
|
|
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> </div>
|
|
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> <span class="keywordflow">if</span> (lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>() > rhs.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>())</div>
|
|
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> <span class="keywordflow">return</span> lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>();</div>
|
|
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> <span class="keywordflow">if</span> (lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>() < rhs.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>())</div>
|
|
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> <span class="keywordflow">return</span> !lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>();</div>
|
|
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> <span class="keywordflow">if</span> (lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>() > rhs.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>())</div>
|
|
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordflow">return</span> lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>();</div>
|
|
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> <span class="keywordflow">if</span> (lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>() < rhs.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>())</div>
|
|
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span> <span class="keywordflow">return</span> !lhs.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>();</div>
|
|
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> </div>
|
|
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span> </div>
|
|
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span>STAmount</div>
|
|
<div class="foldopen" id="foldopen01179" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"><a class="line" href="namespaceripple.html#a3dd93c3d5ba92c783ae982ffb00bf9ba"> 1179</a></span><a class="code hl_function" href="namespaceripple.html#ac73696ba9cf84191fe3d33d6ef9043c7">operator-</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& value)</div>
|
|
<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span>{</div>
|
|
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span> <span class="keywordflow">if</span> (value.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>() == 0)</div>
|
|
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span> <span class="keywordflow">return</span> value;</div>
|
|
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(</div>
|
|
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span> value.<a class="code hl_function" href="classripple_1_1STBase.html#a48097bca334d2f32a1d7861b59ae2e30">getFName</a>(),</div>
|
|
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span> value.<a class="code hl_function" href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">asset</a>(),</div>
|
|
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span> value.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>(),</div>
|
|
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> value.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>(),</div>
|
|
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span> !value.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>(),</div>
|
|
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> <a class="code hl_struct" href="structripple_1_1STAmount_1_1unchecked.html">STAmount::unchecked</a>{});</div>
|
|
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> </div>
|
|
<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span><span class="comment">// Arithmetic</span></div>
|
|
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span><span class="comment">//------------------------------------------------------------------------------</span></div>
|
|
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span> </div>
|
|
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span><span class="comment">// Calculate (a * b) / c when all three values are 64-bit</span></div>
|
|
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span><span class="comment">// without loss of precision:</span></div>
|
|
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span><span class="keyword">static</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a></div>
|
|
<div class="foldopen" id="foldopen01201" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"><a class="line" href="namespaceripple.html#abfd99ece02b928ee8520192a67595e46"> 1201</a></span><a class="code hl_function" href="namespaceripple.html#abfd99ece02b928ee8520192a67595e46">muldiv</a>(</div>
|
|
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> multiplier,</div>
|
|
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> multiplicand,</div>
|
|
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> divisor)</div>
|
|
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span>{</div>
|
|
<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span> boost::multiprecision::uint128_t ret;</div>
|
|
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span> </div>
|
|
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span> boost::multiprecision::multiply(ret, multiplier, multiplicand);</div>
|
|
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span> ret /= divisor;</div>
|
|
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> </div>
|
|
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span> <span class="keywordflow">if</span> (ret > <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits.html">std::numeric_limits<std::uint64_t>::max</a>())</div>
|
|
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span> {</div>
|
|
<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> Throw<std::overflow_error>(</div>
|
|
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span> <span class="stringliteral">"overflow: ("</span> + <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(multiplier) + <span class="stringliteral">" * "</span> +</div>
|
|
<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"> 1215</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(multiplicand) + <span class="stringliteral">") / "</span> + <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(divisor));</div>
|
|
<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"> 1216</span> }</div>
|
|
<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"> 1217</span> </div>
|
|
<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>uint64_t<span class="keyword">></span>(ret);</div>
|
|
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> </div>
|
|
<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span><span class="keyword">static</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a></div>
|
|
<div class="foldopen" id="foldopen01222" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"><a class="line" href="namespaceripple.html#ae745102449603924823f094157604641"> 1222</a></span><a class="code hl_function" href="namespaceripple.html#ae745102449603924823f094157604641">muldiv_round</a>(</div>
|
|
<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"> 1223</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> multiplier,</div>
|
|
<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> multiplicand,</div>
|
|
<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"> 1225</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> divisor,</div>
|
|
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> rounding)</div>
|
|
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span>{</div>
|
|
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> boost::multiprecision::uint128_t ret;</div>
|
|
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> </div>
|
|
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span> boost::multiprecision::multiply(ret, multiplier, multiplicand);</div>
|
|
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> ret += rounding;</div>
|
|
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> ret /= divisor;</div>
|
|
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> </div>
|
|
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> <span class="keywordflow">if</span> (ret > <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits.html">std::numeric_limits<std::uint64_t>::max</a>())</div>
|
|
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> {</div>
|
|
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> Throw<std::overflow_error>(</div>
|
|
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> <span class="stringliteral">"overflow: (("</span> + <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(multiplier) + <span class="stringliteral">" * "</span> +</div>
|
|
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(multiplicand) + <span class="stringliteral">") + "</span> + <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(rounding) +</div>
|
|
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> <span class="stringliteral">") / "</span> + <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(divisor));</div>
|
|
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> }</div>
|
|
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> </div>
|
|
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> <span class="keywordflow">return</span> <span class="keyword">static_cast<</span>uint64_t<span class="keyword">></span>(ret);</div>
|
|
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> </div>
|
|
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span>STAmount</div>
|
|
<div class="foldopen" id="foldopen01246" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"><a class="line" href="namespaceripple.html#addd535c51946c0b7c9b38e210e8a2c1b"> 1246</a></span><a class="code hl_function" href="namespaceripple.html#a0ad557cc32ca87dcea19af8e30c63c6a">divide</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& num, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& den, <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span>& asset)</div>
|
|
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span>{</div>
|
|
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span> <span class="keywordflow">if</span> (den == beast::zero)</div>
|
|
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span> Throw<std::runtime_error>(<span class="stringliteral">"division by zero"</span>);</div>
|
|
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span> </div>
|
|
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span> <span class="keywordflow">if</span> (num == beast::zero)</div>
|
|
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span> <span class="keywordflow">return</span> {asset};</div>
|
|
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> </div>
|
|
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> numVal = num.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>();</div>
|
|
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> denVal = den.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>();</div>
|
|
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span> <span class="keywordtype">int</span> numOffset = num.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>();</div>
|
|
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span> <span class="keywordtype">int</span> denOffset = den.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>();</div>
|
|
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span> </div>
|
|
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span> <span class="keywordflow">if</span> (num.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() || num.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> {</div>
|
|
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span> <span class="keywordflow">while</span> (numVal < <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">STAmount::cMinValue</a>)</div>
|
|
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span> {</div>
|
|
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> <span class="comment">// Need to bring into range</span></div>
|
|
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> numVal *= 10;</div>
|
|
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> --numOffset;</div>
|
|
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> }</div>
|
|
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span> }</div>
|
|
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> </div>
|
|
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> <span class="keywordflow">if</span> (den.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() || den.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> {</div>
|
|
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> <span class="keywordflow">while</span> (denVal < <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">STAmount::cMinValue</a>)</div>
|
|
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> {</div>
|
|
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> denVal *= 10;</div>
|
|
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span> --denOffset;</div>
|
|
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span> }</div>
|
|
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> }</div>
|
|
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> </div>
|
|
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span> <span class="comment">// We divide the two mantissas (each is between 10^15</span></div>
|
|
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span> <span class="comment">// and 10^16). To maintain precision, we multiply the</span></div>
|
|
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> <span class="comment">// numerator by 10^17 (the product is in the range of</span></div>
|
|
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span> <span class="comment">// 10^32 to 10^33) followed by a division, so the result</span></div>
|
|
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> <span class="comment">// is in the range of 10^16 to 10^15.</span></div>
|
|
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(</div>
|
|
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> asset,</div>
|
|
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> <a class="code hl_function" href="namespaceripple.html#abfd99ece02b928ee8520192a67595e46">muldiv</a>(numVal, <a class="code hl_variable" href="namespaceripple.html#a3fe32b2904420f2f653103f040ca488c">tenTo17</a>, denVal) + 5,</div>
|
|
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> numOffset - denOffset - 17,</div>
|
|
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> num.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() != den.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>());</div>
|
|
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> </div>
|
|
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span>STAmount</div>
|
|
<div class="foldopen" id="foldopen01291" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"><a class="line" href="namespaceripple.html#a8939207f7cde7fdaf53fd447a884d3b6"> 1291</a></span><a class="code hl_function" href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">multiply</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v1, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v2, <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span>& asset)</div>
|
|
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span>{</div>
|
|
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> <span class="keywordflow">if</span> (v1 == beast::zero || v2 == beast::zero)</div>
|
|
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(asset);</div>
|
|
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> </div>
|
|
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> <span class="keywordflow">if</span> (v1.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() && v2.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() && asset.<a class="code hl_function" href="classripple_1_1Asset.html#a09d7cb36a7e8da2f4471cd947a07672c">native</a>())</div>
|
|
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> {</div>
|
|
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <span class="keyword">const</span> minV = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(<a class="code hl_function" href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c">getSNValue</a>(v1), <a class="code hl_function" href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c">getSNValue</a>(v2));</div>
|
|
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <span class="keyword">const</span> maxV = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(<a class="code hl_function" href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c">getSNValue</a>(v1), <a class="code hl_function" href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c">getSNValue</a>(v2));</div>
|
|
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> </div>
|
|
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> <span class="keywordflow">if</span> (minV > 3000000000ull) <span class="comment">// sqrt(cMaxNative)</span></div>
|
|
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> Throw<std::runtime_error>(<span class="stringliteral">"Native value overflow"</span>);</div>
|
|
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> </div>
|
|
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> <span class="keywordflow">if</span> (((maxV >> 32) * minV) > 2095475792ull) <span class="comment">// cMaxNative / 2^32</span></div>
|
|
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> Throw<std::runtime_error>(<span class="stringliteral">"Native value overflow"</span>);</div>
|
|
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span> </div>
|
|
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(v1.<a class="code hl_function" href="classripple_1_1STBase.html#a48097bca334d2f32a1d7861b59ae2e30">getFName</a>(), minV * maxV);</div>
|
|
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> }</div>
|
|
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span> <span class="keywordflow">if</span> (v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>() && v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>() && asset.<a class="code hl_function" href="classripple_1_1Asset.html#af57f2647e425e58da9f4acf919843480">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> {</div>
|
|
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <span class="keyword">const</span> minV = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(<a class="code hl_function" href="namespaceripple.html#aabc169489c016c71f6980a121352832e">getMPTValue</a>(v1), <a class="code hl_function" href="namespaceripple.html#aabc169489c016c71f6980a121352832e">getMPTValue</a>(v2));</div>
|
|
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <span class="keyword">const</span> maxV = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(<a class="code hl_function" href="namespaceripple.html#aabc169489c016c71f6980a121352832e">getMPTValue</a>(v1), <a class="code hl_function" href="namespaceripple.html#aabc169489c016c71f6980a121352832e">getMPTValue</a>(v2));</div>
|
|
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> </div>
|
|
<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span> <span class="keywordflow">if</span> (minV > 3037000499ull) <span class="comment">// sqrt(maxMPTokenAmount) ~ 3037000499.98</span></div>
|
|
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span> Throw<std::runtime_error>(<span class="stringliteral">"MPT value overflow"</span>);</div>
|
|
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span> </div>
|
|
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> <span class="keywordflow">if</span> (((maxV >> 32) * minV) > 2147483648ull) <span class="comment">// maxMPTokenAmount / 2^32</span></div>
|
|
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> Throw<std::runtime_error>(<span class="stringliteral">"MPT value overflow"</span>);</div>
|
|
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span> </div>
|
|
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(asset, minV * maxV);</div>
|
|
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span> }</div>
|
|
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> </div>
|
|
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespaceripple.html#afa1f08ba17ac61380c442f9f2fa2e7b4">getSTNumberSwitchover</a>())</div>
|
|
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span> {</div>
|
|
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> <span class="keyword">auto</span> <span class="keyword">const</span> r = <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{v1} * <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{v2};</div>
|
|
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{asset, r.mantissa(), r.exponent()};</div>
|
|
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> }</div>
|
|
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> </div>
|
|
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> value1 = v1.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>();</div>
|
|
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> value2 = v2.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>();</div>
|
|
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> <span class="keywordtype">int</span> offset1 = v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>();</div>
|
|
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> <span class="keywordtype">int</span> offset2 = v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>();</div>
|
|
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> </div>
|
|
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> <span class="keywordflow">if</span> (v1.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() || v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> {</div>
|
|
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> <span class="keywordflow">while</span> (value1 < <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">STAmount::cMinValue</a>)</div>
|
|
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> {</div>
|
|
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> value1 *= 10;</div>
|
|
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> --offset1;</div>
|
|
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> }</div>
|
|
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> }</div>
|
|
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> </div>
|
|
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> <span class="keywordflow">if</span> (v2.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() || v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> {</div>
|
|
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> <span class="keywordflow">while</span> (value2 < <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">STAmount::cMinValue</a>)</div>
|
|
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> {</div>
|
|
<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"> 1347</span> value2 *= 10;</div>
|
|
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> --offset2;</div>
|
|
<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span> }</div>
|
|
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span> }</div>
|
|
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> </div>
|
|
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span> <span class="comment">// We multiply the two mantissas (each is between 10^15</span></div>
|
|
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span> <span class="comment">// and 10^16), so their product is in the 10^30 to 10^32</span></div>
|
|
<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span> <span class="comment">// range. Dividing their product by 10^14 maintains the</span></div>
|
|
<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"> 1355</span> <span class="comment">// precision, by scaling the result to 10^16 to 10^18.</span></div>
|
|
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(</div>
|
|
<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span> asset,</div>
|
|
<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span> <a class="code hl_function" href="namespaceripple.html#abfd99ece02b928ee8520192a67595e46">muldiv</a>(value1, value2, <a class="code hl_variable" href="namespaceripple.html#ae78e6fdf69701c0f0c8952468ee49e96">tenTo14</a>) + 7,</div>
|
|
<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span> offset1 + offset2 + 14,</div>
|
|
<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span> v1.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() != v2.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>());</div>
|
|
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span> </div>
|
|
<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span><span class="comment">// This is the legacy version of canonicalizeRound. It's been in use</span></div>
|
|
<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"> 1364</span><span class="comment">// for years, so it is deeply embedded in the behavior of cross-currency</span></div>
|
|
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span><span class="comment">// transactions.</span></div>
|
|
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span><span class="comment">// However in 2022 it was noticed that the rounding characteristics were</span></div>
|
|
<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"> 1368</span><span class="comment">// surprising. When the code converts from IOU-like to XRP-like there may</span></div>
|
|
<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span><span class="comment">// be a fraction of the IOU-like representation that is too small to be</span></div>
|
|
<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span><span class="comment">// represented in drops. `canonicalizeRound()` currently does some unusual</span></div>
|
|
<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"> 1371</span><span class="comment">// rounding.</span></div>
|
|
<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span><span class="comment">// 1. If the fractional part is greater than or equal to 0.1, then the</span></div>
|
|
<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span><span class="comment">// number of drops is rounded up.</span></div>
|
|
<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span><span class="comment">// 2. However, if the fractional part is less than 0.1 (for example,</span></div>
|
|
<div class="line"><a id="l01377" name="l01377"></a><span class="lineno"> 1377</span><span class="comment">// 0.099999), then the number of drops is rounded down.</span></div>
|
|
<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l01379" name="l01379"></a><span class="lineno"> 1379</span><span class="comment">// The XRP Ledger has this rounding behavior baked in. But there are</span></div>
|
|
<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span><span class="comment">// situations where this rounding behavior led to undesirable outcomes.</span></div>
|
|
<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"> 1381</span><span class="comment">// So an alternative rounding approach was introduced. You'll see that</span></div>
|
|
<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"> 1382</span><span class="comment">// alternative below.</span></div>
|
|
<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span><span class="keyword">static</span> <span class="keywordtype">void</span></div>
|
|
<div class="foldopen" id="foldopen01384" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"><a class="line" href="namespaceripple.html#afed19a57936c35db382a67f1d58b6884"> 1384</a></span><a class="code hl_function" href="namespaceripple.html#afed19a57936c35db382a67f1d58b6884">canonicalizeRound</a>(<span class="keywordtype">bool</span> native, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a>& value, <span class="keywordtype">int</span>& offset, <span class="keywordtype">bool</span>)</div>
|
|
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span>{</div>
|
|
<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span> <span class="keywordflow">if</span> (native)</div>
|
|
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span> {</div>
|
|
<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span> <span class="keywordflow">if</span> (offset < 0)</div>
|
|
<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span> {</div>
|
|
<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span> <span class="keywordtype">int</span> loops = 0;</div>
|
|
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span> </div>
|
|
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span> <span class="keywordflow">while</span> (offset < -1)</div>
|
|
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span> {</div>
|
|
<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span> value /= 10;</div>
|
|
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span> ++offset;</div>
|
|
<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"> 1396</span> ++loops;</div>
|
|
<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span> }</div>
|
|
<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> </div>
|
|
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> value += (loops >= 2) ? 9 : 10; <span class="comment">// add before last divide</span></div>
|
|
<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span> value /= 10;</div>
|
|
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> ++offset;</div>
|
|
<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> }</div>
|
|
<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span> }</div>
|
|
<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (value > <a class="code hl_variable" href="classripple_1_1STAmount.html#aa0f01e6eacfb24a14b792ab8bd288de3">STAmount::cMaxValue</a>)</div>
|
|
<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span> {</div>
|
|
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span> <span class="keywordflow">while</span> (value > (10 * <a class="code hl_variable" href="classripple_1_1STAmount.html#aa0f01e6eacfb24a14b792ab8bd288de3">STAmount::cMaxValue</a>))</div>
|
|
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span> {</div>
|
|
<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span> value /= 10;</div>
|
|
<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span> ++offset;</div>
|
|
<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"> 1410</span> }</div>
|
|
<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"> 1411</span> </div>
|
|
<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"> 1412</span> value += 9; <span class="comment">// add before last divide</span></div>
|
|
<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span> value /= 10;</div>
|
|
<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span> ++offset;</div>
|
|
<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span> }</div>
|
|
<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"> 1416</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span> </div>
|
|
<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span><span class="comment">// The original canonicalizeRound did not allow the rounding direction to</span></div>
|
|
<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"> 1419</span><span class="comment">// be specified. It also ignored some of the bits that could contribute to</span></div>
|
|
<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span><span class="comment">// rounding decisions. canonicalizeRoundStrict() tracks all of the bits in</span></div>
|
|
<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span><span class="comment">// the value being rounded.</span></div>
|
|
<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span><span class="keyword">static</span> <span class="keywordtype">void</span></div>
|
|
<div class="foldopen" id="foldopen01423" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"><a class="line" href="namespaceripple.html#a07a687e3a16e605ec3b4ecfd29bb6232"> 1423</a></span><a class="code hl_function" href="namespaceripple.html#a07a687e3a16e605ec3b4ecfd29bb6232">canonicalizeRoundStrict</a>(</div>
|
|
<div class="line"><a id="l01424" name="l01424"></a><span class="lineno"> 1424</span> <span class="keywordtype">bool</span> native,</div>
|
|
<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"> 1425</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a>& value,</div>
|
|
<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span> <span class="keywordtype">int</span>& offset,</div>
|
|
<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"> 1427</span> <span class="keywordtype">bool</span> roundUp)</div>
|
|
<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"> 1428</span>{</div>
|
|
<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span> <span class="keywordflow">if</span> (native)</div>
|
|
<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span> {</div>
|
|
<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"> 1431</span> <span class="keywordflow">if</span> (offset < 0)</div>
|
|
<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span> {</div>
|
|
<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span> <span class="keywordtype">bool</span> hadRemainder = <span class="keyword">false</span>;</div>
|
|
<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span> </div>
|
|
<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span> <span class="keywordflow">while</span> (offset < -1)</div>
|
|
<div class="line"><a id="l01436" name="l01436"></a><span class="lineno"> 1436</span> {</div>
|
|
<div class="line"><a id="l01437" name="l01437"></a><span class="lineno"> 1437</span> <span class="comment">// It would be better to use std::lldiv than to separately</span></div>
|
|
<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"> 1438</span> <span class="comment">// compute the remainder. But std::lldiv does not support</span></div>
|
|
<div class="line"><a id="l01439" name="l01439"></a><span class="lineno"> 1439</span> <span class="comment">// unsigned arguments.</span></div>
|
|
<div class="line"><a id="l01440" name="l01440"></a><span class="lineno"> 1440</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <span class="keyword">const</span> newValue = value / 10;</div>
|
|
<div class="line"><a id="l01441" name="l01441"></a><span class="lineno"> 1441</span> hadRemainder |= (value != (newValue * 10));</div>
|
|
<div class="line"><a id="l01442" name="l01442"></a><span class="lineno"> 1442</span> value = newValue;</div>
|
|
<div class="line"><a id="l01443" name="l01443"></a><span class="lineno"> 1443</span> ++offset;</div>
|
|
<div class="line"><a id="l01444" name="l01444"></a><span class="lineno"> 1444</span> }</div>
|
|
<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"> 1445</span> value +=</div>
|
|
<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span> (hadRemainder && roundUp) ? 10 : 9; <span class="comment">// Add before last divide</span></div>
|
|
<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"> 1447</span> value /= 10;</div>
|
|
<div class="line"><a id="l01448" name="l01448"></a><span class="lineno"> 1448</span> ++offset;</div>
|
|
<div class="line"><a id="l01449" name="l01449"></a><span class="lineno"> 1449</span> }</div>
|
|
<div class="line"><a id="l01450" name="l01450"></a><span class="lineno"> 1450</span> }</div>
|
|
<div class="line"><a id="l01451" name="l01451"></a><span class="lineno"> 1451</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (value > <a class="code hl_variable" href="classripple_1_1STAmount.html#aa0f01e6eacfb24a14b792ab8bd288de3">STAmount::cMaxValue</a>)</div>
|
|
<div class="line"><a id="l01452" name="l01452"></a><span class="lineno"> 1452</span> {</div>
|
|
<div class="line"><a id="l01453" name="l01453"></a><span class="lineno"> 1453</span> <span class="keywordflow">while</span> (value > (10 * <a class="code hl_variable" href="classripple_1_1STAmount.html#aa0f01e6eacfb24a14b792ab8bd288de3">STAmount::cMaxValue</a>))</div>
|
|
<div class="line"><a id="l01454" name="l01454"></a><span class="lineno"> 1454</span> {</div>
|
|
<div class="line"><a id="l01455" name="l01455"></a><span class="lineno"> 1455</span> value /= 10;</div>
|
|
<div class="line"><a id="l01456" name="l01456"></a><span class="lineno"> 1456</span> ++offset;</div>
|
|
<div class="line"><a id="l01457" name="l01457"></a><span class="lineno"> 1457</span> }</div>
|
|
<div class="line"><a id="l01458" name="l01458"></a><span class="lineno"> 1458</span> value += 9; <span class="comment">// add before last divide</span></div>
|
|
<div class="line"><a id="l01459" name="l01459"></a><span class="lineno"> 1459</span> value /= 10;</div>
|
|
<div class="line"><a id="l01460" name="l01460"></a><span class="lineno"> 1460</span> ++offset;</div>
|
|
<div class="line"><a id="l01461" name="l01461"></a><span class="lineno"> 1461</span> }</div>
|
|
<div class="line"><a id="l01462" name="l01462"></a><span class="lineno"> 1462</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01463" name="l01463"></a><span class="lineno"> 1463</span> </div>
|
|
<div class="line"><a id="l01464" name="l01464"></a><span class="lineno"> 1464</span><span class="keyword">namespace </span>{</div>
|
|
<div class="line"><a id="l01465" name="l01465"></a><span class="lineno"> 1465</span> </div>
|
|
<div class="line"><a id="l01466" name="l01466"></a><span class="lineno"> 1466</span><span class="comment">// We need a class that has an interface similar to NumberRoundModeGuard</span></div>
|
|
<div class="line"><a id="l01467" name="l01467"></a><span class="lineno"> 1467</span><span class="comment">// but does nothing.</span></div>
|
|
<div class="line"><a id="l01468" name="l01468"></a><span class="lineno"> 1468</span><span class="keyword">class </span>DontAffectNumberRoundMode</div>
|
|
<div class="line"><a id="l01469" name="l01469"></a><span class="lineno"> 1469</span>{</div>
|
|
<div class="line"><a id="l01470" name="l01470"></a><span class="lineno"> 1470</span><span class="keyword">public</span>:</div>
|
|
<div class="line"><a id="l01471" name="l01471"></a><span class="lineno"> 1471</span> <span class="keyword">explicit</span> DontAffectNumberRoundMode(<a class="code hl_enumeration" href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534">Number::rounding_mode</a> mode) <span class="keyword">noexcept</span></div>
|
|
<div class="line"><a id="l01472" name="l01472"></a><span class="lineno"> 1472</span> {</div>
|
|
<div class="line"><a id="l01473" name="l01473"></a><span class="lineno"> 1473</span> }</div>
|
|
<div class="line"><a id="l01474" name="l01474"></a><span class="lineno"> 1474</span> </div>
|
|
<div class="line"><a id="l01475" name="l01475"></a><span class="lineno"> 1475</span> DontAffectNumberRoundMode(DontAffectNumberRoundMode <span class="keyword">const</span>&) = <span class="keyword">delete</span>;</div>
|
|
<div class="line"><a id="l01476" name="l01476"></a><span class="lineno"> 1476</span> </div>
|
|
<div class="line"><a id="l01477" name="l01477"></a><span class="lineno"> 1477</span> DontAffectNumberRoundMode&</div>
|
|
<div class="line"><a id="l01478" name="l01478"></a><span class="lineno"> 1478</span> operator=(DontAffectNumberRoundMode <span class="keyword">const</span>&) = <span class="keyword">delete</span>;</div>
|
|
<div class="line"><a id="l01479" name="l01479"></a><span class="lineno"> 1479</span>};</div>
|
|
<div class="line"><a id="l01480" name="l01480"></a><span class="lineno"> 1480</span> </div>
|
|
<div class="line"><a id="l01481" name="l01481"></a><span class="lineno"> 1481</span>} <span class="comment">// anonymous namespace</span></div>
|
|
<div class="line"><a id="l01482" name="l01482"></a><span class="lineno"> 1482</span> </div>
|
|
<div class="line"><a id="l01483" name="l01483"></a><span class="lineno"> 1483</span><span class="comment">// Pass the canonicalizeRound function pointer as a template parameter.</span></div>
|
|
<div class="line"><a id="l01484" name="l01484"></a><span class="lineno"> 1484</span><span class="comment">//</span></div>
|
|
<div class="line"><a id="l01485" name="l01485"></a><span class="lineno"> 1485</span><span class="comment">// We might need to use NumberRoundModeGuard. Allow the caller</span></div>
|
|
<div class="line"><a id="l01486" name="l01486"></a><span class="lineno"> 1486</span><span class="comment">// to pass either that or a replacement as a template parameter.</span></div>
|
|
<div class="line"><a id="l01487" name="l01487"></a><span class="lineno"> 1487</span><span class="keyword">template</span> <</div>
|
|
<div class="line"><a id="l01488" name="l01488"></a><span class="lineno"> 1488</span> void (*CanonicalizeFunc)(bool, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a>&, <span class="keywordtype">int</span>&, bool),</div>
|
|
<div class="line"><a id="l01489" name="l01489"></a><span class="lineno"> 1489</span> <span class="keyword">typename</span> MightSaveRound></div>
|
|
<div class="line"><a id="l01490" name="l01490"></a><span class="lineno"> 1490</span><span class="keyword">static</span> STAmount</div>
|
|
<div class="foldopen" id="foldopen01491" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01491" name="l01491"></a><span class="lineno"><a class="line" href="namespaceripple.html#ad71ced27132b476455a57b614a6bc137"> 1491</a></span><a class="code hl_function" href="namespaceripple.html#ad71ced27132b476455a57b614a6bc137">mulRoundImpl</a>(</div>
|
|
<div class="line"><a id="l01492" name="l01492"></a><span class="lineno"> 1492</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v1,</div>
|
|
<div class="line"><a id="l01493" name="l01493"></a><span class="lineno"> 1493</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v2,</div>
|
|
<div class="line"><a id="l01494" name="l01494"></a><span class="lineno"> 1494</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span>& asset,</div>
|
|
<div class="line"><a id="l01495" name="l01495"></a><span class="lineno"> 1495</span> <span class="keywordtype">bool</span> roundUp)</div>
|
|
<div class="line"><a id="l01496" name="l01496"></a><span class="lineno"> 1496</span>{</div>
|
|
<div class="line"><a id="l01497" name="l01497"></a><span class="lineno"> 1497</span> <span class="keywordflow">if</span> (v1 == beast::zero || v2 == beast::zero)</div>
|
|
<div class="line"><a id="l01498" name="l01498"></a><span class="lineno"> 1498</span> <span class="keywordflow">return</span> {asset};</div>
|
|
<div class="line"><a id="l01499" name="l01499"></a><span class="lineno"> 1499</span> </div>
|
|
<div class="line"><a id="l01500" name="l01500"></a><span class="lineno"> 1500</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> xrp = asset.<a class="code hl_function" href="classripple_1_1Asset.html#a09d7cb36a7e8da2f4471cd947a07672c">native</a>();</div>
|
|
<div class="line"><a id="l01501" name="l01501"></a><span class="lineno"> 1501</span> </div>
|
|
<div class="line"><a id="l01502" name="l01502"></a><span class="lineno"> 1502</span> <span class="keywordflow">if</span> (v1.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() && v2.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() && xrp)</div>
|
|
<div class="line"><a id="l01503" name="l01503"></a><span class="lineno"> 1503</span> {</div>
|
|
<div class="line"><a id="l01504" name="l01504"></a><span class="lineno"> 1504</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> minV = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(<a class="code hl_function" href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c">getSNValue</a>(v1), <a class="code hl_function" href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c">getSNValue</a>(v2));</div>
|
|
<div class="line"><a id="l01505" name="l01505"></a><span class="lineno"> 1505</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> maxV = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(<a class="code hl_function" href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c">getSNValue</a>(v1), <a class="code hl_function" href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c">getSNValue</a>(v2));</div>
|
|
<div class="line"><a id="l01506" name="l01506"></a><span class="lineno"> 1506</span> </div>
|
|
<div class="line"><a id="l01507" name="l01507"></a><span class="lineno"> 1507</span> <span class="keywordflow">if</span> (minV > 3000000000ull) <span class="comment">// sqrt(cMaxNative)</span></div>
|
|
<div class="line"><a id="l01508" name="l01508"></a><span class="lineno"> 1508</span> Throw<std::runtime_error>(<span class="stringliteral">"Native value overflow"</span>);</div>
|
|
<div class="line"><a id="l01509" name="l01509"></a><span class="lineno"> 1509</span> </div>
|
|
<div class="line"><a id="l01510" name="l01510"></a><span class="lineno"> 1510</span> <span class="keywordflow">if</span> (((maxV >> 32) * minV) > 2095475792ull) <span class="comment">// cMaxNative / 2^32</span></div>
|
|
<div class="line"><a id="l01511" name="l01511"></a><span class="lineno"> 1511</span> Throw<std::runtime_error>(<span class="stringliteral">"Native value overflow"</span>);</div>
|
|
<div class="line"><a id="l01512" name="l01512"></a><span class="lineno"> 1512</span> </div>
|
|
<div class="line"><a id="l01513" name="l01513"></a><span class="lineno"> 1513</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(v1.<a class="code hl_function" href="classripple_1_1STBase.html#a48097bca334d2f32a1d7861b59ae2e30">getFName</a>(), minV * maxV);</div>
|
|
<div class="line"><a id="l01514" name="l01514"></a><span class="lineno"> 1514</span> }</div>
|
|
<div class="line"><a id="l01515" name="l01515"></a><span class="lineno"> 1515</span> </div>
|
|
<div class="line"><a id="l01516" name="l01516"></a><span class="lineno"> 1516</span> <span class="keywordflow">if</span> (v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>() && v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>() && asset.<a class="code hl_function" href="classripple_1_1Asset.html#af57f2647e425e58da9f4acf919843480">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l01517" name="l01517"></a><span class="lineno"> 1517</span> {</div>
|
|
<div class="line"><a id="l01518" name="l01518"></a><span class="lineno"> 1518</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <span class="keyword">const</span> minV = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(<a class="code hl_function" href="namespaceripple.html#aabc169489c016c71f6980a121352832e">getMPTValue</a>(v1), <a class="code hl_function" href="namespaceripple.html#aabc169489c016c71f6980a121352832e">getMPTValue</a>(v2));</div>
|
|
<div class="line"><a id="l01519" name="l01519"></a><span class="lineno"> 1519</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> <span class="keyword">const</span> maxV = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(<a class="code hl_function" href="namespaceripple.html#aabc169489c016c71f6980a121352832e">getMPTValue</a>(v1), <a class="code hl_function" href="namespaceripple.html#aabc169489c016c71f6980a121352832e">getMPTValue</a>(v2));</div>
|
|
<div class="line"><a id="l01520" name="l01520"></a><span class="lineno"> 1520</span> </div>
|
|
<div class="line"><a id="l01521" name="l01521"></a><span class="lineno"> 1521</span> <span class="keywordflow">if</span> (minV > 3037000499ull) <span class="comment">// sqrt(maxMPTokenAmount) ~ 3037000499.98</span></div>
|
|
<div class="line"><a id="l01522" name="l01522"></a><span class="lineno"> 1522</span> Throw<std::runtime_error>(<span class="stringliteral">"MPT value overflow"</span>);</div>
|
|
<div class="line"><a id="l01523" name="l01523"></a><span class="lineno"> 1523</span> </div>
|
|
<div class="line"><a id="l01524" name="l01524"></a><span class="lineno"> 1524</span> <span class="keywordflow">if</span> (((maxV >> 32) * minV) > 2147483648ull) <span class="comment">// maxMPTokenAmount / 2^32</span></div>
|
|
<div class="line"><a id="l01525" name="l01525"></a><span class="lineno"> 1525</span> Throw<std::runtime_error>(<span class="stringliteral">"MPT value overflow"</span>);</div>
|
|
<div class="line"><a id="l01526" name="l01526"></a><span class="lineno"> 1526</span> </div>
|
|
<div class="line"><a id="l01527" name="l01527"></a><span class="lineno"> 1527</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(asset, minV * maxV);</div>
|
|
<div class="line"><a id="l01528" name="l01528"></a><span class="lineno"> 1528</span> }</div>
|
|
<div class="line"><a id="l01529" name="l01529"></a><span class="lineno"> 1529</span> </div>
|
|
<div class="line"><a id="l01530" name="l01530"></a><span class="lineno"> 1530</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> value1 = v1.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>(), value2 = v2.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>();</div>
|
|
<div class="line"><a id="l01531" name="l01531"></a><span class="lineno"> 1531</span> <span class="keywordtype">int</span> offset1 = v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>(), offset2 = v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>();</div>
|
|
<div class="line"><a id="l01532" name="l01532"></a><span class="lineno"> 1532</span> </div>
|
|
<div class="line"><a id="l01533" name="l01533"></a><span class="lineno"> 1533</span> <span class="keywordflow">if</span> (v1.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() || v1.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l01534" name="l01534"></a><span class="lineno"> 1534</span> {</div>
|
|
<div class="line"><a id="l01535" name="l01535"></a><span class="lineno"> 1535</span> <span class="keywordflow">while</span> (value1 < <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">STAmount::cMinValue</a>)</div>
|
|
<div class="line"><a id="l01536" name="l01536"></a><span class="lineno"> 1536</span> {</div>
|
|
<div class="line"><a id="l01537" name="l01537"></a><span class="lineno"> 1537</span> value1 *= 10;</div>
|
|
<div class="line"><a id="l01538" name="l01538"></a><span class="lineno"> 1538</span> --offset1;</div>
|
|
<div class="line"><a id="l01539" name="l01539"></a><span class="lineno"> 1539</span> }</div>
|
|
<div class="line"><a id="l01540" name="l01540"></a><span class="lineno"> 1540</span> }</div>
|
|
<div class="line"><a id="l01541" name="l01541"></a><span class="lineno"> 1541</span> </div>
|
|
<div class="line"><a id="l01542" name="l01542"></a><span class="lineno"> 1542</span> <span class="keywordflow">if</span> (v2.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() || v2.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l01543" name="l01543"></a><span class="lineno"> 1543</span> {</div>
|
|
<div class="line"><a id="l01544" name="l01544"></a><span class="lineno"> 1544</span> <span class="keywordflow">while</span> (value2 < <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">STAmount::cMinValue</a>)</div>
|
|
<div class="line"><a id="l01545" name="l01545"></a><span class="lineno"> 1545</span> {</div>
|
|
<div class="line"><a id="l01546" name="l01546"></a><span class="lineno"> 1546</span> value2 *= 10;</div>
|
|
<div class="line"><a id="l01547" name="l01547"></a><span class="lineno"> 1547</span> --offset2;</div>
|
|
<div class="line"><a id="l01548" name="l01548"></a><span class="lineno"> 1548</span> }</div>
|
|
<div class="line"><a id="l01549" name="l01549"></a><span class="lineno"> 1549</span> }</div>
|
|
<div class="line"><a id="l01550" name="l01550"></a><span class="lineno"> 1550</span> </div>
|
|
<div class="line"><a id="l01551" name="l01551"></a><span class="lineno"> 1551</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> resultNegative = v1.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() != v2.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>();</div>
|
|
<div class="line"><a id="l01552" name="l01552"></a><span class="lineno"> 1552</span> </div>
|
|
<div class="line"><a id="l01553" name="l01553"></a><span class="lineno"> 1553</span> <span class="comment">// We multiply the two mantissas (each is between 10^15</span></div>
|
|
<div class="line"><a id="l01554" name="l01554"></a><span class="lineno"> 1554</span> <span class="comment">// and 10^16), so their product is in the 10^30 to 10^32</span></div>
|
|
<div class="line"><a id="l01555" name="l01555"></a><span class="lineno"> 1555</span> <span class="comment">// range. Dividing their product by 10^14 maintains the</span></div>
|
|
<div class="line"><a id="l01556" name="l01556"></a><span class="lineno"> 1556</span> <span class="comment">// precision, by scaling the result to 10^16 to 10^18.</span></div>
|
|
<div class="line"><a id="l01557" name="l01557"></a><span class="lineno"> 1557</span> <span class="comment">//</span></div>
|
|
<div class="line"><a id="l01558" name="l01558"></a><span class="lineno"> 1558</span> <span class="comment">// If the we're rounding up, we want to round up away</span></div>
|
|
<div class="line"><a id="l01559" name="l01559"></a><span class="lineno"> 1559</span> <span class="comment">// from zero, and if we're rounding down, truncation</span></div>
|
|
<div class="line"><a id="l01560" name="l01560"></a><span class="lineno"> 1560</span> <span class="comment">// is implicit.</span></div>
|
|
<div class="line"><a id="l01561" name="l01561"></a><span class="lineno"> 1561</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> amount = <a class="code hl_function" href="namespaceripple.html#ae745102449603924823f094157604641">muldiv_round</a>(</div>
|
|
<div class="line"><a id="l01562" name="l01562"></a><span class="lineno"> 1562</span> value1, value2, <a class="code hl_variable" href="namespaceripple.html#ae78e6fdf69701c0f0c8952468ee49e96">tenTo14</a>, (resultNegative != roundUp) ? <a class="code hl_variable" href="namespaceripple.html#a5ad1aaa8fb2bf36539e8817488a2076f">tenTo14m1</a> : 0);</div>
|
|
<div class="line"><a id="l01563" name="l01563"></a><span class="lineno"> 1563</span> </div>
|
|
<div class="line"><a id="l01564" name="l01564"></a><span class="lineno"> 1564</span> <span class="keywordtype">int</span> offset = offset1 + offset2 + 14;</div>
|
|
<div class="line"><a id="l01565" name="l01565"></a><span class="lineno"> 1565</span> <span class="keywordflow">if</span> (resultNegative != roundUp)</div>
|
|
<div class="line"><a id="l01566" name="l01566"></a><span class="lineno"> 1566</span> {</div>
|
|
<div class="line"><a id="l01567" name="l01567"></a><span class="lineno"> 1567</span> CanonicalizeFunc(xrp, amount, offset, roundUp);</div>
|
|
<div class="line"><a id="l01568" name="l01568"></a><span class="lineno"> 1568</span> }</div>
|
|
<div class="line"><a id="l01569" name="l01569"></a><span class="lineno"> 1569</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> result = [&]() {</div>
|
|
<div class="line"><a id="l01570" name="l01570"></a><span class="lineno"> 1570</span> <span class="comment">// If appropriate, tell Number to round down. This gives the desired</span></div>
|
|
<div class="line"><a id="l01571" name="l01571"></a><span class="lineno"> 1571</span> <span class="comment">// result from STAmount::canonicalize.</span></div>
|
|
<div class="line"><a id="l01572" name="l01572"></a><span class="lineno"> 1572</span> MightSaveRound <span class="keyword">const</span> savedRound(<a class="code hl_enumvalue" href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534afed3119e1980867324d399f42cbf548d">Number::towards_zero</a>);</div>
|
|
<div class="line"><a id="l01573" name="l01573"></a><span class="lineno"> 1573</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(asset, amount, offset, resultNegative);</div>
|
|
<div class="line"><a id="l01574" name="l01574"></a><span class="lineno"> 1574</span> }();</div>
|
|
<div class="line"><a id="l01575" name="l01575"></a><span class="lineno"> 1575</span> </div>
|
|
<div class="line"><a id="l01576" name="l01576"></a><span class="lineno"> 1576</span> <span class="keywordflow">if</span> (roundUp && !resultNegative && !result)</div>
|
|
<div class="line"><a id="l01577" name="l01577"></a><span class="lineno"> 1577</span> {</div>
|
|
<div class="line"><a id="l01578" name="l01578"></a><span class="lineno"> 1578</span> <span class="keywordflow">if</span> (xrp)</div>
|
|
<div class="line"><a id="l01579" name="l01579"></a><span class="lineno"> 1579</span> {</div>
|
|
<div class="line"><a id="l01580" name="l01580"></a><span class="lineno"> 1580</span> <span class="comment">// return the smallest value above zero</span></div>
|
|
<div class="line"><a id="l01581" name="l01581"></a><span class="lineno"> 1581</span> amount = 1;</div>
|
|
<div class="line"><a id="l01582" name="l01582"></a><span class="lineno"> 1582</span> offset = 0;</div>
|
|
<div class="line"><a id="l01583" name="l01583"></a><span class="lineno"> 1583</span> }</div>
|
|
<div class="line"><a id="l01584" name="l01584"></a><span class="lineno"> 1584</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l01585" name="l01585"></a><span class="lineno"> 1585</span> {</div>
|
|
<div class="line"><a id="l01586" name="l01586"></a><span class="lineno"> 1586</span> <span class="comment">// return the smallest value above zero</span></div>
|
|
<div class="line"><a id="l01587" name="l01587"></a><span class="lineno"> 1587</span> amount = <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">STAmount::cMinValue</a>;</div>
|
|
<div class="line"><a id="l01588" name="l01588"></a><span class="lineno"> 1588</span> offset = <a class="code hl_variable" href="classripple_1_1STAmount.html#a539c35e311bcd82305e49e1f2948e880">STAmount::cMinOffset</a>;</div>
|
|
<div class="line"><a id="l01589" name="l01589"></a><span class="lineno"> 1589</span> }</div>
|
|
<div class="line"><a id="l01590" name="l01590"></a><span class="lineno"> 1590</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(asset, amount, offset, resultNegative);</div>
|
|
<div class="line"><a id="l01591" name="l01591"></a><span class="lineno"> 1591</span> }</div>
|
|
<div class="line"><a id="l01592" name="l01592"></a><span class="lineno"> 1592</span> <span class="keywordflow">return</span> result;</div>
|
|
<div class="line"><a id="l01593" name="l01593"></a><span class="lineno"> 1593</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01594" name="l01594"></a><span class="lineno"> 1594</span> </div>
|
|
<div class="line"><a id="l01595" name="l01595"></a><span class="lineno"> 1595</span>STAmount</div>
|
|
<div class="foldopen" id="foldopen01596" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01596" name="l01596"></a><span class="lineno"><a class="line" href="namespaceripple.html#ac96824de7714986a7122e5551a2ba470"> 1596</a></span><a class="code hl_function" href="namespaceripple.html#ac96824de7714986a7122e5551a2ba470">mulRound</a>(</div>
|
|
<div class="line"><a id="l01597" name="l01597"></a><span class="lineno"> 1597</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v1,</div>
|
|
<div class="line"><a id="l01598" name="l01598"></a><span class="lineno"> 1598</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v2,</div>
|
|
<div class="line"><a id="l01599" name="l01599"></a><span class="lineno"> 1599</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span>& asset,</div>
|
|
<div class="line"><a id="l01600" name="l01600"></a><span class="lineno"> 1600</span> <span class="keywordtype">bool</span> roundUp)</div>
|
|
<div class="line"><a id="l01601" name="l01601"></a><span class="lineno"> 1601</span>{</div>
|
|
<div class="line"><a id="l01602" name="l01602"></a><span class="lineno"> 1602</span> <span class="keywordflow">return</span> mulRoundImpl<canonicalizeRound, DontAffectNumberRoundMode>(</div>
|
|
<div class="line"><a id="l01603" name="l01603"></a><span class="lineno"> 1603</span> v1, v2, asset, roundUp);</div>
|
|
<div class="line"><a id="l01604" name="l01604"></a><span class="lineno"> 1604</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01605" name="l01605"></a><span class="lineno"> 1605</span> </div>
|
|
<div class="line"><a id="l01606" name="l01606"></a><span class="lineno"> 1606</span>STAmount</div>
|
|
<div class="foldopen" id="foldopen01607" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01607" name="l01607"></a><span class="lineno"><a class="line" href="namespaceripple.html#aded0fdc385035a62141ea25eab21d077"> 1607</a></span><a class="code hl_function" href="namespaceripple.html#aded0fdc385035a62141ea25eab21d077">mulRoundStrict</a>(</div>
|
|
<div class="line"><a id="l01608" name="l01608"></a><span class="lineno"> 1608</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v1,</div>
|
|
<div class="line"><a id="l01609" name="l01609"></a><span class="lineno"> 1609</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& v2,</div>
|
|
<div class="line"><a id="l01610" name="l01610"></a><span class="lineno"> 1610</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span>& asset,</div>
|
|
<div class="line"><a id="l01611" name="l01611"></a><span class="lineno"> 1611</span> <span class="keywordtype">bool</span> roundUp)</div>
|
|
<div class="line"><a id="l01612" name="l01612"></a><span class="lineno"> 1612</span>{</div>
|
|
<div class="line"><a id="l01613" name="l01613"></a><span class="lineno"> 1613</span> <span class="keywordflow">return</span> mulRoundImpl<canonicalizeRoundStrict, NumberRoundModeGuard>(</div>
|
|
<div class="line"><a id="l01614" name="l01614"></a><span class="lineno"> 1614</span> v1, v2, asset, roundUp);</div>
|
|
<div class="line"><a id="l01615" name="l01615"></a><span class="lineno"> 1615</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01616" name="l01616"></a><span class="lineno"> 1616</span> </div>
|
|
<div class="line"><a id="l01617" name="l01617"></a><span class="lineno"> 1617</span><span class="comment">// We might need to use NumberRoundModeGuard. Allow the caller</span></div>
|
|
<div class="line"><a id="l01618" name="l01618"></a><span class="lineno"> 1618</span><span class="comment">// to pass either that or a replacement as a template parameter.</span></div>
|
|
<div class="line"><a id="l01619" name="l01619"></a><span class="lineno"> 1619</span><span class="keyword">template</span> <<span class="keyword">typename</span> MightSaveRound></div>
|
|
<div class="line"><a id="l01620" name="l01620"></a><span class="lineno"> 1620</span><span class="keyword">static</span> STAmount</div>
|
|
<div class="foldopen" id="foldopen01621" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01621" name="l01621"></a><span class="lineno"><a class="line" href="namespaceripple.html#ade17ab06548b1e0b300cd0ae50717418"> 1621</a></span><a class="code hl_function" href="namespaceripple.html#ade17ab06548b1e0b300cd0ae50717418">divRoundImpl</a>(</div>
|
|
<div class="line"><a id="l01622" name="l01622"></a><span class="lineno"> 1622</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& num,</div>
|
|
<div class="line"><a id="l01623" name="l01623"></a><span class="lineno"> 1623</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& den,</div>
|
|
<div class="line"><a id="l01624" name="l01624"></a><span class="lineno"> 1624</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span>& asset,</div>
|
|
<div class="line"><a id="l01625" name="l01625"></a><span class="lineno"> 1625</span> <span class="keywordtype">bool</span> roundUp)</div>
|
|
<div class="line"><a id="l01626" name="l01626"></a><span class="lineno"> 1626</span>{</div>
|
|
<div class="line"><a id="l01627" name="l01627"></a><span class="lineno"> 1627</span> <span class="keywordflow">if</span> (den == beast::zero)</div>
|
|
<div class="line"><a id="l01628" name="l01628"></a><span class="lineno"> 1628</span> Throw<std::runtime_error>(<span class="stringliteral">"division by zero"</span>);</div>
|
|
<div class="line"><a id="l01629" name="l01629"></a><span class="lineno"> 1629</span> </div>
|
|
<div class="line"><a id="l01630" name="l01630"></a><span class="lineno"> 1630</span> <span class="keywordflow">if</span> (num == beast::zero)</div>
|
|
<div class="line"><a id="l01631" name="l01631"></a><span class="lineno"> 1631</span> <span class="keywordflow">return</span> {asset};</div>
|
|
<div class="line"><a id="l01632" name="l01632"></a><span class="lineno"> 1632</span> </div>
|
|
<div class="line"><a id="l01633" name="l01633"></a><span class="lineno"> 1633</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> numVal = num.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>(), denVal = den.<a class="code hl_function" href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">mantissa</a>();</div>
|
|
<div class="line"><a id="l01634" name="l01634"></a><span class="lineno"> 1634</span> <span class="keywordtype">int</span> numOffset = num.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>(), denOffset = den.<a class="code hl_function" href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">exponent</a>();</div>
|
|
<div class="line"><a id="l01635" name="l01635"></a><span class="lineno"> 1635</span> </div>
|
|
<div class="line"><a id="l01636" name="l01636"></a><span class="lineno"> 1636</span> <span class="keywordflow">if</span> (num.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() || num.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l01637" name="l01637"></a><span class="lineno"> 1637</span> {</div>
|
|
<div class="line"><a id="l01638" name="l01638"></a><span class="lineno"> 1638</span> <span class="keywordflow">while</span> (numVal < <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">STAmount::cMinValue</a>)</div>
|
|
<div class="line"><a id="l01639" name="l01639"></a><span class="lineno"> 1639</span> {</div>
|
|
<div class="line"><a id="l01640" name="l01640"></a><span class="lineno"> 1640</span> numVal *= 10;</div>
|
|
<div class="line"><a id="l01641" name="l01641"></a><span class="lineno"> 1641</span> --numOffset;</div>
|
|
<div class="line"><a id="l01642" name="l01642"></a><span class="lineno"> 1642</span> }</div>
|
|
<div class="line"><a id="l01643" name="l01643"></a><span class="lineno"> 1643</span> }</div>
|
|
<div class="line"><a id="l01644" name="l01644"></a><span class="lineno"> 1644</span> </div>
|
|
<div class="line"><a id="l01645" name="l01645"></a><span class="lineno"> 1645</span> <span class="keywordflow">if</span> (den.<a class="code hl_function" href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">native</a>() || den.<a class="code hl_function" href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l01646" name="l01646"></a><span class="lineno"> 1646</span> {</div>
|
|
<div class="line"><a id="l01647" name="l01647"></a><span class="lineno"> 1647</span> <span class="keywordflow">while</span> (denVal < <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">STAmount::cMinValue</a>)</div>
|
|
<div class="line"><a id="l01648" name="l01648"></a><span class="lineno"> 1648</span> {</div>
|
|
<div class="line"><a id="l01649" name="l01649"></a><span class="lineno"> 1649</span> denVal *= 10;</div>
|
|
<div class="line"><a id="l01650" name="l01650"></a><span class="lineno"> 1650</span> --denOffset;</div>
|
|
<div class="line"><a id="l01651" name="l01651"></a><span class="lineno"> 1651</span> }</div>
|
|
<div class="line"><a id="l01652" name="l01652"></a><span class="lineno"> 1652</span> }</div>
|
|
<div class="line"><a id="l01653" name="l01653"></a><span class="lineno"> 1653</span> </div>
|
|
<div class="line"><a id="l01654" name="l01654"></a><span class="lineno"> 1654</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> resultNegative = (num.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>() != den.<a class="code hl_function" href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">negative</a>());</div>
|
|
<div class="line"><a id="l01655" name="l01655"></a><span class="lineno"> 1655</span> </div>
|
|
<div class="line"><a id="l01656" name="l01656"></a><span class="lineno"> 1656</span> <span class="comment">// We divide the two mantissas (each is between 10^15</span></div>
|
|
<div class="line"><a id="l01657" name="l01657"></a><span class="lineno"> 1657</span> <span class="comment">// and 10^16). To maintain precision, we multiply the</span></div>
|
|
<div class="line"><a id="l01658" name="l01658"></a><span class="lineno"> 1658</span> <span class="comment">// numerator by 10^17 (the product is in the range of</span></div>
|
|
<div class="line"><a id="l01659" name="l01659"></a><span class="lineno"> 1659</span> <span class="comment">// 10^32 to 10^33) followed by a division, so the result</span></div>
|
|
<div class="line"><a id="l01660" name="l01660"></a><span class="lineno"> 1660</span> <span class="comment">// is in the range of 10^16 to 10^15.</span></div>
|
|
<div class="line"><a id="l01661" name="l01661"></a><span class="lineno"> 1661</span> <span class="comment">//</span></div>
|
|
<div class="line"><a id="l01662" name="l01662"></a><span class="lineno"> 1662</span> <span class="comment">// We round away from zero if we're rounding up or</span></div>
|
|
<div class="line"><a id="l01663" name="l01663"></a><span class="lineno"> 1663</span> <span class="comment">// truncate if we're rounding down.</span></div>
|
|
<div class="line"><a id="l01664" name="l01664"></a><span class="lineno"> 1664</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a> amount = <a class="code hl_function" href="namespaceripple.html#ae745102449603924823f094157604641">muldiv_round</a>(</div>
|
|
<div class="line"><a id="l01665" name="l01665"></a><span class="lineno"> 1665</span> numVal, <a class="code hl_variable" href="namespaceripple.html#a3fe32b2904420f2f653103f040ca488c">tenTo17</a>, denVal, (resultNegative != roundUp) ? denVal - 1 : 0);</div>
|
|
<div class="line"><a id="l01666" name="l01666"></a><span class="lineno"> 1666</span> </div>
|
|
<div class="line"><a id="l01667" name="l01667"></a><span class="lineno"> 1667</span> <span class="keywordtype">int</span> offset = numOffset - denOffset - 17;</div>
|
|
<div class="line"><a id="l01668" name="l01668"></a><span class="lineno"> 1668</span> </div>
|
|
<div class="line"><a id="l01669" name="l01669"></a><span class="lineno"> 1669</span> <span class="keywordflow">if</span> (resultNegative != roundUp)</div>
|
|
<div class="line"><a id="l01670" name="l01670"></a><span class="lineno"> 1670</span> <a class="code hl_function" href="namespaceripple.html#afed19a57936c35db382a67f1d58b6884">canonicalizeRound</a>(</div>
|
|
<div class="line"><a id="l01671" name="l01671"></a><span class="lineno"> 1671</span> asset.<a class="code hl_function" href="classripple_1_1Asset.html#a09d7cb36a7e8da2f4471cd947a07672c">native</a>() || asset.<a class="code hl_function" href="classripple_1_1Asset.html#af57f2647e425e58da9f4acf919843480">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>(), amount, offset, roundUp);</div>
|
|
<div class="line"><a id="l01672" name="l01672"></a><span class="lineno"> 1672</span> </div>
|
|
<div class="line"><a id="l01673" name="l01673"></a><span class="lineno"> 1673</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> result = [&]() {</div>
|
|
<div class="line"><a id="l01674" name="l01674"></a><span class="lineno"> 1674</span> <span class="comment">// If appropriate, tell Number the rounding mode we are using.</span></div>
|
|
<div class="line"><a id="l01675" name="l01675"></a><span class="lineno"> 1675</span> <span class="comment">// Note that "roundUp == true" actually means "round away from zero".</span></div>
|
|
<div class="line"><a id="l01676" name="l01676"></a><span class="lineno"> 1676</span> <span class="comment">// Otherwise round toward zero.</span></div>
|
|
<div class="line"><a id="l01677" name="l01677"></a><span class="lineno"> 1677</span> <span class="keyword">using </span>enum <a class="code hl_enumeration" href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534">Number::rounding_mode</a>;</div>
|
|
<div class="line"><a id="l01678" name="l01678"></a><span class="lineno"> 1678</span> MightSaveRound <span class="keyword">const</span> savedRound(</div>
|
|
<div class="line"><a id="l01679" name="l01679"></a><span class="lineno"> 1679</span> roundUp ^ resultNegative ? upward : downward);</div>
|
|
<div class="line"><a id="l01680" name="l01680"></a><span class="lineno"> 1680</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(asset, amount, offset, resultNegative);</div>
|
|
<div class="line"><a id="l01681" name="l01681"></a><span class="lineno"> 1681</span> }();</div>
|
|
<div class="line"><a id="l01682" name="l01682"></a><span class="lineno"> 1682</span> </div>
|
|
<div class="line"><a id="l01683" name="l01683"></a><span class="lineno"> 1683</span> <span class="keywordflow">if</span> (roundUp && !resultNegative && !result)</div>
|
|
<div class="line"><a id="l01684" name="l01684"></a><span class="lineno"> 1684</span> {</div>
|
|
<div class="line"><a id="l01685" name="l01685"></a><span class="lineno"> 1685</span> <span class="keywordflow">if</span> (asset.<a class="code hl_function" href="classripple_1_1Asset.html#a09d7cb36a7e8da2f4471cd947a07672c">native</a>() || asset.<a class="code hl_function" href="classripple_1_1Asset.html#af57f2647e425e58da9f4acf919843480">holds</a><<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>>())</div>
|
|
<div class="line"><a id="l01686" name="l01686"></a><span class="lineno"> 1686</span> {</div>
|
|
<div class="line"><a id="l01687" name="l01687"></a><span class="lineno"> 1687</span> <span class="comment">// return the smallest value above zero</span></div>
|
|
<div class="line"><a id="l01688" name="l01688"></a><span class="lineno"> 1688</span> amount = 1;</div>
|
|
<div class="line"><a id="l01689" name="l01689"></a><span class="lineno"> 1689</span> offset = 0;</div>
|
|
<div class="line"><a id="l01690" name="l01690"></a><span class="lineno"> 1690</span> }</div>
|
|
<div class="line"><a id="l01691" name="l01691"></a><span class="lineno"> 1691</span> <span class="keywordflow">else</span></div>
|
|
<div class="line"><a id="l01692" name="l01692"></a><span class="lineno"> 1692</span> {</div>
|
|
<div class="line"><a id="l01693" name="l01693"></a><span class="lineno"> 1693</span> <span class="comment">// return the smallest value above zero</span></div>
|
|
<div class="line"><a id="l01694" name="l01694"></a><span class="lineno"> 1694</span> amount = <a class="code hl_variable" href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">STAmount::cMinValue</a>;</div>
|
|
<div class="line"><a id="l01695" name="l01695"></a><span class="lineno"> 1695</span> offset = <a class="code hl_variable" href="classripple_1_1STAmount.html#a539c35e311bcd82305e49e1f2948e880">STAmount::cMinOffset</a>;</div>
|
|
<div class="line"><a id="l01696" name="l01696"></a><span class="lineno"> 1696</span> }</div>
|
|
<div class="line"><a id="l01697" name="l01697"></a><span class="lineno"> 1697</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>(asset, amount, offset, resultNegative);</div>
|
|
<div class="line"><a id="l01698" name="l01698"></a><span class="lineno"> 1698</span> }</div>
|
|
<div class="line"><a id="l01699" name="l01699"></a><span class="lineno"> 1699</span> <span class="keywordflow">return</span> result;</div>
|
|
<div class="line"><a id="l01700" name="l01700"></a><span class="lineno"> 1700</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01701" name="l01701"></a><span class="lineno"> 1701</span> </div>
|
|
<div class="line"><a id="l01702" name="l01702"></a><span class="lineno"> 1702</span>STAmount</div>
|
|
<div class="foldopen" id="foldopen01703" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01703" name="l01703"></a><span class="lineno"><a class="line" href="namespaceripple.html#abc53dd05ffa8024fbe0101790a2b78ac"> 1703</a></span><a class="code hl_function" href="namespaceripple.html#abc53dd05ffa8024fbe0101790a2b78ac">divRound</a>(</div>
|
|
<div class="line"><a id="l01704" name="l01704"></a><span class="lineno"> 1704</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& num,</div>
|
|
<div class="line"><a id="l01705" name="l01705"></a><span class="lineno"> 1705</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& den,</div>
|
|
<div class="line"><a id="l01706" name="l01706"></a><span class="lineno"> 1706</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span>& asset,</div>
|
|
<div class="line"><a id="l01707" name="l01707"></a><span class="lineno"> 1707</span> <span class="keywordtype">bool</span> roundUp)</div>
|
|
<div class="line"><a id="l01708" name="l01708"></a><span class="lineno"> 1708</span>{</div>
|
|
<div class="line"><a id="l01709" name="l01709"></a><span class="lineno"> 1709</span> <span class="keywordflow">return</span> divRoundImpl<DontAffectNumberRoundMode>(num, den, asset, roundUp);</div>
|
|
<div class="line"><a id="l01710" name="l01710"></a><span class="lineno"> 1710</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01711" name="l01711"></a><span class="lineno"> 1711</span> </div>
|
|
<div class="line"><a id="l01712" name="l01712"></a><span class="lineno"> 1712</span>STAmount</div>
|
|
<div class="foldopen" id="foldopen01713" data-start="{" data-end="}">
|
|
<div class="line"><a id="l01713" name="l01713"></a><span class="lineno"><a class="line" href="namespaceripple.html#a367db2ac1e6b2c03763f8e43afa3db44"> 1713</a></span><a class="code hl_function" href="namespaceripple.html#a367db2ac1e6b2c03763f8e43afa3db44">divRoundStrict</a>(</div>
|
|
<div class="line"><a id="l01714" name="l01714"></a><span class="lineno"> 1714</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& num,</div>
|
|
<div class="line"><a id="l01715" name="l01715"></a><span class="lineno"> 1715</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>& den,</div>
|
|
<div class="line"><a id="l01716" name="l01716"></a><span class="lineno"> 1716</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span>& asset,</div>
|
|
<div class="line"><a id="l01717" name="l01717"></a><span class="lineno"> 1717</span> <span class="keywordtype">bool</span> roundUp)</div>
|
|
<div class="line"><a id="l01718" name="l01718"></a><span class="lineno"> 1718</span>{</div>
|
|
<div class="line"><a id="l01719" name="l01719"></a><span class="lineno"> 1719</span> <span class="keywordflow">return</span> divRoundImpl<NumberRoundModeGuard>(num, den, asset, roundUp);</div>
|
|
<div class="line"><a id="l01720" name="l01720"></a><span class="lineno"> 1720</span>}</div>
|
|
</div>
|
|
<div class="line"><a id="l01721" name="l01721"></a><span class="lineno"> 1721</span> </div>
|
|
<div class="line"><a id="l01722" name="l01722"></a><span class="lineno"> 1722</span>} <span class="comment">// namespace ripple</span></div>
|
|
<div class="ttc" id="aalgorithm_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/algorithm.html">algorithm</a></div></div>
|
|
<div class="ttc" id="aappend_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/append.html">std::string::append</a></div><div class="ttdeci">T append(T... args)</div></div>
|
|
<div class="ttc" id="abasic_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div></div>
|
|
<div class="ttc" id="abegin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/begin.html">std::string::begin</a></div><div class="ttdeci">T begin(T... args)</div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html"><div class="ttname"><a href="classJson_1_1Value.html">Json::Value</a></div><div class="ttdoc">Represents a JSON value.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8h_source.html#l00130">json_value.h:131</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_a1627eb9d6568d6d0252fa8bb711c0a59"><div class="ttname"><a href="classJson_1_1Value.html#a1627eb9d6568d6d0252fa8bb711c0a59">Json::Value::isArray</a></div><div class="ttdeci">bool isArray() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01115">json_value.cpp:1115</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_a478d6ca4b353199e3b9f91b9cfebc7ba"><div class="ttname"><a href="classJson_1_1Value.html#a478d6ca4b353199e3b9f91b9cfebc7ba">Json::Value::isObjectOrNull</a></div><div class="ttdeci">bool isObjectOrNull() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01133">json_value.cpp:1133</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_a614d635bc248a592593feb322cd15ab8"><div class="ttname"><a href="classJson_1_1Value.html#a614d635bc248a592593feb322cd15ab8">Json::Value::asInt</a></div><div class="ttdeci">Int asInt() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00507">json_value.cpp:507</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_a70920835cd4c4758f565670b4ed8c1d6"><div class="ttname"><a href="classJson_1_1Value.html#a70920835cd4c4758f565670b4ed8c1d6">Json::Value::asAbsUInt</a></div><div class="ttdeci">UInt asAbsUInt() const</div><div class="ttdoc">Correct absolute value from int or unsigned int.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00551">json_value.cpp:551</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_a71e1f82cf1c3eaf969d400dcffb163a6"><div class="ttname"><a href="classJson_1_1Value.html#a71e1f82cf1c3eaf969d400dcffb163a6">Json::Value::isString</a></div><div class="ttdeci">bool isString() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01109">json_value.cpp:1109</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_a74b305583ec3aacf4f9dd06e799dc265"><div class="ttname"><a href="classJson_1_1Value.html#a74b305583ec3aacf4f9dd06e799dc265">Json::Value::asUInt</a></div><div class="ttdeci">UInt asUInt() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00614">json_value.cpp:614</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_a8cf96c0f2a552051fcfc78ffee60e037"><div class="ttname"><a href="classJson_1_1Value.html#a8cf96c0f2a552051fcfc78ffee60e037">Json::Value::isObject</a></div><div class="ttdeci">bool isObject() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01127">json_value.cpp:1127</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_ab0d86bf425efefd03513e8dbfaca317b"><div class="ttname"><a href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">Json::Value::asString</a></div><div class="ttdeci">std::string asString() const</div><div class="ttdoc">Returns the unquoted string value.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00471">json_value.cpp:471</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_abdda463d3269015f883587349726cfbc"><div class="ttname"><a href="classJson_1_1Value.html#abdda463d3269015f883587349726cfbc">Json::Value::isUInt</a></div><div class="ttdeci">bool isUInt() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01085">json_value.cpp:1085</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_abde4070e21e46dc4f8203f66582cb19f"><div class="ttname"><a href="classJson_1_1Value.html#abde4070e21e46dc4f8203f66582cb19f">Json::Value::isNull</a></div><div class="ttdeci">bool isNull() const</div><div class="ttdoc">isNull() tests to see if this field is null.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01067">json_value.cpp:1067</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_abfa90c81f6aee7877bd5fb4c8445994f"><div class="ttname"><a href="classJson_1_1Value.html#abfa90c81f6aee7877bd5fb4c8445994f">Json::Value::isMember</a></div><div class="ttdeci">bool isMember(char const *key) const</div><div class="ttdoc">Return true if the object has a member named key.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01030">json_value.cpp:1030</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_acd7f7ba84f8aba84bce7b742c87ea8d6"><div class="ttname"><a href="classJson_1_1Value.html#acd7f7ba84f8aba84bce7b742c87ea8d6">Json::Value::get</a></div><div class="ttdeci">Value get(UInt index, Value const &defaultValue) const</div><div class="ttdoc">If the array contains at least index+1 elements, returns the element value, otherwise returns default...</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00922">json_value.cpp:922</a></div></div>
|
|
<div class="ttc" id="aclassJson_1_1Value_html_aff51d8b52979ca06cf9d909accd5f695"><div class="ttname"><a href="classJson_1_1Value.html#aff51d8b52979ca06cf9d909accd5f695">Json::Value::isInt</a></div><div class="ttdeci">bool isInt() const</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l01079">json_value.cpp:1079</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Asset_html"><div class="ttname"><a href="classripple_1_1Asset.html">ripple::Asset</a></div><div class="ttdef"><b>Definition</b> <a href="Asset_8h_source.html#l00028">Asset.h:29</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Asset_html_a09d7cb36a7e8da2f4471cd947a07672c"><div class="ttname"><a href="classripple_1_1Asset.html#a09d7cb36a7e8da2f4471cd947a07672c">ripple::Asset::native</a></div><div class="ttdeci">bool native() const</div><div class="ttdef"><b>Definition</b> <a href="Asset_8h_source.html#l00082">Asset.h:82</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Asset_html_a80f16856b37f4ac1b6c30c5c3f01a10e"><div class="ttname"><a href="classripple_1_1Asset.html#a80f16856b37f4ac1b6c30c5c3f01a10e">ripple::Asset::setJson</a></div><div class="ttdeci">void setJson(Json::Value &jv) const</div><div class="ttdef"><b>Definition</b> <a href="Asset_8cpp_source.html#l00031">Asset.cpp:31</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Asset_html_ad01a6377ea4c6c8d14804d0954a49e6f"><div class="ttname"><a href="classripple_1_1Asset.html#ad01a6377ea4c6c8d14804d0954a49e6f">ripple::Asset::get</a></div><div class="ttdeci">constexpr TIss const & get() const</div></div>
|
|
<div class="ttc" id="aclassripple_1_1Asset_html_af57f2647e425e58da9f4acf919843480"><div class="ttname"><a href="classripple_1_1Asset.html#af57f2647e425e58da9f4acf919843480">ripple::Asset::holds</a></div><div class="ttdeci">constexpr bool holds() const</div><div class="ttdef"><b>Definition</b> <a href="Asset_8h_source.html#l00113">Asset.h:113</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Asset_html_af851b082d3b0a834e892819d1ff4dc92"><div class="ttname"><a href="classripple_1_1Asset.html#af851b082d3b0a834e892819d1ff4dc92">ripple::Asset::getText</a></div><div class="ttdeci">std::string getText() const</div><div class="ttdef"><b>Definition</b> <a href="Asset_8cpp_source.html#l00025">Asset.cpp:25</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1IOUAmount_html"><div class="ttname"><a href="classripple_1_1IOUAmount.html">ripple::IOUAmount</a></div><div class="ttdoc">Floating point representation of amounts with high dynamic range.</div><div class="ttdef"><b>Definition</b> <a href="IOUAmount_8h_source.html#l00025">IOUAmount.h:27</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1IOUAmount_html_a4123b52991469e91f146e23382f49d6c"><div class="ttname"><a href="classripple_1_1IOUAmount.html#a4123b52991469e91f146e23382f49d6c">ripple::IOUAmount::exponent</a></div><div class="ttdeci">int exponent() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="IOUAmount_8h_source.html#l00153">IOUAmount.h:153</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1IOUAmount_html_a7569b6462cf1abb6018ccfbe8428bfab"><div class="ttname"><a href="classripple_1_1IOUAmount.html#a7569b6462cf1abb6018ccfbe8428bfab">ripple::IOUAmount::mantissa</a></div><div class="ttdeci">std::int64_t mantissa() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="IOUAmount_8h_source.html#l00159">IOUAmount.h:159</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Issue_html"><div class="ttname"><a href="classripple_1_1Issue.html">ripple::Issue</a></div><div class="ttdoc">A currency issued by an account.</div><div class="ttdef"><b>Definition</b> <a href="Issue_8h_source.html#l00013">Issue.h:14</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Issue_html_a46e4805870b1bad6a8691bed0b8acec8"><div class="ttname"><a href="classripple_1_1Issue.html#a46e4805870b1bad6a8691bed0b8acec8">ripple::Issue::account</a></div><div class="ttdeci">AccountID account</div><div class="ttdef"><b>Definition</b> <a href="Issue_8h_source.html#l00017">Issue.h:17</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Issue_html_a4b723aa4198e4c630e41de06586e2fe7"><div class="ttname"><a href="classripple_1_1Issue.html#a4b723aa4198e4c630e41de06586e2fe7">ripple::Issue::currency</a></div><div class="ttdeci">Currency currency</div><div class="ttdef"><b>Definition</b> <a href="Issue_8h_source.html#l00016">Issue.h:16</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Issue_html_a8615e07409164d6d0a8084879ad7bc8c"><div class="ttname"><a href="classripple_1_1Issue.html#a8615e07409164d6d0a8084879ad7bc8c">ripple::Issue::native</a></div><div class="ttdeci">bool native() const</div><div class="ttdef"><b>Definition</b> <a href="Issue_8cpp_source.html#l00047">Issue.cpp:47</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1MPTAmount_html"><div class="ttname"><a href="classripple_1_1MPTAmount.html">ripple::MPTAmount</a></div><div class="ttdef"><b>Definition</b> <a href="MPTAmount_8h_source.html#l00017">MPTAmount.h:21</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1MPTAmount_html_a01eca3dd7e5f6b325ea7fc5fc7230f89"><div class="ttname"><a href="classripple_1_1MPTAmount.html#a01eca3dd7e5f6b325ea7fc5fc7230f89">ripple::MPTAmount::value</a></div><div class="ttdeci">constexpr value_type value() const</div><div class="ttdoc">Returns the underlying value.</div><div class="ttdef"><b>Definition</b> <a href="MPTAmount_8h_source.html#l00114">MPTAmount.h:114</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1MPTIssue_html"><div class="ttname"><a href="classripple_1_1MPTIssue.html">ripple::MPTIssue</a></div><div class="ttdef"><b>Definition</b> <a href="MPTIssue_8h_source.html#l00013">MPTIssue.h:14</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1MPTIssue_html_ad6cbfdbce5a5d92e1536fc9835b54757"><div class="ttname"><a href="classripple_1_1MPTIssue.html#ad6cbfdbce5a5d92e1536fc9835b54757">ripple::MPTIssue::getMptID</a></div><div class="ttdeci">constexpr MPTID const & getMptID() const</div><div class="ttdef"><b>Definition</b> <a href="MPTIssue_8h_source.html#l00027">MPTIssue.h:27</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Number_html"><div class="ttname"><a href="classripple_1_1Number.html">ripple::Number</a></div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00016">Number.h:17</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Number_html_a33e3d8e7a95979bd1eb22c59703c8534"><div class="ttname"><a href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534">ripple::Number::rounding_mode</a></div><div class="ttdeci">rounding_mode</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00177">Number.h:177</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Number_html_a33e3d8e7a95979bd1eb22c59703c8534afed3119e1980867324d399f42cbf548d"><div class="ttname"><a href="classripple_1_1Number.html#a33e3d8e7a95979bd1eb22c59703c8534afed3119e1980867324d399f42cbf548d">ripple::Number::towards_zero</a></div><div class="ttdeci">@ towards_zero</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00177">Number.h:177</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1SField_html"><div class="ttname"><a href="classripple_1_1SField.html">ripple::SField</a></div><div class="ttdoc">Identifies fields.</div><div class="ttdef"><b>Definition</b> <a href="SField_8h_source.html#l00126">SField.h:127</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html"><div class="ttname"><a href="classripple_1_1STAmount.html">ripple::STAmount</a></div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00030">STAmount.h:31</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a003e773c6fd61536760b0efc262e9725"><div class="ttname"><a href="classripple_1_1STAmount.html#a003e773c6fd61536760b0efc262e9725">ripple::STAmount::holds</a></div><div class="ttdeci">constexpr bool holds() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00446">STAmount.h:446</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a094bda660d23e258021a2c63112ebc9a"><div class="ttname"><a href="classripple_1_1STAmount.html#a094bda660d23e258021a2c63112ebc9a">ripple::STAmount::iou</a></div><div class="ttdeci">IOUAmount iou() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00280">STAmount.cpp:280</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a104f16b3dcb68a0b317788706c347809"><div class="ttname"><a href="classripple_1_1STAmount.html#a104f16b3dcb68a0b317788706c347809">ripple::STAmount::canonicalize</a></div><div class="ttdeci">void canonicalize()</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00831">STAmount.cpp:831</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a181a52a4cdeca099d04a31ec43123388"><div class="ttname"><a href="classripple_1_1STAmount.html#a181a52a4cdeca099d04a31ec43123388">ripple::STAmount::getJson</a></div><div class="ttdeci">Json::Value getJson(JsonOptions=JsonOptions::none) const override</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00753">STAmount.cpp:753</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a20c85933442c2eacf51abe2b3bf66f41"><div class="ttname"><a href="classripple_1_1STAmount.html#a20c85933442c2eacf51abe2b3bf66f41">ripple::STAmount::mIsNegative</a></div><div class="ttdeci">bool mIsNegative</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00041">STAmount.h:41</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a251693eb2dea7c8f517428e9baf5afb1"><div class="ttname"><a href="classripple_1_1STAmount.html#a251693eb2dea7c8f517428e9baf5afb1">ripple::STAmount::cMaxNativeN</a></div><div class="ttdeci">static std::uint64_t const cMaxNativeN</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00055">STAmount.h:55</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a26e41013034a7a5a484c7727fdaadbba"><div class="ttname"><a href="classripple_1_1STAmount.html#a26e41013034a7a5a484c7727fdaadbba">ripple::STAmount::operator=</a></div><div class="ttdeci">STAmount & operator=(beast::Zero)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00521">STAmount.h:521</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a2885d73708e1b809f31a46ffaea5ad7f"><div class="ttname"><a href="classripple_1_1STAmount.html#a2885d73708e1b809f31a46ffaea5ad7f">ripple::STAmount::exponent</a></div><div class="ttdeci">int exponent() const noexcept</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_1STAmount_html_a359188da6f9563edb159e0651f6ccf6e"><div class="ttname"><a href="classripple_1_1STAmount.html#a359188da6f9563edb159e0651f6ccf6e">ripple::STAmount::move</a></div><div class="ttdeci">STBase * move(std::size_t n, void *buf) override</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00253">STAmount.cpp:253</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a4546803abe4c5e3dabc9545f292cdafc"><div class="ttname"><a href="classripple_1_1STAmount.html#a4546803abe4c5e3dabc9545f292cdafc">ripple::STAmount::mAsset</a></div><div class="ttdeci">Asset mAsset</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00038">STAmount.h:38</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a47d741e2043946647600882e7d8fe111"><div class="ttname"><a href="classripple_1_1STAmount.html#a47d741e2043946647600882e7d8fe111">ripple::STAmount::asset</a></div><div class="ttdeci">Asset const & asset() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00464">STAmount.h:464</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a4d03d1d0fab2d8e6c43a6bb4b2d52160"><div class="ttname"><a href="classripple_1_1STAmount.html#a4d03d1d0fab2d8e6c43a6bb4b2d52160">ripple::STAmount::cPositive</a></div><div class="ttdeci">static std::uint64_t const cPositive</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00057">STAmount.h:57</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a4faedb8cf3aa230868cc0ecd3b0da6d6"><div class="ttname"><a href="classripple_1_1STAmount.html#a4faedb8cf3aa230868cc0ecd3b0da6d6">ripple::STAmount::get</a></div><div class="ttdeci">constexpr TIss const & get() const</div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a5392e4fd5eef1038f40b1d260b7ad1ae"><div class="ttname"><a href="classripple_1_1STAmount.html#a5392e4fd5eef1038f40b1d260b7ad1ae">ripple::STAmount::cMaxOffset</a></div><div class="ttdeci">static int const cMaxOffset</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00047">STAmount.h:47</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a539c35e311bcd82305e49e1f2948e880"><div class="ttname"><a href="classripple_1_1STAmount.html#a539c35e311bcd82305e49e1f2948e880">ripple::STAmount::cMinOffset</a></div><div class="ttdeci">static int const cMinOffset</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00046">STAmount.h:46</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a5736362e5b3e1b55e9f07ce75643190e"><div class="ttname"><a href="classripple_1_1STAmount.html#a5736362e5b3e1b55e9f07ce75643190e">ripple::STAmount::operator+=</a></div><div class="ttdeci">STAmount & operator+=(STAmount const &)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00331">STAmount.cpp:331</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a68a24f9a1727cda832e0ddcc8868b197"><div class="ttname"><a href="classripple_1_1STAmount.html#a68a24f9a1727cda832e0ddcc8868b197">ripple::STAmount::cMinValue</a></div><div class="ttdeci">static std::uint64_t const cMinValue</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00050">STAmount.h:50</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a6a24e9e13e8aaaabf693f101c1a8e21b"><div class="ttname"><a href="classripple_1_1STAmount.html#a6a24e9e13e8aaaabf693f101c1a8e21b">ripple::STAmount::construct</a></div><div class="ttdeci">static std::unique_ptr< STAmount > construct(SerialIter &, SField const &name)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00241">STAmount.cpp:241</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a6aef86da93fd4fba3359c356a3222921"><div class="ttname"><a href="classripple_1_1STAmount.html#a6aef86da93fd4fba3359c356a3222921">ripple::STAmount::setIssue</a></div><div class="ttdeci">void setIssue(Asset const &asset)</div><div class="ttdoc">Set the Issue for this amount.</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00429">STAmount.cpp:429</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a6c2ca92e9c91e2a34493d61e02d79ebf"><div class="ttname"><a href="classripple_1_1STAmount.html#a6c2ca92e9c91e2a34493d61e02d79ebf">ripple::STAmount::xrp</a></div><div class="ttdeci">XRPAmount xrp() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00264">STAmount.cpp:264</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a75dd101f324f37e45ae0d1e5decd8f9a"><div class="ttname"><a href="classripple_1_1STAmount.html#a75dd101f324f37e45ae0d1e5decd8f9a">ripple::STAmount::setJson</a></div><div class="ttdeci">void setJson(Json::Value &) const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00624">STAmount.cpp:624</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a78eb39e1724fd6263bd688f055ce8028"><div class="ttname"><a href="classripple_1_1STAmount.html#a78eb39e1724fd6263bd688f055ce8028">ripple::STAmount::isDefault</a></div><div class="ttdeci">bool isDefault() const override</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00807">STAmount.cpp:807</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a796e10f39a5856f195555461d5949fdd"><div class="ttname"><a href="classripple_1_1STAmount.html#a796e10f39a5856f195555461d5949fdd">ripple::STAmount::operator-=</a></div><div class="ttdeci">STAmount & operator-=(STAmount const &)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00338">STAmount.cpp:338</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a7bf29283f8f8748b8fb5624197a4140f"><div class="ttname"><a href="classripple_1_1STAmount.html#a7bf29283f8f8748b8fb5624197a4140f">ripple::STAmount::add</a></div><div class="ttdeci">void add(Serializer &s) const override</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00761">STAmount.cpp:761</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a7f9cd54ff0ad45b8fe5a17d4b48378d4"><div class="ttname"><a href="classripple_1_1STAmount.html#a7f9cd54ff0ad45b8fe5a17d4b48378d4">ripple::STAmount::cIssuedCurrency</a></div><div class="ttdeci">static std::uint64_t const cIssuedCurrency</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00056">STAmount.h:56</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a83d035107b7e2038db4f4fea771f0fc4"><div class="ttname"><a href="classripple_1_1STAmount.html#a83d035107b7e2038db4f4fea771f0fc4">ripple::STAmount::cMPToken</a></div><div class="ttdeci">static std::uint64_t const cMPToken</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00058">STAmount.h:58</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a86b562f0d5185fedf5a71756dc0be19f"><div class="ttname"><a href="classripple_1_1STAmount.html#a86b562f0d5185fedf5a71756dc0be19f">ripple::STAmount::getSType</a></div><div class="ttdeci">SerializedTypeID getSType() const override</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00648">STAmount.cpp:648</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_a9cb0ba902ff56a3657d4e710a618fa16"><div class="ttname"><a href="classripple_1_1STAmount.html#a9cb0ba902ff56a3657d4e710a618fa16">ripple::STAmount::mValue</a></div><div class="ttdeci">mantissa_type mValue</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00039">STAmount.h:39</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_aa0f01e6eacfb24a14b792ab8bd288de3"><div class="ttname"><a href="classripple_1_1STAmount.html#aa0f01e6eacfb24a14b792ab8bd288de3">ripple::STAmount::cMaxValue</a></div><div class="ttdeci">static std::uint64_t const cMaxValue</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00051">STAmount.h:51</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_aa40b0743a468d95eeaaf4914ea555866"><div class="ttname"><a href="classripple_1_1STAmount.html#aa40b0743a468d95eeaaf4914ea555866">ripple::STAmount::value</a></div><div class="ttdeci">STAmount const & value() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00575">STAmount.h:575</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_aa65826cb148b5d15412fceecca5ae47c"><div class="ttname"><a href="classripple_1_1STAmount.html#aa65826cb148b5d15412fceecca5ae47c">ripple::STAmount::getText</a></div><div class="ttdeci">std::string getText() const override</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00664">STAmount.cpp:664</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_aa830654962840253139aa891659f7551"><div class="ttname"><a href="classripple_1_1STAmount.html#aa830654962840253139aa891659f7551">ripple::STAmount::negative</a></div><div class="ttdeci">bool negative() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00452">STAmount.h:452</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_aac6d573d4015571671dd2c38c8620022"><div class="ttname"><a href="classripple_1_1STAmount.html#aac6d573d4015571671dd2c38c8620022">ripple::STAmount::isEquivalent</a></div><div class="ttdeci">bool isEquivalent(STBase const &t) const override</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00800">STAmount.cpp:800</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_abf159f0fdfeb655c111a50b303a0d774"><div class="ttname"><a href="classripple_1_1STAmount.html#abf159f0fdfeb655c111a50b303a0d774">ripple::STAmount::copy</a></div><div class="ttdeci">STBase * copy(std::size_t n, void *buf) const override</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00247">STAmount.cpp:247</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_ac22cc0520139c8d6bfa612d8ed3ef069"><div class="ttname"><a href="classripple_1_1STAmount.html#ac22cc0520139c8d6bfa612d8ed3ef069">ripple::STAmount::mpt</a></div><div class="ttdeci">MPTAmount mpt() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00295">STAmount.cpp:295</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_ac489a5d21c87eeadae5e63c8c9083fd6"><div class="ttname"><a href="classripple_1_1STAmount.html#ac489a5d21c87eeadae5e63c8c9083fd6">ripple::STAmount::cValueMask</a></div><div class="ttdeci">static std::uint64_t const cValueMask</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00059">STAmount.h:59</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_ac52c9bfa39b16a0f06bf42985aa59ce4"><div class="ttname"><a href="classripple_1_1STAmount.html#ac52c9bfa39b16a0f06bf42985aa59ce4">ripple::STAmount::mOffset</a></div><div class="ttdeci">exponent_type mOffset</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00040">STAmount.h:40</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_acab76380a95d902071fd26ab3425bbe5"><div class="ttname"><a href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">ripple::STAmount::issue</a></div><div class="ttdeci">Issue const & issue() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00477">STAmount.h:477</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_ae252d978fddac8a365f6fc67556843f2"><div class="ttname"><a href="classripple_1_1STAmount.html#ae252d978fddac8a365f6fc67556843f2">ripple::STAmount::set</a></div><div class="ttdeci">void set(std::int64_t v)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00948">STAmount.cpp:948</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_ae7f9ce5e872fd96b92b0cedbf8f09f81"><div class="ttname"><a href="classripple_1_1STAmount.html#ae7f9ce5e872fd96b92b0cedbf8f09f81">ripple::STAmount::mantissa</a></div><div class="ttdeci">std::uint64_t mantissa() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00458">STAmount.h:458</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_aee39db45aa65eddca7002ad9bf3e7877"><div class="ttname"><a href="classripple_1_1STAmount.html#aee39db45aa65eddca7002ad9bf3e7877">ripple::STAmount::getFullText</a></div><div class="ttdeci">std::string getFullText() const override</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00654">STAmount.cpp:654</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_aeeeb64eb7e4a2fbff4d37a6557802bb9"><div class="ttname"><a href="classripple_1_1STAmount.html#aeeeb64eb7e4a2fbff4d37a6557802bb9">ripple::STAmount::STAmount</a></div><div class="ttdeci">STAmount(SerialIter &sit, SField const &name)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00101">STAmount.cpp:101</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_af3a02d7e9cd0b11509a90e0e6980bd64"><div class="ttname"><a href="classripple_1_1STAmount.html#af3a02d7e9cd0b11509a90e0e6980bd64">ripple::STAmount::native</a></div><div class="ttdeci">bool native() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00439">STAmount.h:439</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STAmount_html_afcd276e76921eac7cb0aa914bf434f9a"><div class="ttname"><a href="classripple_1_1STAmount.html#afcd276e76921eac7cb0aa914bf434f9a">ripple::STAmount::uRateOne</a></div><div class="ttdeci">static std::uint64_t const uRateOne</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00061">STAmount.h:61</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STBase_html"><div class="ttname"><a href="classripple_1_1STBase.html">ripple::STBase</a></div><div class="ttdoc">A type which can be exported to a well known binary format.</div><div class="ttdef"><b>Definition</b> <a href="STBase_8h_source.html#l00115">STBase.h:116</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STBase_html_a48097bca334d2f32a1d7861b59ae2e30"><div class="ttname"><a href="classripple_1_1STBase.html#a48097bca334d2f32a1d7861b59ae2e30">ripple::STBase::getFName</a></div><div class="ttdeci">SField const & getFName() const</div><div class="ttdef"><b>Definition</b> <a href="STBase_8cpp_source.html#l00124">STBase.cpp:124</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1STBase_html_a84fe46ac92fe704869cc6d64c49dd1ba"><div class="ttname"><a href="classripple_1_1STBase.html#a84fe46ac92fe704869cc6d64c49dd1ba">ripple::STBase::emplace</a></div><div class="ttdeci">static STBase * emplace(std::size_t n, void *buf, T &&val)</div><div class="ttdef"><b>Definition</b> <a href="STBase_8h_source.html#l00214">STBase.h:214</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1SerialIter_html"><div class="ttname"><a href="classripple_1_1SerialIter.html">ripple::SerialIter</a></div><div class="ttdef"><b>Definition</b> <a href="Serializer_8h_source.html#l00326">Serializer.h:327</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1SerialIter_html_a29c9a480919f3d09b48fe49ffdd69823"><div class="ttname"><a href="classripple_1_1SerialIter.html#a29c9a480919f3d09b48fe49ffdd69823">ripple::SerialIter::get192</a></div><div class="ttdeci">uint192 get192()</div><div class="ttdef"><b>Definition</b> <a href="Serializer_8h_source.html#l00396">Serializer.h:396</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1SerialIter_html_a2fe5dd5ca6e8bf2f927b1ddefeb3430b"><div class="ttname"><a href="classripple_1_1SerialIter.html#a2fe5dd5ca6e8bf2f927b1ddefeb3430b">ripple::SerialIter::get160</a></div><div class="ttdeci">uint160 get160()</div><div class="ttdef"><b>Definition</b> <a href="Serializer_8h_source.html#l00390">Serializer.h:390</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1SerialIter_html_abd5f83aa8b3943ca9cbfa005aaa33734"><div class="ttname"><a href="classripple_1_1SerialIter.html#abd5f83aa8b3943ca9cbfa005aaa33734">ripple::SerialIter::get8</a></div><div class="ttdeci">unsigned char get8()</div><div class="ttdef"><b>Definition</b> <a href="Serializer_8cpp_source.html#l00340">Serializer.cpp:340</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1SerialIter_html_af720e6387dcaba61af9c9c724e33097e"><div class="ttname"><a href="classripple_1_1SerialIter.html#af720e6387dcaba61af9c9c724e33097e">ripple::SerialIter::get64</a></div><div class="ttdeci">std::uint64_t get64()</div><div class="ttdef"><b>Definition</b> <a href="Serializer_8cpp_source.html#l00377">Serializer.cpp:377</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#l00021">Serializer.h:22</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Serializer_html_a58e3966f7e8a8ffd7c9576f401cf8ab0"><div class="ttname"><a href="classripple_1_1Serializer.html#a58e3966f7e8a8ffd7c9576f401cf8ab0">ripple::Serializer::add64</a></div><div class="ttdeci">int add64(T i)</div><div class="ttdef"><b>Definition</b> <a href="Serializer_8h_source.html#l00093">Serializer.h:93</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Serializer_html_a96daec54ca0c8ec7f6e7e683e9abbe0e"><div class="ttname"><a href="classripple_1_1Serializer.html#a96daec54ca0c8ec7f6e7e683e9abbe0e">ripple::Serializer::addBitString</a></div><div class="ttdeci">int addBitString(base_uint< Bits, Tag > const &v)</div><div class="ttdef"><b>Definition</b> <a href="Serializer_8h_source.html#l00112">Serializer.h:112</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1Serializer_html_ab6de064efbc9b2efaeff2b069a02b644"><div class="ttname"><a href="classripple_1_1Serializer.html#ab6de064efbc9b2efaeff2b069a02b644">ripple::Serializer::add8</a></div><div class="ttdeci">int add8(unsigned char i)</div><div class="ttdef"><b>Definition</b> <a href="Serializer_8cpp_source.html#l00143">Serializer.cpp:143</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1XRPAmount_html"><div class="ttname"><a href="classripple_1_1XRPAmount.html">ripple::XRPAmount</a></div><div class="ttdef"><b>Definition</b> <a href="XRPAmount_8h_source.html#l00020">XRPAmount.h:24</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1XRPAmount_html_a8a65b5528d6021159c5b8772aa86cfc1"><div class="ttname"><a href="classripple_1_1XRPAmount.html#a8a65b5528d6021159c5b8772aa86cfc1">ripple::XRPAmount::drops</a></div><div class="ttdeci">constexpr value_type drops() const</div><div class="ttdoc">Returns the number of drops.</div><div class="ttdef"><b>Definition</b> <a href="XRPAmount_8h_source.html#l00158">XRPAmount.h:158</a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1base__uint_html"><div class="ttname"><a href="classripple_1_1base__uint.html">ripple::base_uint< 192 ></a></div></div>
|
|
<div class="ttc" id="aclassripple_1_1base__uint_html_a698d3fd0c0f0155995c87d2f48ac90d5"><div class="ttname"><a href="classripple_1_1base__uint.html#a698d3fd0c0f0155995c87d2f48ac90d5">ripple::base_uint::parseHex</a></div><div class="ttdeci">constexpr bool parseHex(std::string_view sv)</div><div class="ttdoc">Parse a hex string into a base_uint.</div><div class="ttdef"><b>Definition</b> <a href="base__uint_8h_source.html#l00484">base_uint.h:484</a></div></div>
|
|
<div class="ttc" id="acstddef_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/cstddef.html">cstddef</a></div></div>
|
|
<div class="ttc" id="acstdint_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/cstdint.html">cstdint</a></div></div>
|
|
<div class="ttc" id="adistance_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/iterator/distance.html">std::distance</a></div><div class="ttdeci">T distance(T... args)</div></div>
|
|
<div class="ttc" id="aempty_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/empty.html">std::string::empty</a></div><div class="ttdeci">T empty(T... args)</div></div>
|
|
<div class="ttc" id="aend_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/end.html">std::string::end</a></div><div class="ttdeci">T end(T... args)</div></div>
|
|
<div class="ttc" id="aexception_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/exception.html">exception</a></div></div>
|
|
<div class="ttc" id="afind_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find_if</a></div><div class="ttdeci">T find_if(T... args)</div></div>
|
|
<div class="ttc" id="ainteger_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint64_t</a></div></div>
|
|
<div class="ttc" id="ais_same_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/is_same.html">std::is_same_v</a></div><div class="ttdeci">T is_same_v</div></div>
|
|
<div class="ttc" id="aiterator_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/iterator.html">iterator</a></div></div>
|
|
<div class="ttc" id="alimits_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/limits.html">limits</a></div></div>
|
|
<div class="ttc" id="amake_reverse_iterator_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/iterator/make_reverse_iterator.html">std::make_reverse_iterator</a></div><div class="ttdeci">T make_reverse_iterator(T... args)</div></div>
|
|
<div class="ttc" id="amax_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/numeric_limits/max.html">std::numeric_limits::max</a></div><div class="ttdeci">T max(T... args)</div></div>
|
|
<div class="ttc" id="amemory_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/memory.html">memory</a></div></div>
|
|
<div class="ttc" id="amin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/numeric_limits/min.html">std::numeric_limits::min</a></div><div class="ttdeci">T min(T... args)</div></div>
|
|
<div class="ttc" id="anamespaceJson_html_a7d654b75c16a57007925868e38212b4ea7d9899633b4409bd3fc107e6737f8391"><div class="ttname"><a href="namespaceJson.html#a7d654b75c16a57007925868e38212b4ea7d9899633b4409bd3fc107e6737f8391">Json::nullValue</a></div><div class="ttdeci">@ nullValue</div><div class="ttdoc">'null' value</div><div class="ttdef"><b>Definition</b> <a href="json__value_8h_source.html#l00020">json_value.h:20</a></div></div>
|
|
<div class="ttc" id="anamespaceJson_html_a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6"><div class="ttname"><a href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a></div><div class="ttdeci">@ objectValue</div><div class="ttdoc">object value (collection of name/value pairs).</div><div class="ttdef"><b>Definition</b> <a href="json__value_8h_source.html#l00028">json_value.h:27</a></div></div>
|
|
<div class="ttc" id="anamespaceJson_html_ab1488c31a37eea2d37f36a0961372572"><div class="ttname"><a href="namespaceJson.html#ab1488c31a37eea2d37f36a0961372572">Json::UInt</a></div><div class="ttdeci">unsigned int UInt</div><div class="ttdef"><b>Definition</b> <a href="json__forwards_8h_source.html#l00008">json_forwards.h:8</a></div></div>
|
|
<div class="ttc" id="anamespacebeast_html"><div class="ttname"><a href="namespacebeast.html">beast</a></div><div class="ttdef"><b>Definition</b> <a href="base__uint_8h_source.html#l00653">base_uint.h:653</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_1_1credentials_html_ab0cd6a3f76fa9f09c5f1c2d6fffc11e0"><div class="ttname"><a href="namespaceripple_1_1credentials.html#ab0cd6a3f76fa9f09c5f1c2d6fffc11e0">ripple::credentials::valid</a></div><div class="ttdeci">TER valid(STTx const &tx, ReadView const &view, AccountID const &src, beast::Journal j)</div><div class="ttdef"><b>Definition</b> <a href="CredentialHelpers_8cpp_source.html#l00137">CredentialHelpers.cpp:137</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html"><div class="ttname"><a href="namespaceripple.html">ripple</a></div><div class="ttdoc">Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.</div><div class="ttdef"><b>Definition</b> <a href="algorithm_8h_source.html#l00006">algorithm.h:6</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a02be1da6bd3d611ea7a48b208b060b6c"><div class="ttname"><a href="namespaceripple.html#a02be1da6bd3d611ea7a48b208b060b6c">ripple::xrpIssue</a></div><div class="ttdeci">Issue const & xrpIssue()</div><div class="ttdoc">Returns an asset specifier that represents XRP.</div><div class="ttdef"><b>Definition</b> <a href="Issue_8h_source.html#l00096">Issue.h:96</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a07a687e3a16e605ec3b4ecfd29bb6232"><div class="ttname"><a href="namespaceripple.html#a07a687e3a16e605ec3b4ecfd29bb6232">ripple::canonicalizeRoundStrict</a></div><div class="ttdeci">static void canonicalizeRoundStrict(bool native, std::uint64_t &value, int &offset, bool roundUp)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01423">STAmount.cpp:1423</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a0ad557cc32ca87dcea19af8e30c63c6a"><div class="ttname"><a href="namespaceripple.html#a0ad557cc32ca87dcea19af8e30c63c6a">ripple::divide</a></div><div class="ttdeci">STAmount divide(STAmount const &amount, Rate const &rate)</div><div class="ttdef"><b>Definition</b> <a href="Rate2_8cpp_source.html#l00074">Rate2.cpp:74</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a0e5b39a497ac693654e5a85c1209216e"><div class="ttname"><a href="namespaceripple.html#a0e5b39a497ac693654e5a85c1209216e">ripple::partsFromString</a></div><div class="ttdeci">NumberParts partsFromString(std::string const &number)</div><div class="ttdef"><b>Definition</b> <a href="STNumber_8cpp_source.html#l00104">STNumber.cpp:104</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a1330e8eb921148a60725bcfc77d0a093"><div class="ttname"><a href="namespaceripple.html#a1330e8eb921148a60725bcfc77d0a093">ripple::one</a></div><div class="ttdeci">constexpr Number one</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00156">Number.cpp:156</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a20d30277b9c78756b3d14493055a307c"><div class="ttname"><a href="namespaceripple.html#a20d30277b9c78756b3d14493055a307c">ripple::isXRP</a></div><div class="ttdeci">bool isXRP(AccountID const &c)</div><div class="ttdef"><b>Definition</b> <a href="AccountID_8h_source.html#l00071">AccountID.h:71</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a2f2f22330db2c109956e5c4e6be0249c"><div class="ttname"><a href="namespaceripple.html#a2f2f22330db2c109956e5c4e6be0249c">ripple::canSubtract</a></div><div class="ttdeci">bool canSubtract(STAmount const &amt1, STAmount const &amt2)</div><div class="ttdoc">Determines if it is safe to subtract one STAmount from another.</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00566">STAmount.cpp:566</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a300af819bde0c7c49207d10cd787e62e"><div class="ttname"><a href="namespaceripple.html#a300af819bde0c7c49207d10cd787e62e">ripple::to_issuer</a></div><div class="ttdeci">bool to_issuer(AccountID &, std::string const &)</div><div class="ttdoc">Convert hex or base58 string to AccountID.</div><div class="ttdef"><b>Definition</b> <a href="AccountID_8cpp_source.html#l00173">AccountID.cpp:173</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a30c2e63999ddc369a258a7c2766e968f"><div class="ttname"><a href="namespaceripple.html#a30c2e63999ddc369a258a7c2766e968f">ripple::areComparable</a></div><div class="ttdeci">static bool areComparable(STAmount const &v1, STAmount const &v2)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00091">STAmount.cpp:91</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a367db2ac1e6b2c03763f8e43afa3db44"><div class="ttname"><a href="namespaceripple.html#a367db2ac1e6b2c03763f8e43afa3db44">ripple::divRoundStrict</a></div><div class="ttdeci">STAmount divRoundStrict(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01713">STAmount.cpp:1713</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a3c25b36b542a985c4f2d344df683a2dd"><div class="ttname"><a href="namespaceripple.html#a3c25b36b542a985c4f2d344df683a2dd">ripple::amountFromJson</a></div><div class="ttdeci">STAmount amountFromJson(SField const &name, Json::Value const &v)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00987">STAmount.cpp:987</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a3c48650a4989da7655d4bedcbf6acffe"><div class="ttname"><a href="namespaceripple.html#a3c48650a4989da7655d4bedcbf6acffe">ripple::canAdd</a></div><div class="ttdeci">bool canAdd(STAmount const &amt1, STAmount const &amt2)</div><div class="ttdoc">Safely checks if two STAmount values can be added without overflow, underflow, or precision loss.</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00486">STAmount.cpp:486</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a3e7e3f29aef85bcca06706da54e950fc"><div class="ttname"><a href="namespaceripple.html#a3e7e3f29aef85bcca06706da54e950fc">ripple::SerializedTypeID</a></div><div class="ttdeci">SerializedTypeID</div><div class="ttdef"><b>Definition</b> <a href="SField_8h_source.html#l00091">SField.h:91</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a3fe32b2904420f2f653103f040ca488c"><div class="ttname"><a href="namespaceripple.html#a3fe32b2904420f2f653103f040ca488c">ripple::tenTo17</a></div><div class="ttdeci">static std::uint64_t const tenTo17</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00054">STAmount.cpp:54</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a47fbaf29602fea01a79eb987cc21371c"><div class="ttname"><a href="namespaceripple.html#a47fbaf29602fea01a79eb987cc21371c">ripple::maxMPTokenAmount</a></div><div class="ttdeci">std::uint64_t constexpr maxMPTokenAmount</div><div class="ttdoc">The maximum amount of MPTokenIssuance.</div><div class="ttdef"><b>Definition</b> <a href="Protocol_8h_source.html#l00100">Protocol.h:100</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a4afbbae0910419307600d5545004e5be"><div class="ttname"><a href="namespaceripple.html#a4afbbae0910419307600d5545004e5be">ripple::amountFromQuality</a></div><div class="ttdeci">STAmount amountFromQuality(std::uint64_t rate)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00965">STAmount.cpp:965</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a4ba7590b028e34be0d0a8f0777ec3253"><div class="ttname"><a href="namespaceripple.html#a4ba7590b028e34be0d0a8f0777ec3253">ripple::systemCurrencyCode</a></div><div class="ttdeci">static std::string const & systemCurrencyCode()</div><div class="ttdef"><b>Definition</b> <a href="SystemParameters_8h_source.html#l00044">SystemParameters.h:44</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a53f80df10254751781250aa20704e98f"><div class="ttname"><a href="namespaceripple.html#a53f80df10254751781250aa20704e98f">ripple::set</a></div><div class="ttdeci">bool set(T &target, std::string const &name, Section const &section)</div><div class="ttdoc">Set a value from a configuration Section If the named value is not found or doesn't parse as a T,...</div><div class="ttdef"><b>Definition</b> <a href="BasicConfig_8h_source.html#l00296">BasicConfig.h:296</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a5ad1aaa8fb2bf36539e8817488a2076f"><div class="ttname"><a href="namespaceripple.html#a5ad1aaa8fb2bf36539e8817488a2076f">ripple::tenTo14m1</a></div><div class="ttdeci">static std::uint64_t const tenTo14m1</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00053">STAmount.cpp:53</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a5adb540ae694e45bca2ad089fff15128"><div class="ttname"><a href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">ripple::multiply</a></div><div class="ttdeci">STAmount multiply(STAmount const &amount, Rate const &rate)</div><div class="ttdef"><b>Definition</b> <a href="Rate2_8cpp_source.html#l00034">Rate2.cpp:34</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a73cc988e7ba5d5ee0fd9db53740917ec"><div class="ttname"><a href="namespaceripple.html#a73cc988e7ba5d5ee0fd9db53740917ec">ripple::getRate</a></div><div class="ttdeci">std::uint64_t getRate(STAmount const &offerOut, STAmount const &offerIn)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00444">STAmount.cpp:444</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a82a40c2d1b4a954d5626d74423af9c4c"><div class="ttname"><a href="namespaceripple.html#a82a40c2d1b4a954d5626d74423af9c4c">ripple::getSNValue</a></div><div class="ttdeci">static std::int64_t getSNValue(STAmount const &amount)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00078">STAmount.cpp:78</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a841eec1048fec16c05561ef0fb40e1b3"><div class="ttname"><a href="namespaceripple.html#a841eec1048fec16c05561ef0fb40e1b3">ripple::validJSONAsset</a></div><div class="ttdeci">bool validJSONAsset(Json::Value const &jv)</div><div class="ttdef"><b>Definition</b> <a href="Asset_8cpp_source.html#l00050">Asset.cpp:50</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a94e13759bd026c8ac305482e17f05adb"><div class="ttname"><a href="namespaceripple.html#a94e13759bd026c8ac305482e17f05adb">ripple::debugLog</a></div><div class="ttdeci">beast::Journal debugLog()</div><div class="ttdoc">Returns a debug journal.</div><div class="ttdef"><b>Definition</b> <a href="Log_8cpp_source.html#l00457">Log.cpp:457</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_a9e3dc59bb58c33f14b3c0d3070b94d98"><div class="ttname"><a href="namespaceripple.html#a9e3dc59bb58c33f14b3c0d3070b94d98">ripple::noIssue</a></div><div class="ttdeci">Issue const & noIssue()</div><div class="ttdoc">Returns an asset specifier that represents no account and currency.</div><div class="ttdef"><b>Definition</b> <a href="Issue_8h_source.html#l00104">Issue.h:104</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_aa188903e7be862775b4591c37dc1a8a6"><div class="ttname"><a href="namespaceripple.html#aa188903e7be862775b4591c37dc1a8a6">ripple::getInt64Value</a></div><div class="ttdeci">static std::int64_t getInt64Value(STAmount const &amount, bool valid, char const *error)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00058">STAmount.cpp:58</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_aa9cb2090c47c4d84b469ae634cdfdc59"><div class="ttname"><a href="namespaceripple.html#aa9cb2090c47c4d84b469ae634cdfdc59">ripple::amountFromJsonNoThrow</a></div><div class="ttdeci">bool amountFromJsonNoThrow(STAmount &result, Json::Value const &jvSource)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01115">STAmount.cpp:1115</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_aabc169489c016c71f6980a121352832e"><div class="ttname"><a href="namespaceripple.html#aabc169489c016c71f6980a121352832e">ripple::getMPTValue</a></div><div class="ttdeci">static std::int64_t getMPTValue(STAmount const &amount)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00084">STAmount.cpp:84</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_ab06a7c4d14d99773c29bcfbd0bf81d34"><div class="ttname"><a href="namespaceripple.html#ab06a7c4d14d99773c29bcfbd0bf81d34">ripple::operator<</a></div><div class="ttdeci">bool operator<(Slice const &lhs, Slice const &rhs) noexcept</div><div class="ttdef"><b>Definition</b> <a href="Slice_8h_source.html#l00203">Slice.h:204</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_abc53dd05ffa8024fbe0101790a2b78ac"><div class="ttname"><a href="namespaceripple.html#abc53dd05ffa8024fbe0101790a2b78ac">ripple::divRound</a></div><div class="ttdeci">STAmount divRound(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01703">STAmount.cpp:1703</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_abfd99ece02b928ee8520192a67595e46"><div class="ttname"><a href="namespaceripple.html#abfd99ece02b928ee8520192a67595e46">ripple::muldiv</a></div><div class="ttdeci">static std::uint64_t muldiv(std::uint64_t multiplier, std::uint64_t multiplicand, std::uint64_t divisor)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01201">STAmount.cpp:1201</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_ac73696ba9cf84191fe3d33d6ef9043c7"><div class="ttname"><a href="namespaceripple.html#ac73696ba9cf84191fe3d33d6ef9043c7">ripple::operator-</a></div><div class="ttdeci">Number operator-(Number const &x, Number const &y)</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00281">Number.h:281</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_ac82a0d6ad7894711d8f33c7c3392d277"><div class="ttname"><a href="namespaceripple.html#ac82a0d6ad7894711d8f33c7c3392d277">ripple::amountFromString</a></div><div class="ttdeci">STAmount amountFromString(Asset const &asset, std::string const &amount)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00977">STAmount.cpp:977</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_ac96824de7714986a7122e5551a2ba470"><div class="ttname"><a href="namespaceripple.html#ac96824de7714986a7122e5551a2ba470">ripple::mulRound</a></div><div class="ttdeci">STAmount mulRound(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01596">STAmount.cpp:1596</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_ac9c72789f495577fbc38a95e993fd2df"><div class="ttname"><a href="namespaceripple.html#ac9c72789f495577fbc38a95e993fd2df">ripple::sfGeneric</a></div><div class="ttdeci">SField const sfGeneric</div></div>
|
|
<div class="ttc" id="anamespaceripple_html_ace0e9e05ea99ff46933e70502b74de95"><div class="ttname"><a href="namespaceripple.html#ace0e9e05ea99ff46933e70502b74de95">ripple::operator+</a></div><div class="ttdeci">constexpr base_uint< Bits, Tag > operator+(base_uint< Bits, Tag > const &a, base_uint< Bits, Tag > const &b)</div><div class="ttdef"><b>Definition</b> <a href="base__uint_8h_source.html#l00603">base_uint.h:603</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_ad71ced27132b476455a57b614a6bc137"><div class="ttname"><a href="namespaceripple.html#ad71ced27132b476455a57b614a6bc137">ripple::mulRoundImpl</a></div><div class="ttdeci">static STAmount mulRoundImpl(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01491">STAmount.cpp:1491</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_adb9995d7c8e8a2aa3d702b73edfa0672"><div class="ttname"><a href="namespaceripple.html#adb9995d7c8e8a2aa3d702b73edfa0672">ripple::operator==</a></div><div class="ttdeci">constexpr bool operator==(base_uint< Bits, Tag > const &lhs, base_uint< Bits, Tag > const &rhs)</div><div class="ttdef"><b>Definition</b> <a href="base__uint_8h_source.html#l00566">base_uint.h:566</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_ade17ab06548b1e0b300cd0ae50717418"><div class="ttname"><a href="namespaceripple.html#ade17ab06548b1e0b300cd0ae50717418">ripple::divRoundImpl</a></div><div class="ttdeci">static STAmount divRoundImpl(STAmount const &num, STAmount const &den, Asset const &asset, bool roundUp)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01621">STAmount.cpp:1621</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_aded0fdc385035a62141ea25eab21d077"><div class="ttname"><a href="namespaceripple.html#aded0fdc385035a62141ea25eab21d077">ripple::mulRoundStrict</a></div><div class="ttdeci">STAmount mulRoundStrict(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01607">STAmount.cpp:1607</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_ae745102449603924823f094157604641"><div class="ttname"><a href="namespaceripple.html#ae745102449603924823f094157604641">ripple::muldiv_round</a></div><div class="ttdeci">static std::uint64_t muldiv_round(std::uint64_t multiplier, std::uint64_t multiplicand, std::uint64_t divisor, std::uint64_t rounding)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01222">STAmount.cpp:1222</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_ae78e6fdf69701c0f0c8952468ee49e96"><div class="ttname"><a href="namespaceripple.html#ae78e6fdf69701c0f0c8952468ee49e96">ripple::tenTo14</a></div><div class="ttdeci">static std::uint64_t const tenTo14</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00052">STAmount.cpp:52</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_afa1f08ba17ac61380c442f9f2fa2e7b4"><div class="ttname"><a href="namespaceripple.html#afa1f08ba17ac61380c442f9f2fa2e7b4">ripple::getSTNumberSwitchover</a></div><div class="ttdeci">bool getSTNumberSwitchover()</div><div class="ttdef"><b>Definition</b> <a href="IOUAmount_8cpp_source.html#l00031">IOUAmount.cpp:31</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_afca83ec321d40b83929b54d5faf9433b"><div class="ttname"><a href="namespaceripple.html#afca83ec321d40b83929b54d5faf9433b">ripple::to_currency</a></div><div class="ttdeci">bool to_currency(Currency &, std::string const &)</div><div class="ttdoc">Tries to convert a string to a Currency, returns true on success.</div><div class="ttdef"><b>Definition</b> <a href="UintTypes_8cpp_source.html#l00065">UintTypes.cpp:65</a></div></div>
|
|
<div class="ttc" id="anamespaceripple_html_afed19a57936c35db382a67f1d58b6884"><div class="ttname"><a href="namespaceripple.html#afed19a57936c35db382a67f1d58b6884">ripple::canonicalizeRound</a></div><div class="ttdeci">static void canonicalizeRound(bool native, std::uint64_t &value, int &offset, bool)</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01384">STAmount.cpp:1384</a></div></div>
|
|
<div class="ttc" id="anumeric_limits_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/numeric_limits.html">std::numeric_limits</a></div></div>
|
|
<div class="ttc" id="areserve_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/reserve.html">std::string::reserve</a></div><div class="ttdeci">T reserve(T... args)</div></div>
|
|
<div class="ttc" id="asize_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">std::string::length</a></div><div class="ttdeci">T length(T... args)</div></div>
|
|
<div class="ttc" id="asize_t_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a></div></div>
|
|
<div class="ttc" id="astdexcept_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/stdexcept.html">stdexcept</a></div></div>
|
|
<div class="ttc" id="astring_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/string.html">string</a></div></div>
|
|
<div class="ttc" id="astructripple_1_1JsonOptions_html"><div class="ttname"><a href="structripple_1_1JsonOptions.html">ripple::JsonOptions</a></div><div class="ttdoc">Note, should be treated as flags that can be | and &.</div><div class="ttdef"><b>Definition</b> <a href="STBase_8h_source.html#l00017">STBase.h:18</a></div></div>
|
|
<div class="ttc" id="astructripple_1_1NumberParts_html"><div class="ttname"><a href="structripple_1_1NumberParts.html">ripple::NumberParts</a></div><div class="ttdef"><b>Definition</b> <a href="STNumber_8h_source.html#l00074">STNumber.h:75</a></div></div>
|
|
<div class="ttc" id="astructripple_1_1NumberParts_html_a06bfc986bb3699e7658f9449fd4afd6d"><div class="ttname"><a href="structripple_1_1NumberParts.html#a06bfc986bb3699e7658f9449fd4afd6d">ripple::NumberParts::exponent</a></div><div class="ttdeci">int exponent</div><div class="ttdef"><b>Definition</b> <a href="STNumber_8h_source.html#l00077">STNumber.h:77</a></div></div>
|
|
<div class="ttc" id="astructripple_1_1NumberParts_html_a5ebc7ad5e7d42a01866590209853c307"><div class="ttname"><a href="structripple_1_1NumberParts.html#a5ebc7ad5e7d42a01866590209853c307">ripple::NumberParts::mantissa</a></div><div class="ttdeci">std::uint64_t mantissa</div><div class="ttdef"><b>Definition</b> <a href="STNumber_8h_source.html#l00076">STNumber.h:76</a></div></div>
|
|
<div class="ttc" id="astructripple_1_1NumberParts_html_a61ca32728dc41c4d813fc637703423bc"><div class="ttname"><a href="structripple_1_1NumberParts.html#a61ca32728dc41c4d813fc637703423bc">ripple::NumberParts::negative</a></div><div class="ttdeci">bool negative</div><div class="ttdef"><b>Definition</b> <a href="STNumber_8h_source.html#l00078">STNumber.h:78</a></div></div>
|
|
<div class="ttc" id="astructripple_1_1Number_1_1unchecked_html"><div class="ttname"><a href="structripple_1_1Number_1_1unchecked.html">ripple::Number::unchecked</a></div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00031">Number.h:32</a></div></div>
|
|
<div class="ttc" id="astructripple_1_1STAmount_1_1unchecked_html"><div class="ttname"><a href="structripple_1_1STAmount_1_1unchecked.html">ripple::STAmount::unchecked</a></div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00066">STAmount.h:67</a></div></div>
|
|
<div class="ttc" id="ato_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a></div><div class="ttdeci">T to_string(T... args)</div></div>
|
|
<div class="ttc" id="aunique_ptr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/memory/unique_ptr.html">std::unique_ptr</a></div></div>
|
|
<div class="ttc" id="autility_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/utility.html">utility</a></div></div>
|
|
<div class="ttc" id="avector_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/vector.html">vector</a></div></div>
|
|
<div class="ttc" id="awhat_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/error/exception/what.html">std::exception::what</a></div><div class="ttdeci">T what(T... args)</div></div>
|
|
</div><!-- fragment --></div><!-- contents -->
|
|
<!-- start footer part -->
|
|
<hr class="footer"/><address class="footer"><small>
|
|
Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
|
|
</small></address>
|
|
</body>
|
|
</html>
|