Example #1
0
 Decimal operator/(const Money& m1, const Money& m2) {
     if (m1.currency() == m2.currency()) {
         return m1.value()/m2.value();
     } else if (Money::conversionType == Money::BaseCurrencyConversion) {
         Money tmp1 = m1;
         convertToBase(tmp1);
         Money tmp2 = m2;
         convertToBase(tmp2);
         return tmp1/tmp2;
     } else if (Money::conversionType == Money::AutomatedConversion) {
         Money tmp = m2;
         convertTo(tmp, m1.currency());
         return m1/tmp;
     } else {
         QL_FAIL("currency mismatch and no conversion specified");
     }
 }
Example #2
0
 bool close_enough(const Money& m1, const Money& m2, Size n) {
     if (m1.currency() == m2.currency()) {
         return close_enough(m1.value(),m2.value(),n);
     } else if (Money::conversionType == Money::BaseCurrencyConversion) {
         Money tmp1 = m1;
         convertToBase(tmp1);
         Money tmp2 = m2;
         convertToBase(tmp2);
         return close_enough(tmp1,tmp2,n);
     } else if (Money::conversionType == Money::AutomatedConversion) {
         Money tmp = m2;
         convertTo(tmp, m1.currency());
         return close_enough(m1,tmp,n);
     } else {
         QL_FAIL("currency mismatch and no conversion specified");
     }
 }
Example #3
0
 Money ExchangeRate::exchange(const Money& amount) const {
     switch (type_) {
       case Direct:
         if (amount.currency() == source_)
             return Money(amount.value()*rate_, target_);
         else if (amount.currency() == target_)
             return Money(amount.value()/rate_, source_);
         else
             QL_FAIL("exchange rate not applicable");
       case Derived:
         if (amount.currency() == rateChain_.first->source() ||
             amount.currency() == rateChain_.first->target())
             return rateChain_.second->exchange(
                                      rateChain_.first->exchange(amount));
         else if (amount.currency() == rateChain_.second->source() ||
                    amount.currency() == rateChain_.second->target())
             return rateChain_.first->exchange(
                                      rateChain_.second->exchange(amount));
         else
             QL_FAIL("exchange rate not applicable");
       default:
         QL_FAIL("unknown exchange-rate type");
     }
 }