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 ripple {
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, "ripple::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, "ripple::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
57 STAmount const& amount,
58 Rate const& rate,
59 Asset const& asset,
60 bool roundUp)
61{
62 XRPL_ASSERT(
63 rate.value, "ripple::nft::multiplyRound(Issue) : nonzero rate input");
64
65 if (rate == parityRate)
66 {
67 return amount;
68 }
69
70 return mulRound(amount, detail::as_amount(rate), asset, roundUp);
71}
72
73STAmount
74divide(STAmount const& amount, Rate const& rate)
75{
76 XRPL_ASSERT(rate.value, "ripple::nft::divide : nonzero rate input");
77
78 if (rate == parityRate)
79 return amount;
80
81 return divide(amount, detail::as_amount(rate), amount.asset());
82}
83
84STAmount
85divideRound(STAmount const& amount, Rate const& rate, bool roundUp)
86{
87 XRPL_ASSERT(rate.value, "ripple::nft::divideRound : nonzero rate input");
88
89 if (rate == parityRate)
90 return amount;
91
92 return divRound(amount, detail::as_amount(rate), amount.asset(), roundUp);
93}
94
95STAmount
97 STAmount const& amount,
98 Rate const& rate,
99 Asset const& asset,
100 bool roundUp)
101{
102 XRPL_ASSERT(
103 rate.value, "ripple::nft::divideRound(Issue) : nonzero rate input");
104
105 if (rate == parityRate)
106 return amount;
107
108 return divRound(amount, detail::as_amount(rate), asset, roundUp);
109}
110
111} // namespace ripple
Asset const & asset() const
Definition STAmount.h:464
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:74
STAmount multiply(STAmount const &amount, Rate const &rate)
Definition Rate2.cpp:34
STAmount divideRound(STAmount const &amount, Rate const &rate, bool roundUp)
Definition Rate2.cpp:85
Issue const & noIssue()
Returns an asset specifier that represents no account and currency.
Definition Issue.h:104
STAmount divRound(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)
STAmount mulRound(STAmount const &v1, STAmount const &v2, Asset const &asset, bool roundUp)
STAmount multiplyRound(STAmount const &amount, Rate const &rate, bool roundUp)
Definition Rate2.cpp:45
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