summaryrefslogtreecommitdiff
path: root/src/org/unitConverter/unit/SI.java
diff options
context:
space:
mode:
authorAdrien Hopkins <adrien.p.hopkins@gmail.com>2020-08-27 08:07:21 -0500
committerAdrien Hopkins <adrien.p.hopkins@gmail.com>2020-08-27 08:07:21 -0500
commite2f141427e441daa9d6be0ba8a30b844ca4391e0 (patch)
treec6cf591c9db5bc8e753c271396f226f2eb42e222 /src/org/unitConverter/unit/SI.java
parent0245594222bfa0bd9a47d8326ed323c7356ac27c (diff)
Added the ability to restrict conversion to customary->metric.
Diffstat (limited to 'src/org/unitConverter/unit/SI.java')
-rw-r--r--src/org/unitConverter/unit/SI.java59
1 files changed, 34 insertions, 25 deletions
diff --git a/src/org/unitConverter/unit/SI.java b/src/org/unitConverter/unit/SI.java
index a4fbd5f..f36cf28 100644
--- a/src/org/unitConverter/unit/SI.java
+++ b/src/org/unitConverter/unit/SI.java
@@ -17,6 +17,7 @@
package org.unitConverter.unit;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@@ -91,6 +92,9 @@ public final class SI {
public static final BaseUnit DOLLAR = BaseUnit
.valueOf(BaseDimensions.CURRENCY, "dollar", "$");
+ public static final Set<BaseUnit> BASE_UNITS = setOf(METRE, KILOGRAM,
+ SECOND, AMPERE, KELVIN, MOLE, CANDELA, BIT);
+
// You may NOT get SI.BaseUnits instances!
private BaseUnits() {
throw new AssertionError();
@@ -210,6 +214,7 @@ public final class SI {
/// The units of the SI
public static final LinearUnit ONE = LinearUnit
.valueOf(ObjectProduct.empty(), 1);
+
public static final LinearUnit METRE = BaseUnits.METRE.asLinearUnit()
.withName(NameSymbol.of("metre", "m", "meter"));
public static final LinearUnit KILOGRAM = BaseUnits.KILOGRAM.asLinearUnit()
@@ -228,10 +233,10 @@ public final class SI {
.withName(NameSymbol.of("bit", "b"));
public static final LinearUnit DOLLAR = BaseUnits.DOLLAR.asLinearUnit()
.withName(NameSymbol.of("dollar", "$"));
-
// Non-base units
public static final LinearUnit RADIAN = METRE.dividedBy(METRE)
.withName(NameSymbol.of("radian", "rad"));
+
public static final LinearUnit STERADIAN = RADIAN.times(RADIAN)
.withName(NameSymbol.of("steradian", "sr"));
public static final LinearUnit HERTZ = ONE.dividedBy(SECOND)
@@ -277,10 +282,10 @@ public final class SI {
// for dose equivalent
public static final LinearUnit KATAL = MOLE.dividedBy(SECOND)
.withName(NameSymbol.of("katal", "kat"));
-
// common derived units included for convenience
public static final LinearUnit GRAM = KILOGRAM.dividedBy(1000)
.withName(NameSymbol.of("gram", "g"));
+
public static final LinearUnit SQUARE_METRE = METRE.toExponent(2)
.withName(NameSymbol.of("square metre", "m^2", "square meter",
"metre squared", "meter squared"));
@@ -290,12 +295,12 @@ public final class SI {
public static final LinearUnit METRE_PER_SECOND = METRE.dividedBy(SECOND)
.withName(
NameSymbol.of("metre per second", "m/s", "meter per second"));
-
// Non-SI units included for convenience
public static final Unit CELSIUS = Unit
.fromConversionFunctions(KELVIN.getBase(), tempK -> tempK - 273.15,
tempC -> tempC + 273.15)
.withName(NameSymbol.of("degree Celsius", "\u00B0C"));
+
public static final LinearUnit MINUTE = SECOND.times(60)
.withName(NameSymbol.of("minute", "min"));
public static final LinearUnit HOUR = MINUTE.times(60)
@@ -324,7 +329,7 @@ public final class SI {
.withName(NameSymbol.of("tonne", "t", "metric ton"));
public static final LinearUnit DALTON = KILOGRAM.times(1.660539040e-27)
.withName(NameSymbol.of("dalton", "Da", "atomic unit", "u")); // approximate
- // value
+ // value
public static final LinearUnit ELECTRONVOLT = JOULE.times(1.602176634e-19)
.withName(NameSymbol.of("electron volt", "eV"));
public static final LinearUnit BYTE = BIT.times(8)
@@ -339,11 +344,11 @@ public final class SI {
.fromConversionFunctions(ONE.getBase(), pr -> 10 * Math.log10(pr),
dB -> Math.pow(10, dB / 10))
.withName(NameSymbol.of("decibel", "dB"));
-
/// The prefixes of the SI
// expanding decimal prefixes
public static final UnitPrefix KILO = UnitPrefix.valueOf(1e3)
.withName(NameSymbol.of("kilo", "k", "K"));
+
public static final UnitPrefix MEGA = UnitPrefix.valueOf(1e6)
.withName(NameSymbol.of("mega", "M"));
public static final UnitPrefix GIGA = UnitPrefix.valueOf(1e9)
@@ -358,10 +363,10 @@ public final class SI {
.withName(NameSymbol.of("zetta", "Z"));
public static final UnitPrefix YOTTA = UnitPrefix.valueOf(1e24)
.withName(NameSymbol.of("yotta", "Y"));
-
// contracting decimal prefixes
public static final UnitPrefix MILLI = UnitPrefix.valueOf(1e-3)
.withName(NameSymbol.of("milli", "m"));
+
public static final UnitPrefix MICRO = UnitPrefix.valueOf(1e-6)
.withName(NameSymbol.of("micro", "\u03BC", "u")); // mu
public static final UnitPrefix NANO = UnitPrefix.valueOf(1e-9)
@@ -376,10 +381,10 @@ public final class SI {
.withName(NameSymbol.of("zepto", "z"));
public static final UnitPrefix YOCTO = UnitPrefix.valueOf(1e-24)
.withName(NameSymbol.of("yocto", "y"));
-
// prefixes that don't match the pattern of thousands
public static final UnitPrefix DEKA = UnitPrefix.valueOf(1e1)
.withName(NameSymbol.of("deka", "da", "deca", "D"));
+
public static final UnitPrefix HECTO = UnitPrefix.valueOf(1e2)
.withName(NameSymbol.of("hecto", "h", "H", "hekto"));
public static final UnitPrefix DECI = UnitPrefix.valueOf(1e-1)
@@ -398,25 +403,29 @@ public final class SI {
.withName(NameSymbol.of("pebi", "Pi"));
public static final UnitPrefix EXBI = PEBI.times(1024)
.withName(NameSymbol.of("exbi", "Ei"));
-
// sets of prefixes
- public static final Set<UnitPrefix> ALL_PREFIXES = new HashSet<>(
- Arrays.asList(DEKA, HECTO, KILO, MEGA, GIGA, TERA, PETA, EXA, ZETTA,
- YOTTA, DECI, CENTI, MILLI, MICRO, NANO, PICO, FEMTO, ATTO, ZEPTO,
- YOCTO, KIBI, MEBI, GIBI, TEBI, PEBI, EXBI));
- public static final Set<UnitPrefix> DECIMAL_PREFIXES = new HashSet<>(
- Arrays.asList(DEKA, HECTO, KILO, MEGA, GIGA, TERA, PETA, EXA, ZETTA,
- YOTTA, DECI, CENTI, MILLI, MICRO, NANO, PICO, FEMTO, ATTO, ZEPTO,
- YOCTO));
- public static final Set<UnitPrefix> THOUSAND_PREFIXES = new HashSet<>(
- Arrays.asList(KILO, MEGA, GIGA, TERA, PETA, EXA, ZETTA, YOTTA, MILLI,
- MICRO, NANO, PICO, FEMTO, ATTO, ZEPTO, YOCTO));
- public static final Set<UnitPrefix> MAGNIFYING_PREFIXES = new HashSet<>(
- Arrays.asList(DEKA, HECTO, KILO, MEGA, GIGA, TERA, PETA, EXA, ZETTA,
- YOTTA, KIBI, MEBI, GIBI, TEBI, PEBI, EXBI));
- public static final Set<UnitPrefix> REDUCING_PREFIXES = new HashSet<>(
- Arrays.asList(DECI, CENTI, MILLI, MICRO, NANO, PICO, FEMTO, ATTO,
- ZEPTO, YOCTO));
+ public static final Set<UnitPrefix> ALL_PREFIXES = setOf(DEKA, HECTO, KILO,
+ MEGA, GIGA, TERA, PETA, EXA, ZETTA, YOTTA, DECI, CENTI, MILLI, MICRO,
+ NANO, PICO, FEMTO, ATTO, ZEPTO, YOCTO, KIBI, MEBI, GIBI, TEBI, PEBI,
+ EXBI);
+
+ public static final Set<UnitPrefix> DECIMAL_PREFIXES = setOf(DEKA, HECTO,
+ KILO, MEGA, GIGA, TERA, PETA, EXA, ZETTA, YOTTA, DECI, CENTI, MILLI,
+ MICRO, NANO, PICO, FEMTO, ATTO, ZEPTO, YOCTO);
+ public static final Set<UnitPrefix> THOUSAND_PREFIXES = setOf(KILO, MEGA,
+ GIGA, TERA, PETA, EXA, ZETTA, YOTTA, MILLI, MICRO, NANO, PICO, FEMTO,
+ ATTO, ZEPTO, YOCTO);
+ public static final Set<UnitPrefix> MAGNIFYING_PREFIXES = setOf(DEKA, HECTO,
+ KILO, MEGA, GIGA, TERA, PETA, EXA, ZETTA, YOTTA, KIBI, MEBI, GIBI,
+ TEBI, PEBI, EXBI);
+ public static final Set<UnitPrefix> REDUCING_PREFIXES = setOf(DECI, CENTI,
+ MILLI, MICRO, NANO, PICO, FEMTO, ATTO, ZEPTO, YOCTO);
+
+ // this method just calls Arrays.asList, which is itself safe.
+ @SafeVarargs
+ private static final <T> Set<T> setOf(T... args) {
+ return Collections.unmodifiableSet(new HashSet<>(Arrays.asList(args)));
+ }
// You may NOT get SI instances!
private SI() {