#include #include #include #include #include #include #include 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(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