rippled
Loading...
Searching...
No Matches
Rate2.cpp
1#include <xrpl/beast/utility/instrumentation.h>
2#include <xrpl/protocol/Asset.h>
3#include <xrpl/protocol/Issue.h>
4#include <xrpl/protocol/Quality.h>
5#include <xrpl/protocol/Rate.h>
6#include <xrpl/protocol/STAmount.h>
7
8#include <cstdint>
9
10namespace xrpl {
11
12Rate const parityRate(QUALITY_ONE);
13
14namespace detail {
15
17as_amount(Rate const& rate)
18{
19 return {noIssue(), rate.value, -9, false};
20}
21
22} // namespace detail
23
24namespace nft {
25Rate
27{
28 return Rate{static_cast<std::uint32_t>(fee) * 10000};
29}
30
31} // namespace nft
32
33STAmount
34multiply(STAmount const& amount, Rate const& rate)
35{
36 XRPL_ASSERT(rate.value, "xrpl::nft::multiply : nonzero rate input");
37
38 if (rate == parityRate)
39 return amount;
40
41 return multiply(amount, detail::as_amount(rate), amount.asset());
42}
43
44STAmount
45multiplyRound(STAmount const& amount, Rate const& rate, bool roundUp)
46{
47 XRPL_ASSERT(rate.value, "xrpl::nft::multiplyRound : nonzero rate input");
48
49 if (rate == parityRate)
50 return amount;
51
52 return mulRound(amount, detail::as_amount(rate), amount.asset(), roundUp);
53}
54
55STAmount
56multiplyRound(STAmount const& amount, Rate const& rate, Asset const& asset, bool roundUp)
57{
58 XRPL_ASSERT(rate.value, "xrpl::nft::multiplyRound(Issue) : nonzero rate input");
59
60 if (rate == parityRate)
61 {
62 return amount;
63 }
64
65 return mulRound(amount, detail::as_amount(rate), asset, roundUp);
66}
67
68STAmount
69divide(STAmount const& amount, Rate const& rate)
70{
71 XRPL_ASSERT(rate.value, "xrpl::nft::divide : nonzero rate input");
72
73 if (rate == parityRate)
74 return amount;
75
76 return divide(amount, detail::as_amount(rate), amount.asset());
77}
78
79STAmount
80divideRound(STAmount const& amount, Rate const& rate, bool roundUp)
81{
82 XRPL_ASSERT(rate.value, "xrpl::nft::divideRound : nonzero rate input");
83
84 if (rate == parityRate)
85 return amount;
86
87 return divRound(amount, detail::as_amount(rate), amount.asset(), roundUp);
88}
89
90STAmount
91divideRound(STAmount const& amount, Rate const& rate, Asset const& asset, bool roundUp)
92{
93 XRPL_ASSERT(rate.value, "xrpl::nft::divideRound(Issue) : nonzero rate input");
94
95 if (rate == parityRate)
96 return amount;
97
98 return divRound(amount, detail::as_amount(rate), asset, roundUp);
99}
100
101} // namespace xrpl
STAmount as_amount(Rate const &rate)
Definition Rate2.cpp:17
Rate transferFeeAsRate(std::uint16_t fee)
Given a transfer fee (in basis points) convert it to a transfer rate.
Definition Rate2.cpp:26
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Definition algorithm.h:6
STAmount divide(STAmount const &amount, Rate const &rate)
Definition Rate2.cpp:69
STAmount divRound(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)
STAmount multiply(STAmount const &amount, Rate const &rate)
Definition Rate2.cpp:34
STAmount multiplyRound(STAmount const &amount, Rate const &rate, bool roundUp)
Definition Rate2.cpp:45
STAmount mulRound(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)
Issue const & noIssue()
Returns an asset specifier that represents no account and currency.
Definition Issue.h:106
STAmount divideRound(STAmount const &amount, Rate const &rate, bool roundUp)
Definition Rate2.cpp:80
Rate const parityRate
A transfer rate signifying a 1:1 exchange.
Represents a transfer rate.
Definition Rate.h:21
std::uint32_t value
Definition Rate.h:22