#include #include #include #include #include #include #include namespace xrpl { Rate const parityRate(QUALITY_ONE); namespace detail { STAmount as_amount(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 == parityRate) return amount; return multiply(amount, detail::as_amount(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 == parityRate) return amount; return mulRound(amount, detail::as_amount(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 == parityRate) { return amount; } return mulRound(amount, detail::as_amount(rate), asset, roundUp); } STAmount divide(STAmount const& amount, Rate const& rate) { XRPL_ASSERT(rate.value, "xrpl::nft::divide : nonzero rate input"); if (rate == parityRate) return amount; return divide(amount, detail::as_amount(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 == parityRate) return amount; return divRound(amount, detail::as_amount(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 == parityRate) return amount; return divRound(amount, detail::as_amount(rate), asset, roundUp); } } // namespace xrpl