Beispiel #1
0
Quantity& Quantity::operator+=(const Quantity& temp) {

  if (this == &temp) {
    m_value *= 2.0;
    return *this;
  }

  // copy input reference so we can change its properties
  Quantity rQuantity(temp);

  if (isTemperature() && rQuantity.isTemperature()) {
    if (!isAbsolute() && rQuantity.isAbsolute()) {
      setAsAbsolute();
    } else if (isAbsolute() && !rQuantity.isAbsolute()){
      rQuantity.setAsAbsolute();
    }
  }

  if (m_units != rQuantity.m_units) {
    LOG_AND_THROW("Cannot add quantities with different units.");
  }

  if (scale() != rQuantity.scale()) {
    Quantity wRQuantity(rQuantity);
    wRQuantity.setScale(scale().exponent);
    m_value += wRQuantity.value();
  }
  else {
    m_value += rQuantity.value();
  }

  return *this;
}
Beispiel #2
0
Quantity& Quantity::operator+=(const Quantity& rQuantity) {

  if (this == &rQuantity) {
    m_value *= 2.0;
    return *this;
  }

  if (m_units != rQuantity.m_units) {
    LOG_AND_THROW("Cannot add quantities with different units.");
  }

  if (scale() != rQuantity.scale()) {
    Quantity wRQuantity(rQuantity);
    wRQuantity.setScale(scale().exponent);
    m_value += wRQuantity.value();
  }
  else {
    m_value += rQuantity.value();
  }

  if (isTemperature() && rQuantity.isTemperature()) {
    if (!isAbsolute() && rQuantity.isAbsolute()) {
      setAsAbsolute();
    }
  }

  return *this;
}
Beispiel #3
0
Quantity& Quantity::operator-=(const Quantity& temp) {

  if (this == &temp) {
    m_value = 0.0;
    return *this;
  }

  // copy input reference so we can change its properties
  Quantity rQuantity(temp);

  if (isTemperature() && rQuantity.isTemperature()) {
    if (isAbsolute() && rQuantity.isAbsolute()) {
      // units must be the same, check that exponent on this is 1
      std::vector<std::string> bus = baseUnits();
      OS_ASSERT(bus.size() == 1);
      if (baseUnitExponent(bus[0]) == 1) {
        setAsRelative();
        rQuantity.setAsRelative();
      }
    } else if (!isAbsolute() && rQuantity.isAbsolute()) {
      setAsAbsolute();
    } else if (isAbsolute() && !rQuantity.isAbsolute()) {
      rQuantity.setAsAbsolute();
    }
  }

  if (m_units != rQuantity.m_units) {
    LOG_AND_THROW("Cannot subtract quantities with different units.");
  }

  if (scale() != rQuantity.scale()) {
    Quantity wRQuantity(rQuantity);
    wRQuantity.setScale(scale().exponent);
    m_value -= wRQuantity.value();
  }
  else {
    m_value -= rQuantity.value();
  }

  return *this;
}