toStandardUnit method

  1. @override
UnitConverter toStandardUnit()
override

Returns the converter from this unit to its standard unit.

Implementation

@override
UnitConverter toStandardUnit() {
  if (_hasOnlyStandardUnit()) return UnitConverter.identity;

  return _elements.expand((v) {
    var cvtr = v.base.toStandardUnit();
    if (!cvtr.isLinear) {
      throw StateError('${v.base} is non-linear, cannot convert');
    }
    if (v.pow.divisor != 1) {
      throw StateError(
          '${v.base} holds a base unit with fractional exponent');
    }
    if (v.pow.dividend < 0) cvtr = cvtr.inverse;
    return List.generate(v.pow.dividend.abs(), (_) => cvtr);
  }).fold(UnitConverter.identity, (UnitConverter a, b) => a.concatenate(b));
}