Пример #1
0
 void TemperatureUnit_Impl::operator/=(const Unit& rUnit) {
   Unit_Impl::operator/=(rUnit);
   OptionalTemperatureUnit rTUnit = rUnit.optionalCast<TemperatureUnit>();
   if (!isAbsolute() && rTUnit && rTUnit->isAbsolute()) {
     setAsAbsolute();
   }
 }
Пример #2
0
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();
}
Пример #3
0
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();
}
Пример #4
0
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);
}