void TemperatureUnit_Impl::operator/=(const Unit& rUnit) { Unit_Impl::operator/=(rUnit); OptionalTemperatureUnit rTUnit = rUnit.optionalCast<TemperatureUnit>(); if (!isAbsolute() && rTUnit && rTUnit->isAbsolute()) { setAsAbsolute(); } }
void Quantity::setAsRelative() { OptionalTemperatureUnit tu = m_units.optionalCast<TemperatureUnit>(); if(!tu) { LOG_AND_THROW("Could not Quantity::setAsRelative for quantity " << *this << " because it is in system " << system().valueName() << ", not Celsius or Fahrenheit."); } tu->setAsRelative(); }
bool Quantity::isAbsolute() const { OptionalTemperatureUnit tu = m_units.optionalCast<TemperatureUnit>(); if(!tu) { LOG_AND_THROW("Could not evaluate Quantity::isAbsolute for quantity " << *this << " because it is in system " << system().valueName() << ", not Celsius or Fahrenheit."); } return tu->isAbsolute(); }
Quantity dot(OSQuantityVector lVector, const OSQuantityVector& rVector) { Unit lUnits(lVector.units()), rUnits(rVector.units()); OptionalTemperatureUnit ltu = lUnits.optionalCast<TemperatureUnit>(); OptionalTemperatureUnit rtu = rUnits.optionalCast<TemperatureUnit>(); Unit resultUnits; if (ltu && rtu) { resultUnits = ltu.get() * rtu.get(); } else { resultUnits = lUnits * rUnits; } ScaleOpReturnType resultScale = lVector.scale() * rVector.scale(); lVector *= resultScale.second; DoubleVector lValues(lVector.values()), rValues(rVector.values()); double resultValue = dot(createVector(lValues),createVector(rValues)); return Quantity(resultValue,resultUnits); }