mirror of
https://github.com/UpsilonNumworks/Upsilon.git
synced 2026-01-18 16:27:34 +01:00
[poincare/unit] Add missing additonal results
Additional results are proposed for all units combinations that include a non-base unit, in addition to units with special results. Change-Id: I91f2a1a43c72bad0327132396534a223e87b06a2
This commit is contained in:
committed by
Émilie Feral
parent
4e771fdb54
commit
ddbe76fec5
@@ -764,14 +764,20 @@ void Unit::ChooseBestRepresentativeAndPrefixForValue(Expression units, double *
|
||||
bool Unit::ShouldDisplayAdditionalOutputs(double value, Expression unit, Preferences::UnitFormat unitFormat) {
|
||||
UnitNode::Vector<int> vector = UnitNode::Vector<int>::FromBaseUnits(unit);
|
||||
const Representative * representative = Representative::RepresentativeForDimension(vector);
|
||||
return representative != nullptr
|
||||
&& ((unit.type() == ExpressionNode::Type::Unit && !static_cast<Unit &>(unit).isBaseUnit())
|
||||
|| representative->hasAdditionalExpressions(value, unitFormat));
|
||||
|
||||
ExpressionTypeTest isNonBase = [](const Expression e, const void * context) {
|
||||
return e.type() == ExpressionNode::Type::Unit && !e.convert<Unit>().isBaseUnit();
|
||||
};
|
||||
|
||||
return (representative != nullptr && representative->hasAdditionalExpressions(value, unitFormat))
|
||||
|| unit.hasExpression(isNonBase, nullptr);
|
||||
}
|
||||
|
||||
int Unit::SetAdditionalExpressions(Expression units, double value, Expression * dest, int availableLength, ExpressionNode::ReductionContext reductionContext) {
|
||||
const Representative * representative = units.type() == ExpressionNode::Type::Unit ? static_cast<Unit &>(units).node()->representative() : UnitNode::Representative::RepresentativeForDimension(UnitNode::Vector<int>::FromBaseUnits(units));
|
||||
assert(representative);
|
||||
if (!representative) {
|
||||
return 0;
|
||||
}
|
||||
return representative->setAdditionalExpressions(value, dest, availableLength, reductionContext);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user