| 473 | } |
| 474 | |
| 475 | Quantity dot(OSQuantityVector lVector, const OSQuantityVector& rVector) { |
| 476 | Unit lUnits(lVector.units()); |
| 477 | Unit rUnits(rVector.units()); |
| 478 | OptionalTemperatureUnit ltu = lUnits.optionalCast<TemperatureUnit>(); |
| 479 | OptionalTemperatureUnit rtu = rUnits.optionalCast<TemperatureUnit>(); |
| 480 | Unit resultUnits; |
| 481 | if (ltu && rtu) { |
| 482 | resultUnits = ltu.get() * rtu.get(); |
| 483 | } else { |
| 484 | resultUnits = lUnits * rUnits; |
| 485 | } |
| 486 | ScaleOpReturnType resultScale = lVector.scale() * rVector.scale(); |
| 487 | lVector *= resultScale.second; |
| 488 | DoubleVector lValues(lVector.values()); |
| 489 | DoubleVector rValues(rVector.values()); |
| 490 | double resultValue = dot(createVector(lValues), createVector(rValues)); |
| 491 | return Quantity(resultValue, resultUnits); |
| 492 | } |
| 493 | |
| 494 | bool operator==(const OSQuantityVector& lVector, const OSQuantityVector& rVector) { |
| 495 | return (&lVector == &rVector) || ((lVector.units() == rVector.units()) && (lVector.values() == rVector.values())); |