Exemple #1
0
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);
}
Exemple #2
0
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);
}
Exemple #3
0
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);
}