Files
rippled/src/libxrpl/protocol/Rate2.cpp

102 lines
2.3 KiB
C++

#include <xrpl/beast/utility/instrumentation.h>
#include <xrpl/protocol/Asset.h>
#include <xrpl/protocol/Issue.h>
#include <xrpl/protocol/Quality.h>
#include <xrpl/protocol/Rate.h>
#include <xrpl/protocol/STAmount.h>
#include <cstdint>
namespace xrpl {
Rate const kPARITY_RATE(QUALITY_ONE);
namespace detail {
STAmount
asAmount(Rate const& rate)
{
return {noIssue(), rate.value, -9, false};
}
} // namespace detail
namespace nft {
Rate
transferFeeAsRate(std::uint16_t fee)
{
return Rate{static_cast<std::uint32_t>(fee) * 10000};
}
} // namespace nft
STAmount
multiply(STAmount const& amount, Rate const& rate)
{
XRPL_ASSERT(rate.value, "xrpl::nft::multiply : nonzero rate input");
if (rate == kPARITY_RATE)
return amount;
return multiply(amount, detail::asAmount(rate), amount.asset());
}
STAmount
multiplyRound(STAmount const& amount, Rate const& rate, bool roundUp)
{
XRPL_ASSERT(rate.value, "xrpl::nft::multiplyRound : nonzero rate input");
if (rate == kPARITY_RATE)
return amount;
return mulRound(amount, detail::asAmount(rate), amount.asset(), roundUp);
}
STAmount
multiplyRound(STAmount const& amount, Rate const& rate, Asset const& asset, bool roundUp)
{
XRPL_ASSERT(rate.value, "xrpl::nft::multiplyRound(Issue) : nonzero rate input");
if (rate == kPARITY_RATE)
{
return amount;
}
return mulRound(amount, detail::asAmount(rate), asset, roundUp);
}
STAmount
divide(STAmount const& amount, Rate const& rate)
{
XRPL_ASSERT(rate.value, "xrpl::nft::divide : nonzero rate input");
if (rate == kPARITY_RATE)
return amount;
return divide(amount, detail::asAmount(rate), amount.asset());
}
STAmount
divideRound(STAmount const& amount, Rate const& rate, bool roundUp)
{
XRPL_ASSERT(rate.value, "xrpl::nft::divideRound : nonzero rate input");
if (rate == kPARITY_RATE)
return amount;
return divRound(amount, detail::asAmount(rate), amount.asset(), roundUp);
}
STAmount
divideRound(STAmount const& amount, Rate const& rate, Asset const& asset, bool roundUp)
{
XRPL_ASSERT(rate.value, "xrpl::nft::divideRound(Issue) : nonzero rate input");
if (rate == kPARITY_RATE)
return amount;
return divRound(amount, detail::asAmount(rate), asset, roundUp);
}
} // namespace xrpl