summaryrefslogtreecommitdiff
path: root/src/unitConverter/unit/SI.java
diff options
context:
space:
mode:
authorAdrien Hopkins <adrien.p.hopkins@gmail.com>2019-01-25 17:12:18 -0500
committerAdrien Hopkins <adrien.p.hopkins@gmail.com>2019-01-25 17:12:18 -0500
commit43feeeab69b723e02694a2d93eaa44c3007665e1 (patch)
treec651ba13718eeb6139dc3d404586857f832abceb /src/unitConverter/unit/SI.java
parente7d6b4ee2286dd9320550d95cb27020ee71bb9d1 (diff)
Added unit prefixes and made SI reuse base units.
Diffstat (limited to 'src/unitConverter/unit/SI.java')
-rw-r--r--src/unitConverter/unit/SI.java25
1 files changed, 24 insertions, 1 deletions
diff --git a/src/unitConverter/unit/SI.java b/src/unitConverter/unit/SI.java
index 4486bf9..cda42e7 100644
--- a/src/unitConverter/unit/SI.java
+++ b/src/unitConverter/unit/SI.java
@@ -16,6 +16,10 @@
*/
package unitConverter.unit;
+import java.util.HashSet;
+import java.util.Objects;
+import java.util.Set;
+
import unitConverter.dimension.StandardDimensions;
import unitConverter.dimension.UnitDimension;
@@ -28,6 +32,13 @@ import unitConverter.dimension.UnitDimension;
public enum SI implements UnitSystem {
SI;
+ /**
+ * This system's base units.
+ *
+ * @since 2019-01-25
+ */
+ private static final Set<BaseUnit> baseUnits = new HashSet<>();
+
// base units
public static final BaseUnit METRE = SI.getBaseUnit(StandardDimensions.LENGTH);
public static final BaseUnit KILOGRAM = SI.getBaseUnit(StandardDimensions.MASS);
@@ -39,7 +50,19 @@ public enum SI implements UnitSystem {
@Override
public BaseUnit getBaseUnit(final UnitDimension dimension) {
- return new BaseUnit(dimension, this);
+ // try to find an existing unit before creating a new one
+
+ Objects.requireNonNull(dimension, "dimension must not be null.");
+ for (final BaseUnit unit : baseUnits) {
+ // it will be equal since the conditions for equality are dimension and system,
+ // and system is always SI.
+ if (unit.getDimension().equals(dimension))
+ return unit;
+ }
+ // could not find an existing base unit
+ final BaseUnit unit = new BaseUnit(dimension, this);
+ baseUnits.add(unit);
+ return unit;
}
@Override