summaryrefslogtreecommitdiff
path: root/src/org/unitConverter/unit/BaseUnit.java
diff options
context:
space:
mode:
authorAdrien Hopkins <adrien.p.hopkins@gmail.com>2019-03-18 16:43:36 -0400
committerAdrien Hopkins <adrien.p.hopkins@gmail.com>2019-03-18 16:43:36 -0400
commitea940f2c5b6450231ff9ce61f4b6704babdb0d9e (patch)
treec2839296bcda675f8b10f1c210b557618fbf013c /src/org/unitConverter/unit/BaseUnit.java
parent6dbd32cd208c164e9c818b48b0b9bf823a152d71 (diff)
Created an OperatableUnit interface for units that can operate.
Diffstat (limited to 'src/org/unitConverter/unit/BaseUnit.java')
-rwxr-xr-xsrc/org/unitConverter/unit/BaseUnit.java48
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));
}