static STAmount qual_mul (STAmount const& amount, Quality const& quality, STAmount const& output) { auto result = multiply (amount, quality.rate (), output.issue ()); return std::min (result, output); }
Quality composed_quality (Quality const& lhs, Quality const& rhs) { Amount const lhs_rate (lhs.rate ()); assert (lhs_rate != zero); Amount const rhs_rate (rhs.rate ()); assert (rhs_rate != zero); Amount const rate (Amount::mulRound (lhs_rate, rhs_rate, true)); std::uint64_t const stored_exponent (rate.getExponent () + 100); std::uint64_t const stored_mantissa (rate.getMantissa ()); assert ((stored_exponent >= 0) && (stored_exponent <= 255)); return Quality ((stored_exponent << (64 - 8)) | stored_mantissa); }
Quality composed_quality (Quality const& lhs, Quality const& rhs) { STAmount const lhs_rate (lhs.rate ()); assert (lhs_rate != zero); STAmount const rhs_rate (rhs.rate ()); assert (rhs_rate != zero); STAmount const rate (mulRound ( lhs_rate, rhs_rate, lhs_rate.issue (), true)); std::uint64_t const stored_exponent (rate.exponent () + 100); std::uint64_t const stored_mantissa (rate.mantissa()); assert ((stored_exponent > 0) && (stored_exponent <= 255)); return Quality ((stored_exponent << (64 - 8)) | stored_mantissa); }