diff options
Diffstat (limited to 'src/org/unitConverter/unit/BaseUnit.java')
-rwxr-xr-x | src/org/unitConverter/unit/BaseUnit.java | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/src/org/unitConverter/unit/BaseUnit.java b/src/org/unitConverter/unit/BaseUnit.java index 1f0c825..894d338 100755 --- a/src/org/unitConverter/unit/BaseUnit.java +++ b/src/org/unitConverter/unit/BaseUnit.java @@ -28,7 +28,7 @@ import org.unitConverter.dimension.UnitDimension; * @since 2018-12-23 * @since v0.1.0 */ -public final class BaseUnit extends AbstractUnit { +public final class BaseUnit extends AbstractUnit implements OperatableUnit { /** * Is this unit a full base (i.e. m, s, ... but not N, J, ...) * @@ -126,6 +126,35 @@ public final class BaseUnit extends AbstractUnit { return result; } + @Override + public LinearUnit negated() { + return this.times(-1); + } + + @Override + public OperatableUnit plus(final OperatableUnit addend) { + Objects.requireNonNull(addend, "addend must not be null."); + + // reject addends that cannot be added to this unit + if (!this.getSystem().equals(addend.getSystem())) + throw new IllegalArgumentException( + String.format("Incompatible units for addition or subtraction \"%s\" and \"%s\".", this, addend)); + if (!this.getDimension().equals(addend.getDimension())) + throw new IllegalArgumentException( + String.format("Incompatible units for addition or subtraction \"%s\" and \"%s\".", this, addend)); + + // add them together + if (addend instanceof BaseUnit) + return this.times(2); + else + return addend.plus(this); + } + + @Override + public BaseUnit reciprocal() { + return this.toExponent(-1); + } + /** * Multiplies this unit by another unit. * @@ -159,6 +188,22 @@ public final class BaseUnit extends AbstractUnit { return new LinearUnit(this, multiplier); } + @Override + public OperatableUnit times(final OperatableUnit multiplier) { + Objects.requireNonNull(multiplier, "multiplier must not be null."); + + // reject multipliers that cannot be muliplied by this unit + if (!this.getSystem().equals(multiplier.getSystem())) + throw new IllegalArgumentException(String + .format("Incompatible units for multiplication or division \"%s\" and \"%s\".", this, multiplier)); + + // multiply the units + if (multiplier instanceof BaseUnit) + return new BaseUnit(this.getDimension().times(multiplier.getDimension()), this.getSystem()); + else + return multiplier.times(this); + } + /** * Returns this unit, but to an exponent. * @@ -168,6 +213,7 @@ public final class BaseUnit extends AbstractUnit { * @since 2019-01-15 * @since v0.1.0 */ + @Override public BaseUnit toExponent(final int exponent) { return this.getSystem().getBaseUnit(this.getDimension().toExponent(exponent)); } |