summaryrefslogtreecommitdiff
path: root/src/main/java/sevenUnits
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/sevenUnits')
-rw-r--r--src/main/java/sevenUnits/ProgramInfo.java2
-rw-r--r--src/main/java/sevenUnits/unit/BaseDimension.java3
-rw-r--r--src/main/java/sevenUnits/unit/BaseUnit.java6
-rw-r--r--src/main/java/sevenUnits/unit/BritishImperial.java5
-rw-r--r--src/main/java/sevenUnits/unit/FunctionalUnit.java5
-rw-r--r--src/main/java/sevenUnits/unit/LinearUnit.java14
-rw-r--r--src/main/java/sevenUnits/unit/LinearUnitValue.java23
-rw-r--r--src/main/java/sevenUnits/unit/LoadingException.java1
-rw-r--r--src/main/java/sevenUnits/unit/Metric.java2
-rw-r--r--src/main/java/sevenUnits/unit/USCustomary.java5
-rw-r--r--src/main/java/sevenUnits/unit/Unit.java14
-rw-r--r--src/main/java/sevenUnits/unit/UnitDatabase.java24
-rw-r--r--src/main/java/sevenUnits/unit/UnitPrefix.java11
-rw-r--r--src/main/java/sevenUnits/unit/UnitType.java2
-rw-r--r--src/main/java/sevenUnits/unit/UnitValue.java6
-rw-r--r--src/main/java/sevenUnits/utils/ConditionalExistenceCollections.java14
-rw-r--r--src/main/java/sevenUnits/utils/DecimalComparison.java1
-rw-r--r--src/main/java/sevenUnits/utils/ExpressionParser.java2
-rw-r--r--src/main/java/sevenUnits/utils/NameSymbol.java14
-rw-r--r--src/main/java/sevenUnits/utils/Nameable.java7
-rw-r--r--src/main/java/sevenUnits/utils/ObjectProduct.java15
-rw-r--r--src/main/java/sevenUnits/utils/SemanticVersionNumber.java48
-rw-r--r--src/main/java/sevenUnits/utils/UncertainDouble.java24
23 files changed, 222 insertions, 26 deletions
diff --git a/src/main/java/sevenUnits/ProgramInfo.java b/src/main/java/sevenUnits/ProgramInfo.java
index dda5d2c..9b9832e 100644
--- a/src/main/java/sevenUnits/ProgramInfo.java
+++ b/src/main/java/sevenUnits/ProgramInfo.java
@@ -21,8 +21,8 @@ import sevenUnits.utils.SemanticVersionNumber;
/**
* Information about 7Units
*
- * @since 0.3.1
* @since 2021-06-28
+ * @since v0.3.1
*/
public final class ProgramInfo {
diff --git a/src/main/java/sevenUnits/unit/BaseDimension.java b/src/main/java/sevenUnits/unit/BaseDimension.java
index cfa6af9..fe7b772 100644
--- a/src/main/java/sevenUnits/unit/BaseDimension.java
+++ b/src/main/java/sevenUnits/unit/BaseDimension.java
@@ -26,6 +26,7 @@ import sevenUnits.utils.Nameable;
*
* @author Adrien Hopkins
* @since 2019-10-16
+ * @since v0.3.0
*/
public final class BaseDimension implements Nameable {
/**
@@ -35,6 +36,7 @@ public final class BaseDimension implements Nameable {
* @param symbol symbol used for dimension
* @return dimension
* @since 2019-10-16
+ * @since v0.3.0
*/
public static BaseDimension valueOf(final String name, final String symbol) {
return new BaseDimension(name, symbol);
@@ -57,6 +59,7 @@ public final class BaseDimension implements Nameable {
* @param symbol symbol of unit
* @throws NullPointerException if any argument is null
* @since 2019-10-16
+ * @since v0.3.0
*/
private BaseDimension(final String name, final String symbol) {
this.name = Objects.requireNonNull(name, "name must not be null.");
diff --git a/src/main/java/sevenUnits/unit/BaseUnit.java b/src/main/java/sevenUnits/unit/BaseUnit.java
index 0d375f8..2898de5 100644
--- a/src/main/java/sevenUnits/unit/BaseUnit.java
+++ b/src/main/java/sevenUnits/unit/BaseUnit.java
@@ -31,6 +31,7 @@ import sevenUnits.utils.NameSymbol;
*
* @author Adrien Hopkins
* @since 2019-10-16
+ * @since v0.3.0
*/
public final class BaseUnit extends Unit {
/**
@@ -41,6 +42,7 @@ public final class BaseUnit extends Unit {
* @param symbol symbol of unit
* @return base unit
* @since 2019-10-16
+ * @since v0.3.0
*/
public static BaseUnit valueOf(final BaseDimension dimension,
final String name, final String symbol) {
@@ -56,6 +58,7 @@ public final class BaseUnit extends Unit {
* @param otherNames other possible names of unit
* @return base unit
* @since 2019-10-21
+ * @since v0.3.0
*/
public static BaseUnit valueOf(final BaseDimension dimension,
final String name, final String symbol, final Set<String> otherNames) {
@@ -75,6 +78,7 @@ public final class BaseUnit extends Unit {
* @param symbol symbol of unit
* @throws NullPointerException if any argument is null
* @since 2019-10-16
+ * @since v0.3.0
*/
private BaseUnit(final BaseDimension dimension, final String primaryName,
final String symbol, final Set<String> otherNames) {
@@ -90,6 +94,7 @@ public final class BaseUnit extends Unit {
*
* @return this unit as a {@code LinearUnit}
* @since 2019-10-16
+ * @since v0.3.0
*/
public LinearUnit asLinearUnit() {
return LinearUnit.valueOf(this.getBase(), 1);
@@ -108,6 +113,7 @@ public final class BaseUnit extends Unit {
/**
* @return dimension
* @since 2019-10-16
+ * @since v0.3.0
*/
public final BaseDimension getBaseDimension() {
return this.dimension;
diff --git a/src/main/java/sevenUnits/unit/BritishImperial.java b/src/main/java/sevenUnits/unit/BritishImperial.java
index e327055..a6fd43f 100644
--- a/src/main/java/sevenUnits/unit/BritishImperial.java
+++ b/src/main/java/sevenUnits/unit/BritishImperial.java
@@ -23,6 +23,7 @@ import sevenUnits.utils.NameSymbol;
*
* @author Adrien Hopkins
* @since 2019-10-21
+ * @since v0.3.0
*/
// this class is just constants, most of which are obvious from the variable name
// so no need to check for missing values
@@ -33,6 +34,7 @@ public final class BritishImperial {
*
* @author Adrien Hopkins
* @since 2019-11-08
+ * @since v0.3.0
*/
public static final class Area {
public static final LinearUnit SQUARE_FOOT = Length.FOOT.toExponent(2);
@@ -48,6 +50,7 @@ public final class BritishImperial {
*
* @author Adrien Hopkins
* @since 2019-10-28
+ * @since v0.3.0
*/
public static final class Length {
/**
@@ -81,6 +84,7 @@ public final class BritishImperial {
*
* @author Adrien Hopkins
* @since 2019-11-08
+ * @since v0.3.0
*/
public static final class Mass {
public static final LinearUnit POUND = Metric.GRAM.times(453.59237);
@@ -99,6 +103,7 @@ public final class BritishImperial {
*
* @author Adrien Hopkins
* @since 2019-11-08
+ * @since v0.3.0
*/
public static final class Volume {
public static final LinearUnit FLUID_OUNCE = Metric.LITRE
diff --git a/src/main/java/sevenUnits/unit/FunctionalUnit.java b/src/main/java/sevenUnits/unit/FunctionalUnit.java
index fb24629..41db164 100644
--- a/src/main/java/sevenUnits/unit/FunctionalUnit.java
+++ b/src/main/java/sevenUnits/unit/FunctionalUnit.java
@@ -27,6 +27,7 @@ import sevenUnits.utils.ObjectProduct;
*
* @author Adrien Hopkins
* @since 2019-05-22
+ * @since v0.3.0
*/
final class FunctionalUnit extends Unit {
/**
@@ -34,6 +35,7 @@ final class FunctionalUnit extends Unit {
* that value expressed in this unit.
*
* @since 2019-05-22
+ * @since v0.3.0
*/
private final DoubleUnaryOperator converterFrom;
@@ -42,6 +44,7 @@ final class FunctionalUnit extends Unit {
* value expressed in the unit's base.
*
* @since 2019-05-22
+ * @since v0.3.0
*/
private final DoubleUnaryOperator converterTo;
@@ -55,6 +58,7 @@ final class FunctionalUnit extends Unit {
* and returns that value expressed in the unit's base.
* @throws NullPointerException if any argument is null
* @since 2019-05-22
+ * @since v0.3.0
*/
public FunctionalUnit(final ObjectProduct<BaseUnit> base,
final DoubleUnaryOperator converterFrom,
@@ -77,6 +81,7 @@ final class FunctionalUnit extends Unit {
* @param ns name and symbol of resulting unit
* @throws NullPointerException if any argument is null
* @since 2019-05-22
+ * @since v0.3.0
*/
public FunctionalUnit(final ObjectProduct<BaseUnit> base,
final DoubleUnaryOperator converterFrom,
diff --git a/src/main/java/sevenUnits/unit/LinearUnit.java b/src/main/java/sevenUnits/unit/LinearUnit.java
index 6c1aba3..7191196 100644
--- a/src/main/java/sevenUnits/unit/LinearUnit.java
+++ b/src/main/java/sevenUnits/unit/LinearUnit.java
@@ -29,6 +29,7 @@ import sevenUnits.utils.UncertainDouble;
*
* @author Adrien Hopkins
* @since 2019-10-16
+ * @since v0.3.0
*/
public final class LinearUnit extends Unit {
/**
@@ -39,6 +40,7 @@ public final class LinearUnit extends Unit {
* @param value value to convert
* @return value expressed as a {@code LinearUnit}
* @since 2019-10-16
+ * @since v0.3.0
* @throws NullPointerException if unit is null
*/
public static LinearUnit fromUnitValue(final Unit unit, final double value) {
@@ -56,6 +58,7 @@ public final class LinearUnit extends Unit {
* @param ns name(s) and symbol of unit
* @return value expressed as a {@code LinearUnit}
* @since 2019-10-21
+ * @since v0.3.0
* @throws NullPointerException if unit or ns is null
*/
public static LinearUnit fromUnitValue(final Unit unit, final double value,
@@ -70,6 +73,7 @@ public final class LinearUnit extends Unit {
* @return the base unit associated with {@code unit}, as a
* {@code LinearUnit}.
* @since 2020-10-02
+ * @since v0.3.0
*/
public static LinearUnit getBase(final Unit unit) {
return new LinearUnit(unit.getBase(), 1, NameSymbol.EMPTY);
@@ -84,6 +88,7 @@ public final class LinearUnit extends Unit {
* @param conversionFactor number to multiply base by
* @return product of base and conversion factor
* @since 2019-10-16
+ * @since v0.3.0
* @throws NullPointerException if unitBase is null
*/
public static LinearUnit valueOf(final ObjectProduct<BaseUnit> unitBase,
@@ -101,6 +106,7 @@ public final class LinearUnit extends Unit {
* @param ns name(s) and symbol of unit
* @return product of base and conversion factor
* @since 2019-10-21
+ * @since v0.3.0
* @throws NullPointerException if unitBase is null
*/
public static LinearUnit valueOf(final ObjectProduct<BaseUnit> unitBase,
@@ -116,6 +122,7 @@ public final class LinearUnit extends Unit {
* </pre>
*
* @since 2019-10-16
+ * @since v0.3.0
*/
private final double conversionFactor;
@@ -125,6 +132,7 @@ public final class LinearUnit extends Unit {
* @param unitBase base of linear unit
* @param conversionFactor conversion factor between base and unit
* @since 2019-10-16
+ * @since v0.3.0
*/
private LinearUnit(final ObjectProduct<BaseUnit> unitBase,
final double conversionFactor, final NameSymbol ns) {
@@ -150,6 +158,7 @@ public final class LinearUnit extends Unit {
* @param value value to convert
* @return converted value
* @since 2019-09-07
+ * @since v0.3.0
* @throws IllegalArgumentException if {@code other} is incompatible for
* conversion with this unit (as tested by
* {@link Unit#canConvertTo}).
@@ -181,6 +190,7 @@ public final class LinearUnit extends Unit {
* Converts an {@code UncertainDouble} to the base unit.
*
* @since 2020-09-07
+ * @since v0.3.0
*/
UncertainDouble convertToBase(final UncertainDouble value) {
return value.timesExact(this.getConversionFactor());
@@ -249,6 +259,7 @@ public final class LinearUnit extends Unit {
/**
* @return conversion factor
* @since 2019-10-16
+ * @since v0.3.0
*/
public double getConversionFactor() {
return this.conversionFactor;
@@ -270,6 +281,7 @@ public final class LinearUnit extends Unit {
* is a {@code BaseUnit b} where
* {@code b.asLinearUnit().equals(this)} returns {@code true}.)
* @since 2019-10-16
+ * @since v0.3.0
*/
public boolean isBase() {
return this.isCoherent() && this.getBase().isSingleObject();
@@ -278,6 +290,7 @@ public final class LinearUnit extends Unit {
/**
* @return whether this unit is coherent (i.e. has conversion factor 1)
* @since 2019-10-16
+ * @since v0.3.0
*/
public boolean isCoherent() {
return this.getConversionFactor() == 1;
@@ -403,6 +416,7 @@ public final class LinearUnit extends Unit {
* @param exponent exponent to raise unit to
* @return result of rounded exponentation
* @since 2024-08-22
+ * @since v1.0.0
* @see ObjectProduct#toExponentRounded
*/
public LinearUnit toExponentRounded(final double exponent) {
diff --git a/src/main/java/sevenUnits/unit/LinearUnitValue.java b/src/main/java/sevenUnits/unit/LinearUnitValue.java
index 8d30907..86520d7 100644
--- a/src/main/java/sevenUnits/unit/LinearUnitValue.java
+++ b/src/main/java/sevenUnits/unit/LinearUnitValue.java
@@ -34,6 +34,7 @@ import sevenUnits.utils.UncertainDouble;
*
* @author Adrien Hopkins
* @since 2020-07-26
+ * @since v0.3.0
*/
public final class LinearUnitValue {
/** The value 1 as a LinearUnitValue. */
@@ -46,6 +47,7 @@ public final class LinearUnitValue {
* @param value value to express
* @return exact {@code LinearUnitValue} instance
* @since 2020-07-26
+ * @since v0.3.0
*/
public static final LinearUnitValue getExact(final LinearUnit unit,
final double value) {
@@ -61,6 +63,7 @@ public final class LinearUnitValue {
* @param value value to express
* @return uncertain {@code LinearUnitValue} instance
* @since 2020-07-26
+ * @since v0.3.0
*/
public static final LinearUnitValue of(final LinearUnit unit,
final UncertainDouble value) {
@@ -77,6 +80,7 @@ public final class LinearUnitValue {
* @param unit unit to express as
* @param value value to express
* @since 2020-07-26
+ * @since v0.3.0
*/
private LinearUnitValue(final LinearUnit unit, final UncertainDouble value) {
this.unit = unit;
@@ -87,6 +91,7 @@ public final class LinearUnitValue {
* @return this value as a {@code UnitValue}. All uncertainty information is
* removed from the returned value.
* @since 2020-08-04
+ * @since v0.3.0
*/
public final UnitValue asUnitValue() {
return UnitValue.of(this.unit, this.value.value());
@@ -96,6 +101,7 @@ public final class LinearUnitValue {
* @param other a {@code LinearUnit}
* @return true iff this value can be represented with {@code other}.
* @since 2020-07-26
+ * @since v0.3.0
*/
public final boolean canConvertTo(final LinearUnit other) {
return this.unit.canConvertTo(other);
@@ -108,6 +114,7 @@ public final class LinearUnitValue {
* @param other new unit to express value in
* @return value expressed in {@code other}
* @since 2020-07-26
+ * @since v0.3.0
*/
public final LinearUnitValue convertTo(final LinearUnit other) {
return LinearUnitValue.of(other, this.unit.convertTo(other, this.value));
@@ -122,6 +129,7 @@ public final class LinearUnitValue {
* @throws IllegalArgumentException if no units are provided or units
* provided have incompatible bases
* @since 2024-08-15
+ * @since v1.0.0
*/
public final List<LinearUnitValue> convertToMultiple(
final List<LinearUnit> others) {
@@ -155,6 +163,7 @@ public final class LinearUnitValue {
* @param divisor value to divide by
* @return multiplied value
* @since 2020-07-28
+ * @since v0.3.0
*/
public LinearUnitValue dividedBy(final double divisor) {
return LinearUnitValue.of(this.unit, this.value.dividedByExact(divisor));
@@ -166,6 +175,7 @@ public final class LinearUnitValue {
* @param divisor value to multiply by
* @return quotient
* @since 2020-07-28
+ * @since v0.3.0
*/
public LinearUnitValue dividedBy(final LinearUnitValue divisor) {
return LinearUnitValue.of(this.unit.dividedBy(divisor.unit),
@@ -178,6 +188,7 @@ public final class LinearUnitValue {
* km) returns true.
*
* @since 2020-07-26
+ * @since v0.3.0
* @see #equals(Object, boolean)
*/
@Override
@@ -202,6 +213,7 @@ public final class LinearUnitValue {
* @return true iff this and obj are equal
*
* @since 2020-07-28
+ * @since v0.3.0
*/
public boolean equals(final Object obj, final boolean avoidFPErrors) {
if (!avoidFPErrors)
@@ -219,6 +231,7 @@ public final class LinearUnitValue {
* @return true iff this and other are within each other's uncertainty range
*
* @since 2020-07-26
+ * @since v0.3.0
*/
public boolean equivalent(final LinearUnitValue other) {
if (other == null
@@ -234,6 +247,7 @@ public final class LinearUnitValue {
/**
* @return the unit
* @since 2020-09-29
+ * @since v0.3.0
*/
public final LinearUnit getUnit() {
return this.unit;
@@ -242,6 +256,7 @@ public final class LinearUnitValue {
/**
* @return the value
* @since 2020-09-29
+ * @since v0.3.0
*/
public final UncertainDouble getValue() {
return this.value;
@@ -250,6 +265,7 @@ public final class LinearUnitValue {
/**
* @return the exact value
* @since 2020-09-07
+ * @since v0.3.0
*/
public final double getValueExact() {
return this.value.value();
@@ -270,6 +286,7 @@ public final class LinearUnitValue {
* @throws IllegalArgumentException if {@code subtrahend} has a unit that is
* not compatible for addition
* @since 2020-07-26
+ * @since v0.3.0
*/
public LinearUnitValue minus(final LinearUnitValue subtrahend) {
Objects.requireNonNull(subtrahend, "subtrahend may not be null");
@@ -292,6 +309,7 @@ public final class LinearUnitValue {
* @throws IllegalArgumentException if {@code addend} has a unit that is not
* compatible for addition
* @since 2020-07-26
+ * @since v0.3.0
*/
public LinearUnitValue plus(final LinearUnitValue addend) {
Objects.requireNonNull(addend, "addend may not be null");
@@ -312,6 +330,7 @@ public final class LinearUnitValue {
* @param multiplier value to multiply by
* @return multiplied value
* @since 2020-07-28
+ * @since v0.3.0
*/
public LinearUnitValue times(final double multiplier) {
return LinearUnitValue.of(this.unit, this.value.timesExact(multiplier));
@@ -323,6 +342,7 @@ public final class LinearUnitValue {
* @param multiplier value to multiply by
* @return product
* @since 2020-07-28
+ * @since v0.3.0
*/
public LinearUnitValue times(final LinearUnitValue multiplier) {
return LinearUnitValue.of(this.unit.times(multiplier.unit),
@@ -335,6 +355,7 @@ public final class LinearUnitValue {
* @param exponent exponent to raise to
* @return result of exponentiation
* @since 2020-07-28
+ * @since v0.3.0
*/
public LinearUnitValue toExponent(final int exponent) {
return LinearUnitValue.of(this.unit.toExponent(exponent),
@@ -348,6 +369,7 @@ public final class LinearUnitValue {
* @return result of exponentation
*
* @since 2024-08-22
+ * @since v1.0.0
* @see ObjectProduct#toExponentRounded
*/
public LinearUnitValue toExponentRounded(final double exponent) {
@@ -375,6 +397,7 @@ public final class LinearUnitValue {
* @return string representing this value
*
* @since 2020-07-26
+ * @since v0.3.0
*/
public String toString(final boolean showUncertainty,
RoundingMode roundingMode) {
diff --git a/src/main/java/sevenUnits/unit/LoadingException.java b/src/main/java/sevenUnits/unit/LoadingException.java
index b806147..7b3d708 100644
--- a/src/main/java/sevenUnits/unit/LoadingException.java
+++ b/src/main/java/sevenUnits/unit/LoadingException.java
@@ -25,6 +25,7 @@ import java.util.Optional;
*
* @author Adrien Hopkins
* @since 2024-08-22
+ * @since v1.0.0
*/
public final class LoadingException extends RuntimeException {
/** The type of file that was being loaded. */
diff --git a/src/main/java/sevenUnits/unit/Metric.java b/src/main/java/sevenUnits/unit/Metric.java
index 166cbcf..34fd0b8 100644
--- a/src/main/java/sevenUnits/unit/Metric.java
+++ b/src/main/java/sevenUnits/unit/Metric.java
@@ -36,6 +36,7 @@ import sevenUnits.utils.ObjectProduct;
*
* @author Adrien Hopkins
* @since 2019-10-16
+ * @since v0.3.0
*/
// this class is just constants, most of which are obvious from the variable name
// so no need to check for missing values
@@ -109,6 +110,7 @@ public final class Metric {
*
* @author Adrien Hopkins
* @since 2019-11-08
+ * @since v0.3.0
*/
public static final class Constants {
public static final LinearUnit EARTH_GRAVITY = METRE.dividedBy(SECOND)
diff --git a/src/main/java/sevenUnits/unit/USCustomary.java b/src/main/java/sevenUnits/unit/USCustomary.java
index 1923d9e..be8c5e2 100644
--- a/src/main/java/sevenUnits/unit/USCustomary.java
+++ b/src/main/java/sevenUnits/unit/USCustomary.java
@@ -21,6 +21,7 @@ package sevenUnits.unit;
*
* @author Adrien Hopkins
* @since 2019-10-21
+ * @since v0.3.0
*/
// this class is just constants, most of which are obvious from the variable name
// so no need to check for missing values
@@ -31,6 +32,7 @@ public final class USCustomary {
*
* @author Adrien Hopkins
* @since 2019-11-08
+ * @since v0.3.0
*/
public static final class Area {
public static final LinearUnit SQUARE_SURVEY_FOOT = Length.SURVEY_FOOT
@@ -49,6 +51,7 @@ public final class USCustomary {
*
* @author Adrien Hopkins
* @since 2019-10-28
+ * @since v0.3.0
*/
public static final class Length {
public static final LinearUnit FOOT = BritishImperial.Length.FOOT;
@@ -79,6 +82,7 @@ public final class USCustomary {
*
* @author Adrien Hopkins
* @since 2019-11-08
+ * @since v0.3.0
*/
public static final class Mass {
public static final LinearUnit GRAIN = BritishImperial.Mass.GRAIN;
@@ -99,6 +103,7 @@ public final class USCustomary {
*
* @author Adrien Hopkins
* @since 2019-11-08
+ * @since v0.3.0
*/
public static final class Volume {
public static final LinearUnit CUBIC_INCH = Length.INCH.toExponent(3);
diff --git a/src/main/java/sevenUnits/unit/Unit.java b/src/main/java/sevenUnits/unit/Unit.java
index 5d67ed0..d651fe2 100644
--- a/src/main/java/sevenUnits/unit/Unit.java
+++ b/src/main/java/sevenUnits/unit/Unit.java
@@ -31,6 +31,7 @@ import sevenUnits.utils.ObjectProduct;
*
* @author Adrien Hopkins
* @since 2019-10-16
+ * @since v0.3.0
*/
public abstract class Unit implements Nameable {
/**
@@ -51,6 +52,7 @@ public abstract class Unit implements Nameable {
* and returns that value expressed in the unit's base.
* @return a unit that uses the provided functions to convert.
* @since 2019-05-22
+ * @since v0.3.0
* @throws NullPointerException if any argument is null
*/
public static final Unit fromConversionFunctions(
@@ -79,6 +81,7 @@ public abstract class Unit implements Nameable {
* @param ns names and symbol of unit
* @return a unit that uses the provided functions to convert.
* @since 2019-05-22
+ * @since v0.3.0
* @throws NullPointerException if any argument is null
*/
public static final Unit fromConversionFunctions(
@@ -92,6 +95,7 @@ public abstract class Unit implements Nameable {
* The combination of units that this unit is based on.
*
* @since 2019-10-16
+ * @since v0.3.0
*/
private final ObjectProduct<BaseUnit> unitBase;
@@ -99,6 +103,7 @@ public abstract class Unit implements Nameable {
* This unit's name(s) and symbol
*
* @since 2020-09-07
+ * @since v0.3.0
*/
private final NameSymbol nameSymbol;
@@ -106,6 +111,7 @@ public abstract class Unit implements Nameable {
* Cache storing the result of getDimension()
*
* @since 2019-10-16
+ * @since v0.3.0
*/
private transient ObjectProduct<BaseDimension> dimension = null;
@@ -113,6 +119,7 @@ public abstract class Unit implements Nameable {
* A constructor that constructs {@code BaseUnit} instances.
*
* @since 2019-10-16
+ * @since v0.3.0
*/
Unit(final NameSymbol nameSymbol) {
if (this instanceof BaseUnit) {
@@ -128,6 +135,7 @@ public abstract class Unit implements Nameable {
* @param unitBase base of unit
* @param ns names and symbol of unit
* @since 2019-10-16
+ * @since v0.3.0
* @throws NullPointerException if unitBase or ns is null
*/
protected Unit(ObjectProduct<BaseUnit> unitBase, NameSymbol ns) {
@@ -187,6 +195,7 @@ public abstract class Unit implements Nameable {
* @param value value to convert
* @return converted value
* @since 2019-05-22
+ * @since v0.3.0
* @throws IllegalArgumentException if {@code other} is incompatible for
* conversion with this unit (as tested by
* {@link Unit#canConvertTo}).
@@ -255,6 +264,7 @@ public abstract class Unit implements Nameable {
/**
* @return the nameSymbol
* @since 2020-09-07
+ * @since v0.3.0
*/
@Override
public final NameSymbol getNameSymbol() {
@@ -281,6 +291,7 @@ public abstract class Unit implements Nameable {
* @return true iff this unit is metric.
*
* @since 2020-08-27
+ * @since v0.3.0
*/
public final boolean isMetric() {
// first condition - check that it is a linear unit
@@ -302,6 +313,7 @@ public abstract class Unit implements Nameable {
/**
* @return a string representing this unit's definition
* @since 2022-03-10
+ * @since v0.3.0
*/
public String toDefinitionString() {
if (!this.unitBase.getNameSymbol().isEmpty())
@@ -314,6 +326,7 @@ public abstract class Unit implements Nameable {
/**
* @return a string containing both this unit's name and its definition
* @since 2022-03-10
+ * @since v0.3.0
*/
public final String toFullString() {
return this.toString() + " (" + this.toDefinitionString() + ")";
@@ -333,6 +346,7 @@ public abstract class Unit implements Nameable {
* @param ns name(s) and symbol to use
* @return a copy of this unit with provided name(s) and symbol
* @since 2019-10-21
+ * @since v0.3.0
* @throws NullPointerException if ns is null
*/
public Unit withName(final NameSymbol ns) {
diff --git a/src/main/java/sevenUnits/unit/UnitDatabase.java b/src/main/java/sevenUnits/unit/UnitDatabase.java
index 6cf794b..b0d026f 100644
--- a/src/main/java/sevenUnits/unit/UnitDatabase.java
+++ b/src/main/java/sevenUnits/unit/UnitDatabase.java
@@ -138,6 +138,7 @@ public final class UnitDatabase {
/**
* @since 2019-05-03
+ * @since v0.3.0
*/
@Override
public boolean equals(final Object o) {
@@ -160,6 +161,7 @@ public final class UnitDatabase {
/**
* @since 2019-05-03
+ * @since v0.3.0
*/
@Override
public int hashCode() {
@@ -181,6 +183,7 @@ public final class UnitDatabase {
* value.
*
* @since 2019-05-03
+ * @since v0.3.0
*/
@Override
public String toString() {
@@ -307,6 +310,7 @@ public final class UnitDatabase {
* @return the next element in the iterator, without iterating over
* it
* @since 2019-05-03
+ * @since v0.3.0
*/
private Entry<String, Unit> peek() {
if (!this.hasNext())
@@ -333,6 +337,7 @@ public final class UnitDatabase {
* of the representation are unspecified and subject to change.
*
* @since 2019-05-03
+ * @since v0.3.0
*/
@Override
public String toString() {
@@ -622,6 +627,7 @@ public final class UnitDatabase {
* @return the next element in the iterator, without iterating over
* it
* @since 2019-05-03
+ * @since v0.3.0
*/
private String peek() {
if (!this.hasNext())
@@ -645,6 +651,7 @@ public final class UnitDatabase {
* of the representation are unspecified and subject to change.
*
* @since 2019-05-03
+ * @since v0.3.0
*/
@Override
public String toString() {
@@ -1136,6 +1143,7 @@ public final class UnitDatabase {
* @param exponentUnit exponent
* @return result
* @since 2020-08-04
+ * @since v0.3.0
*/
private static final LinearUnitValue exponentiateUnitValues(
final LinearUnitValue base, final LinearUnitValue exponentValue) {
@@ -1151,6 +1159,7 @@ public final class UnitDatabase {
/**
* @return true if entry represents a removable duplicate entry of map.
* @since 2021-05-22
+ * @since v0.3.0
*/
static <T> boolean isRemovableDuplicate(Map<String, T> map,
Entry<String, T> entry) {
@@ -1236,6 +1245,7 @@ public final class UnitDatabase {
* A parser that can parse unit value expressions.
*
* @since 2020-08-04
+ * @since v0.3.0
*/
private final ExpressionParser<LinearUnitValue> unitValueExpressionParser = new ExpressionParser.Builder<>(
this::getLinearUnitValue)
@@ -1297,6 +1307,7 @@ public final class UnitDatabase {
* @param prefixRepetitionRule the rule that determines when prefix
* repetition is allowed
* @since 2020-08-26
+ * @since v0.3.0
*/
public UnitDatabase(Predicate<List<UnitPrefix>> prefixRepetitionRule) {
this.prefixlessUnits = new HashMap<>();
@@ -1468,6 +1479,7 @@ public final class UnitDatabase {
* @param name name of unit set
* @param value unit set to add
* @since 2024-08-16
+ * @since v1.0.0
*/
public void addUnitSet(String name, List<LinearUnit> value) {
if (value.isEmpty())
@@ -1486,6 +1498,7 @@ public final class UnitDatabase {
* Removes all units, unit sets, prefixes and dimensions from this database.
*
* @since 2022-02-26
+ * @since v0.4.0
*/
public void clear() {
this.dimensions.clear();
@@ -1538,6 +1551,7 @@ public final class UnitDatabase {
* @return true iff there is a unit set with this name
*
* @since 2024-08-16
+ * @since v1.0.0
*/
public boolean containsUnitSetName(String name) {
return this.unitSets.containsKey(name);
@@ -1559,6 +1573,7 @@ public final class UnitDatabase {
* @param expression expression to parse
* @return {@code LinearUnitValue} representing value of expression
* @since 2020-08-04
+ * @since v0.3.0
*/
public LinearUnitValue evaluateUnitExpression(final String expression) {
Objects.requireNonNull(expression, "expression must not be null.");
@@ -1697,6 +1712,7 @@ public final class UnitDatabase {
* @param name name of unit
* @return {@code LinearUnitValue} instance
* @since 2020-08-04
+ * @since v0.3.0
*/
LinearUnitValue getLinearUnitValue(final String name) {
try {
@@ -1735,6 +1751,7 @@ public final class UnitDatabase {
* @param unitName name of unit
* @return prefixes
* @since 2020-08-26
+ * @since v0.3.0
*/
List<UnitPrefix> getPrefixesFromName(final String unitName) {
final List<UnitPrefix> prefixes = new ArrayList<>();
@@ -1800,6 +1817,7 @@ public final class UnitDatabase {
/**
* @return the prefixRepetitionRule
* @since 2020-08-26
+ * @since v0.3.0
*/
public final Predicate<List<UnitPrefix>> getPrefixRepetitionRule() {
return this.prefixRepetitionRule;
@@ -1904,6 +1922,7 @@ public final class UnitDatabase {
* @return unit set with that name
*
* @since 2024-08-16
+ * @since v1.0.0
*/
public List<LinearUnit> getUnitSet(String name) {
final List<LinearUnit> unitSet = this.unitSets.get(name);
@@ -1916,6 +1935,7 @@ public final class UnitDatabase {
* Parses a semicolon-separated expression to get the unit set being used.
*
* @since 2024-08-22
+ * @since v1.0.0
*/
List<LinearUnit> getUnitSetFromExpression(String expression) {
final String[] parts = expression.split(";");
@@ -1991,6 +2011,7 @@ public final class UnitDatabase {
* @param stream stream to load from
* @return list of all errors that happened loading the stream
* @since 2021-03-27
+ * @since v0.3.0
*/
public List<LoadingException> loadDimensionsFromStream(
final InputStream stream) {
@@ -2062,6 +2083,7 @@ public final class UnitDatabase {
* @param stream stream to load from
* @return list of all errors that happened loading the stream
* @since 2021-03-27
+ * @since v0.3.0
*/
public List<LoadingException> loadUnitsFromStream(InputStream stream) {
final List<LoadingException> errors = new ArrayList<>();
@@ -2098,6 +2120,7 @@ public final class UnitDatabase {
/**
* @param prefixRepetitionRule the prefixRepetitionRule to set
* @since 2020-08-26
+ * @since v0.3.0
*/
public final void setPrefixRepetitionRule(
Predicate<List<UnitPrefix>> prefixRepetitionRule) {
@@ -2169,6 +2192,7 @@ public final class UnitDatabase {
/**
* @return an unmodifiable map mapping names to unit sets
* @since 2024-08-16
+ * @since v1.0.0
*/
public Map<String, List<LinearUnit>> unitSetMap() {
return Collections.unmodifiableMap(this.unitSets);
diff --git a/src/main/java/sevenUnits/unit/UnitPrefix.java b/src/main/java/sevenUnits/unit/UnitPrefix.java
index 6ac9128..0fd3421 100644
--- a/src/main/java/sevenUnits/unit/UnitPrefix.java
+++ b/src/main/java/sevenUnits/unit/UnitPrefix.java
@@ -28,6 +28,7 @@ import sevenUnits.utils.Nameable;
*
* @author Adrien Hopkins
* @since 2019-10-16
+ * @since v0.3.0
*/
public final class UnitPrefix implements Nameable {
/**
@@ -36,6 +37,7 @@ public final class UnitPrefix implements Nameable {
* @param multiplier multiplier of prefix
* @return prefix
* @since 2019-10-16
+ * @since v0.3.0
*/
public static UnitPrefix valueOf(final double multiplier) {
return new UnitPrefix(multiplier, NameSymbol.EMPTY);
@@ -48,6 +50,7 @@ public final class UnitPrefix implements Nameable {
* @param ns name(s) and symbol of prefix
* @return prefix
* @since 2019-10-16
+ * @since v0.3.0
* @throws NullPointerException if ns is null
*/
public static UnitPrefix valueOf(final double multiplier,
@@ -60,6 +63,7 @@ public final class UnitPrefix implements Nameable {
* This prefix's name(s) and symbol.
*
* @since 2022-04-16
+ * @since v0.4.0
*/
private final NameSymbol nameSymbol;
@@ -67,6 +71,7 @@ public final class UnitPrefix implements Nameable {
* The number that this prefix multiplies units by
*
* @since 2019-10-16
+ * @since v0.3.0
*/
private final double multiplier;
@@ -88,6 +93,7 @@ public final class UnitPrefix implements Nameable {
* @param divisor number to divide by
* @return quotient of prefix and scalar
* @since 2019-10-16
+ * @since v0.3.0
*/
public UnitPrefix dividedBy(final double divisor) {
return valueOf(this.getMultiplier() / divisor);
@@ -143,6 +149,7 @@ public final class UnitPrefix implements Nameable {
/**
* @return prefix's multiplier
* @since 2019-11-26
+ * @since v0.3.0
*/
public double getMultiplier() {
return this.multiplier;
@@ -169,6 +176,7 @@ public final class UnitPrefix implements Nameable {
* @param multiplicand number to multiply by
* @return product of prefix and scalar
* @since 2019-10-16
+ * @since v0.3.0
*/
public UnitPrefix times(final double multiplicand) {
return valueOf(this.getMultiplier() * multiplicand);
@@ -180,6 +188,7 @@ public final class UnitPrefix implements Nameable {
* @return sum of prefixes
*
* @since 2024-03-03
+ * @since v0.5.0
*/
public UnitPrefix plus(final UnitPrefix other) {
return valueOf(this.getMultiplier() + other.getMultiplier());
@@ -191,6 +200,7 @@ public final class UnitPrefix implements Nameable {
* @return difference of prefixes
*
* @since 2024-03-03
+ * @since v0.5.0
*/
public UnitPrefix minus(final UnitPrefix other) {
return valueOf(this.getMultiplier() - other.getMultiplier());
@@ -239,6 +249,7 @@ public final class UnitPrefix implements Nameable {
* @param ns name(s) and symbol to use
* @return copy of this prefix with provided name(s) and symbol
* @since 2019-11-26
+ * @since v0.3.0
* @throws NullPointerException if ns is null
*/
public UnitPrefix withName(final NameSymbol ns) {
diff --git a/src/main/java/sevenUnits/unit/UnitType.java b/src/main/java/sevenUnits/unit/UnitType.java
index d445418..a331d3d 100644
--- a/src/main/java/sevenUnits/unit/UnitType.java
+++ b/src/main/java/sevenUnits/unit/UnitType.java
@@ -30,6 +30,7 @@ import java.util.function.Predicate;
* </ul>
*
* @since 2022-04-10
+ * @since v0.4.0
*/
public enum UnitType {
/** Units that pass {@link Unit#isMetric} */
@@ -51,6 +52,7 @@ public enum UnitType {
* @param isSemiMetric predicate to determine if a unit is semi-metric
* @return type of unit
* @since 2022-04-18
+ * @since v0.4.0
*/
public static final UnitType getType(Unit u, Predicate<Unit> isSemiMetric) {
if (isSemiMetric.test(u))
diff --git a/src/main/java/sevenUnits/unit/UnitValue.java b/src/main/java/sevenUnits/unit/UnitValue.java
index 97b7e54..4003c17 100644
--- a/src/main/java/sevenUnits/unit/UnitValue.java
+++ b/src/main/java/sevenUnits/unit/UnitValue.java
@@ -29,6 +29,7 @@ import sevenUnits.utils.NameSymbol;
*
* @author Adrien Hopkins
* @since 2020-07-26
+ * @since v0.3.0
*/
public final class UnitValue {
/**
@@ -59,6 +60,7 @@ public final class UnitValue {
* @param other unit to try to convert to
* @return true if this value can be converted to {@code other}.
* @since 2020-10-01
+ * @since v0.3.0
*/
public final boolean canConvertTo(Unit other) {
return this.unit.canConvertTo(other);
@@ -84,6 +86,7 @@ public final class UnitValue {
* needed.
* @return this unit as a {@link LinearUnitValue}
* @since 2020-09-29
+ * @since v0.3.0
*/
public final LinearUnitValue convertToBase(NameSymbol ns) {
final LinearUnit base = LinearUnit.getBase(this.unit).withName(ns);
@@ -95,6 +98,7 @@ public final class UnitValue {
* @return a {@code LinearUnitValue} that is equivalent to this value. It
* will have zero uncertainty.
* @since 2020-09-29
+ * @since v0.3.0
*/
public final LinearUnitValue convertToLinear(LinearUnit newUnit) {
return LinearUnitValue.getExact(newUnit,
@@ -121,6 +125,7 @@ public final class UnitValue {
/**
* @return the unit
* @since 2020-09-29
+ * @since v0.3.0
*/
public final Unit getUnit() {
return this.unit;
@@ -129,6 +134,7 @@ public final class UnitValue {
/**
* @return the value
* @since 2020-09-29
+ * @since v0.3.0
*/
public final double getValue() {
return this.value;
diff --git a/src/main/java/sevenUnits/utils/ConditionalExistenceCollections.java b/src/main/java/sevenUnits/utils/ConditionalExistenceCollections.java
index b46e821..dd21a22 100644
--- a/src/main/java/sevenUnits/utils/ConditionalExistenceCollections.java
+++ b/src/main/java/sevenUnits/utils/ConditionalExistenceCollections.java
@@ -53,6 +53,7 @@ import java.util.function.Predicate;
*
* @author Adrien Hopkins
* @since 2019-10-17
+ * @since v0.3.0
*/
public final class ConditionalExistenceCollections {
/**
@@ -60,6 +61,7 @@ public final class ConditionalExistenceCollections {
*
* @author Adrien Hopkins
* @since 2019-10-17
+ * @since v0.3.0
* @param <E> type of element in collection
*/
static final class ConditionalExistenceCollection<E>
@@ -73,6 +75,7 @@ public final class ConditionalExistenceCollections {
* @param collection
* @param existenceCondition
* @since 2019-10-17
+ * @since v0.3.0
*/
private ConditionalExistenceCollection(final Collection<E> collection,
final Predicate<E> existenceCondition) {
@@ -149,6 +152,7 @@ public final class ConditionalExistenceCollections {
*
* @author Adrien Hopkins
* @since 2019-10-17
+ * @since v0.3.0
* @param <E> type of elements in iterator
*/
static final class ConditionalExistenceIterator<E> implements Iterator<E> {
@@ -163,6 +167,7 @@ public final class ConditionalExistenceCollections {
* @param iterator
* @param condition
* @since 2019-10-17
+ * @since v0.3.0
*/
private ConditionalExistenceIterator(final Iterator<E> iterator,
final Predicate<E> condition) {
@@ -175,6 +180,7 @@ public final class ConditionalExistenceCollections {
* Gets the next element, and sets nextElement and hasNext accordingly.
*
* @since 2019-10-17
+ * @since v0.3.0
*/
private void getAndSetNextElement() {
do {
@@ -214,6 +220,7 @@ public final class ConditionalExistenceCollections {
*
* @author Adrien Hopkins
* @since 2019-10-17
+ * @since v0.3.0
* @param <K> key type
* @param <V> value type
*/
@@ -227,6 +234,7 @@ public final class ConditionalExistenceCollections {
* @param map
* @param entryExistenceCondition
* @since 2019-10-17
+ * @since v0.3.0
*/
private ConditionalExistenceMap(final Map<K, V> map,
final Predicate<Entry<K, V>> entryExistenceCondition) {
@@ -313,6 +321,7 @@ public final class ConditionalExistenceCollections {
*
* @author Adrien Hopkins
* @since 2019-10-17
+ * @since v0.3.0
* @param <E> type of element in set
*/
static final class ConditionalExistenceSet<E> extends AbstractSet<E> {
@@ -325,6 +334,7 @@ public final class ConditionalExistenceCollections {
* @param set set to use
* @param existenceCondition condition where element exists
* @since 2019-10-17
+ * @since v0.3.0
*/
private ConditionalExistenceSet(final Set<E> set,
final Predicate<E> existenceCondition) {
@@ -410,6 +420,7 @@ public final class ConditionalExistenceCollections {
* @param existenceCondition elements only exist if this returns true
* @return wrapper collection
* @since 2019-10-17
+ * @since v0.3.0
*/
public static final <E> Collection<E> conditionalExistenceCollection(
final Collection<E> collection,
@@ -427,6 +438,7 @@ public final class ConditionalExistenceCollections {
* @param existenceCondition elements only exist if this returns true
* @return wrapper iterator
* @since 2019-10-17
+ * @since v0.3.0
*/
public static final <E> Iterator<E> conditionalExistenceIterator(
final Iterator<E> iterator, final Predicate<E> existenceCondition) {
@@ -443,6 +455,7 @@ public final class ConditionalExistenceCollections {
* @param entryExistenceCondition mappings only exist if this returns true
* @return wrapper map
* @since 2019-10-17
+ * @since v0.3.0
*/
public static final <K, V> Map<K, V> conditionalExistenceMap(
final Map<K, V> map,
@@ -459,6 +472,7 @@ public final class ConditionalExistenceCollections {
* @param existenceCondition elements only exist if this returns true
* @return wrapper set
* @since 2019-10-17
+ * @since v0.3.0
*/
public static final <E> Set<E> conditionalExistenceSet(final Set<E> set,
final Predicate<E> existenceCondition) {
diff --git a/src/main/java/sevenUnits/utils/DecimalComparison.java b/src/main/java/sevenUnits/utils/DecimalComparison.java
index 4136818..c7564c4 100644
--- a/src/main/java/sevenUnits/utils/DecimalComparison.java
+++ b/src/main/java/sevenUnits/utils/DecimalComparison.java
@@ -193,6 +193,7 @@ public final class DecimalComparison {
* @param b second value to test
* @return whether they are equal
* @since 2020-09-07
+ * @since v0.3.0
*/
public static final boolean equals(final UncertainDouble a,
final UncertainDouble b) {
diff --git a/src/main/java/sevenUnits/utils/ExpressionParser.java b/src/main/java/sevenUnits/utils/ExpressionParser.java
index 8ab6c95..1c8df9f 100644
--- a/src/main/java/sevenUnits/utils/ExpressionParser.java
+++ b/src/main/java/sevenUnits/utils/ExpressionParser.java
@@ -87,6 +87,7 @@ public final class ExpressionParser<T> {
* A map mapping operator strings to numeric functions.
*
* @since 2024-03-23
+ * @since v0.5.0
*/
private final Map<String, PriorityBiFunction<T, UncertainDouble, T>> numericOperators;
@@ -526,6 +527,7 @@ public final class ExpressionParser<T> {
* A map mapping operator strings to numeric functions.
*
* @since 2024-03-23
+ * @since v0.5.0
*/
private final Map<String, PriorityBiFunction<T, UncertainDouble, T>> numericOperators;
diff --git a/src/main/java/sevenUnits/utils/NameSymbol.java b/src/main/java/sevenUnits/utils/NameSymbol.java
index c0c8f94..ebb1e8b 100644
--- a/src/main/java/sevenUnits/utils/NameSymbol.java
+++ b/src/main/java/sevenUnits/utils/NameSymbol.java
@@ -29,6 +29,7 @@ import java.util.Set;
*
* @author Adrien Hopkins
* @since 2019-10-21
+ * @since v0.3.0
*/
public final class NameSymbol {
/** The {@code NameSymbol} with all fields empty. */
@@ -67,6 +68,7 @@ public final class NameSymbol {
* @param symbol symbol to use
* @return NameSymbol instance
* @since 2019-10-21
+ * @since v0.3.0
* @throws NullPointerException if name or symbol is null
*/
public static final NameSymbol of(final String name, final String symbol) {
@@ -83,6 +85,7 @@ public final class NameSymbol {
* @param otherNames other names to use
* @return NameSymbol instance
* @since 2019-10-21
+ * @since v0.3.0
* @throws NullPointerException if any argument is null
*/
public static final NameSymbol of(final String name, final String symbol,
@@ -101,6 +104,7 @@ public final class NameSymbol {
* @param otherNames other names to use
* @return NameSymbol instance
* @since 2019-10-21
+ * @since v0.3.0
* @throws NullPointerException if any argument is null
*/
public static final NameSymbol of(final String name, final String symbol,
@@ -117,6 +121,7 @@ public final class NameSymbol {
* @param name name to use
* @return NameSymbol instance
* @since 2019-10-21
+ * @since v0.3.0
* @throws NullPointerException if name is null
*/
public static final NameSymbol ofName(final String name) {
@@ -140,6 +145,7 @@ public final class NameSymbol {
* @param otherNames other names to use
* @return NameSymbol instance
* @since 2019-11-26
+ * @since v0.3.0
*/
public static final NameSymbol ofNullable(final String name,
final String symbol, final Set<String> otherNames) {
@@ -163,6 +169,7 @@ public final class NameSymbol {
* @param otherNames other names to use
* @return NameSymbol instance
* @since 2019-11-26
+ * @since v0.3.0
*/
public static final NameSymbol ofNullable(final String name,
final String symbol, final String... otherNames) {
@@ -176,6 +183,7 @@ public final class NameSymbol {
* @param symbol symbol to use
* @return NameSymbol instance
* @since 2019-10-21
+ * @since v0.3.0
* @throws NullPointerException if symbol is null
*/
public static final NameSymbol ofSymbol(final String symbol) {
@@ -196,6 +204,7 @@ public final class NameSymbol {
* @param otherNames other names and/or spellings, should be a mutable copy
* of the argument
* @since 2019-10-21
+ * @since v0.3.0
*/
NameSymbol(final Optional<String> primaryName,
final Optional<String> symbol, final Set<String> otherNames) {
@@ -241,6 +250,7 @@ public final class NameSymbol {
/**
* @return otherNames
* @since 2019-10-21
+ * @since v0.3.0
*/
public final Set<String> getOtherNames() {
return this.otherNames;
@@ -249,6 +259,7 @@ public final class NameSymbol {
/**
* @return primaryName
* @since 2019-10-21
+ * @since v0.3.0
*/
public final Optional<String> getPrimaryName() {
return this.primaryName;
@@ -257,6 +268,7 @@ public final class NameSymbol {
/**
* @return symbol
* @since 2019-10-21
+ * @since v0.3.0
*/
public final Optional<String> getSymbol() {
return this.symbol;
@@ -302,8 +314,8 @@ public final class NameSymbol {
* @param name additional name to add
* @return copy of this NameSymbol with the additional name
*
- * @since v0.4.0
* @since 2022-04-19
+ * @since v0.4.0
*/
public final NameSymbol withExtraName(String name) {
if (this.primaryName.isPresent()) {
diff --git a/src/main/java/sevenUnits/utils/Nameable.java b/src/main/java/sevenUnits/utils/Nameable.java
index 15026b7..efd1ab8 100644
--- a/src/main/java/sevenUnits/utils/Nameable.java
+++ b/src/main/java/sevenUnits/utils/Nameable.java
@@ -24,12 +24,14 @@ import java.util.Set;
* and symbol data should be immutable.
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public interface Nameable {
/**
* @return a name for the object - if there's a primary name, it's that,
* otherwise the symbol, otherwise "Unnamed"
* @since 2022-02-26
+ * @since v0.4.0
*/
default String getName() {
final NameSymbol ns = this.getNameSymbol();
@@ -40,12 +42,14 @@ public interface Nameable {
* @return a {@code NameSymbol} that contains this object's primary name,
* symbol and other names
* @since 2020-09-07
+ * @since v0.3.0
*/
NameSymbol getNameSymbol();
/**
* @return set of alternate names
* @since 2020-09-07
+ * @since v0.3.0
*/
default Set<String> getOtherNames() {
return this.getNameSymbol().getOtherNames();
@@ -54,6 +58,7 @@ public interface Nameable {
/**
* @return preferred name of object
* @since 2020-09-07
+ * @since v0.3.0
*/
default Optional<String> getPrimaryName() {
return this.getNameSymbol().getPrimaryName();
@@ -63,6 +68,7 @@ public interface Nameable {
* @return a short name for the object - if there's a symbol, it's that,
* otherwise the symbol, otherwise "Unnamed"
* @since 2022-02-26
+ * @since v0.4.0
*/
default String getShortName() {
final NameSymbol ns = this.getNameSymbol();
@@ -72,6 +78,7 @@ public interface Nameable {
/**
* @return short symbol representing object
* @since 2020-09-07
+ * @since v0.3.0
*/
default Optional<String> getSymbol() {
return this.getNameSymbol().getSymbol();
diff --git a/src/main/java/sevenUnits/utils/ObjectProduct.java b/src/main/java/sevenUnits/utils/ObjectProduct.java
index 772ff5e..1b8832e 100644
--- a/src/main/java/sevenUnits/utils/ObjectProduct.java
+++ b/src/main/java/sevenUnits/utils/ObjectProduct.java
@@ -33,6 +33,7 @@ import java.util.function.Function;
* @author Adrien Hopkins
* @param <T> type of object that is being multiplied
* @since 2019-10-16
+ * @since v0.3.0
*/
public class ObjectProduct<T> implements Nameable {
/**
@@ -47,6 +48,7 @@ public class ObjectProduct<T> implements Nameable {
* @param <T> type of objects that can be multiplied
* @return empty product
* @since 2019-10-16
+ * @since v0.3.0
*/
public static final <T> ObjectProduct<T> empty() {
return new ObjectProduct<>(new HashMap<>());
@@ -59,6 +61,7 @@ public class ObjectProduct<T> implements Nameable {
* @param map map mapping objects to exponents
* @return object product
* @since 2019-10-16
+ * @since v0.3.0
*/
public static final <T> ObjectProduct<T> fromExponentMapping(
final Map<T, Integer> map) {
@@ -73,6 +76,7 @@ public class ObjectProduct<T> implements Nameable {
* @param <T> type of object contained in returned ObjectProduct
* @return product
* @since 2019-10-16
+ * @since v0.3.0
* @throws NullPointerException if object is null
*/
public static final <T> ObjectProduct<T> oneOf(final T object) {
@@ -87,6 +91,7 @@ public class ObjectProduct<T> implements Nameable {
* treats zero as null, and is immutable.
*
* @since 2019-10-16
+ * @since v0.3.0
*/
final Map<T, Integer> exponents;
@@ -100,6 +105,7 @@ public class ObjectProduct<T> implements Nameable {
*
* @param exponents objects that make up this product
* @since 2019-10-16
+ * @since v0.3.0
*/
ObjectProduct(final Map<T, Integer> exponents) {
this(exponents, NameSymbol.EMPTY);
@@ -111,6 +117,7 @@ public class ObjectProduct<T> implements Nameable {
* @param exponents objects that make up this product
* @param nameSymbol name and symbol of object product
* @since 2019-10-16
+ * @since v0.3.0
*/
ObjectProduct(final Map<T, Integer> exponents, NameSymbol nameSymbol) {
this.exponents = Collections.unmodifiableMap(
@@ -125,6 +132,7 @@ public class ObjectProduct<T> implements Nameable {
* @param other other product
* @return quotient of two products
* @since 2019-10-16
+ * @since v0.3.0
* @throws NullPointerException if other is null
*/
public ObjectProduct<T> dividedBy(final ObjectProduct<T> other) {
@@ -158,6 +166,7 @@ public class ObjectProduct<T> implements Nameable {
/**
* @return immutable map mapping objects to exponents
* @since 2019-10-16
+ * @since v0.3.0
*/
public Map<T, Integer> exponentMap() {
return this.exponents;
@@ -209,6 +218,7 @@ public class ObjectProduct<T> implements Nameable {
* @return true if this product is a single object, i.e. it has one exponent
* of one and no other nonzero exponents
* @since 2019-10-16
+ * @since v0.3.0
*/
public boolean isSingleObject() {
int oneCount = 0;
@@ -229,6 +239,7 @@ public class ObjectProduct<T> implements Nameable {
* @param other other product
* @return product of two products
* @since 2019-10-16
+ * @since v0.3.0
* @throws NullPointerException if other is null
*/
public ObjectProduct<T> times(final ObjectProduct<T> other) {
@@ -254,6 +265,7 @@ public class ObjectProduct<T> implements Nameable {
* @param exponent exponent
* @return result of exponentiation
* @since 2019-10-16
+ * @since v0.3.0
*/
public ObjectProduct<T> toExponent(final int exponent) {
final Map<T, Integer> map = new HashMap<>(this.exponents);
@@ -274,6 +286,7 @@ public class ObjectProduct<T> implements Nameable {
* @return result of exponentiation
*
* @since 2024-08-22
+ * @since v0.3.0
*/
public ObjectProduct<T> toExponentRounded(final double exponent) {
final Map<T, Integer> map = new HashMap<>(this.exponents);
@@ -315,6 +328,7 @@ public class ObjectProduct<T> implements Nameable {
* @param objectToString function to convert objects to strings
* @return string representation of product
* @since 2019-10-16
+ * @since v0.3.0
*/
public String toString(final Function<T, String> objectToString) {
final List<String> positiveStringComponents = new ArrayList<>();
@@ -347,6 +361,7 @@ public class ObjectProduct<T> implements Nameable {
* @return named version of this {@code ObjectProduct}, using data from
* {@code nameSymbol}
* @since 2021-12-15
+ * @since v0.3.0
*/
public ObjectProduct<T> withName(NameSymbol nameSymbol) {
return new ObjectProduct<>(this.exponents, nameSymbol);
diff --git a/src/main/java/sevenUnits/utils/SemanticVersionNumber.java b/src/main/java/sevenUnits/utils/SemanticVersionNumber.java
index bf198ae..cde3d37 100644
--- a/src/main/java/sevenUnits/utils/SemanticVersionNumber.java
+++ b/src/main/java/sevenUnits/utils/SemanticVersionNumber.java
@@ -39,8 +39,8 @@ import java.util.regex.Pattern;
* are made
* </ol>
*
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public final class SemanticVersionNumber
implements Comparable<SemanticVersionNumber> {
@@ -52,8 +52,8 @@ public final class SemanticVersionNumber
* throw NullPointerExceptions, everything else throws
* IllegalArgumentException.
*
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public static final class Builder {
private final int major;
@@ -69,8 +69,8 @@ public final class SemanticVersionNumber
* @param major major version number of final version
* @param minor minor version number of final version
* @param patch patch version number of final version
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
private Builder(int major, int minor, int patch) {
this.major = major;
@@ -82,8 +82,8 @@ public final class SemanticVersionNumber
/**
* @return version number created by this builder
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public SemanticVersionNumber build() {
return new SemanticVersionNumber(this.major, this.minor, this.patch,
@@ -95,8 +95,8 @@ public final class SemanticVersionNumber
*
* @param identifiers build metadata
* @return this builder
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public Builder buildMetadata(List<String> identifiers) {
Objects.requireNonNull(identifiers, "identifiers may not be null");
@@ -115,8 +115,8 @@ public final class SemanticVersionNumber
*
* @param identifiers build metadata
* @return this builder
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public Builder buildMetadata(String... identifiers) {
Objects.requireNonNull(identifiers, "identifiers may not be null");
@@ -154,8 +154,8 @@ public final class SemanticVersionNumber
*
* @param identifiers pre-release identifier(s) to add
* @return this builder
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public Builder preRelease(int... identifiers) {
Objects.requireNonNull(identifiers, "identifiers may not be null");
@@ -173,8 +173,8 @@ public final class SemanticVersionNumber
*
* @param identifiers pre-release identifier(s) to add
* @return this builder
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public Builder preRelease(List<String> identifiers) {
Objects.requireNonNull(identifiers, "identifiers may not be null");
@@ -193,8 +193,8 @@ public final class SemanticVersionNumber
*
* @param identifiers pre-release identifier(s) to add
* @return this builder
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public Builder preRelease(String... identifiers) {
Objects.requireNonNull(identifiers, "identifiers may not be null");
@@ -214,8 +214,8 @@ public final class SemanticVersionNumber
* @param identifier1 first identifier
* @param identifier2 second identifier
* @return this builder
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public Builder preRelease(String identifier1, int identifier2) {
Objects.requireNonNull(identifier1, "identifier1 may not be null");
@@ -280,8 +280,8 @@ public final class SemanticVersionNumber
* @param patch patch version number of final version
* @return version number builder
* @throws IllegalArgumentException if any argument is negative
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public static final SemanticVersionNumber.Builder builder(int major,
int minor, int patch) {
@@ -304,8 +304,8 @@ public final class SemanticVersionNumber
* @param b second list
* @return result of comparison as in a comparator
* @see Comparator
- * @since v0.4.0
* @since 2022-02-20
+ * @since v0.4.0
*/
private static final int compareIdentifiers(List<String> a, List<String> b) {
// test pre-release size
@@ -365,8 +365,8 @@ public final class SemanticVersionNumber
*
* @param versionString string to parse
* @return {@code SemanticVersionNumber} instance
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
* @see #toString
*/
public static final SemanticVersionNumber fromString(String versionString) {
@@ -409,8 +409,8 @@ public final class SemanticVersionNumber
*
* @param versionString string to test
* @return true iff string is valid
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public static final boolean isValidVersionString(String versionString) {
return VERSION_NUMBER.matcher(versionString).matches();
@@ -429,8 +429,8 @@ public final class SemanticVersionNumber
* @throws IllegalArgumentException if any argument is negative or if the
* preReleaseType is null, empty or not
* alphanumeric (0-9, A-Z, a-z, - only)
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public static final SemanticVersionNumber preRelease(int major, int minor,
int patch, String preReleaseType, int preReleaseNumber) {
@@ -467,8 +467,8 @@ public final class SemanticVersionNumber
* @param patch patch version number
* @return {@code SemanticVersionNumber} instance
* @throws IllegalArgumentException if any argument is negative
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public static final SemanticVersionNumber stableVersion(int major, int minor,
int patch) {
@@ -500,8 +500,8 @@ public final class SemanticVersionNumber
* @param patch patch version number
* @param preReleaseIdentifiers pre-release version data
* @param buildMetadata build metadata
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
private SemanticVersionNumber(int major, int minor, int patch,
List<String> preReleaseIdentifiers, List<String> buildMetadata) {
@@ -514,8 +514,8 @@ public final class SemanticVersionNumber
/**
* @return build metadata (empty if there is none)
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public List<String> buildMetadata() {
return Collections.unmodifiableList(this.buildMetadata);
@@ -585,8 +585,8 @@ public final class SemanticVersionNumber
* @param other version to compare with
* @return true if you can definitely upgrade to {@code other} without
* changing code
- * @since v0.4.0
* @since 2022-02-20
+ * @since v0.4.0
*/
public boolean compatibleWith(SemanticVersionNumber other) {
Objects.requireNonNull(other, "other may not be null");
@@ -639,8 +639,8 @@ public final class SemanticVersionNumber
/**
* @return true iff this version is stable (major version > 0 and not a
* pre-release)
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public boolean isStable() {
return this.major > 0 && this.preReleaseIdentifiers.isEmpty();
@@ -649,8 +649,8 @@ public final class SemanticVersionNumber
/**
* @return the MAJOR version number, incremented when you make backwards
* incompatible API changes
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public int majorVersion() {
return this.major;
@@ -659,8 +659,8 @@ public final class SemanticVersionNumber
/**
* @return the MINOR version number, incremented when you add backwards
* compatible functionality
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public int minorVersion() {
return this.minor;
@@ -669,8 +669,8 @@ public final class SemanticVersionNumber
/**
* @return the PATCH version number, incremented when you make backwards
* compatible bug fixes
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public int patchVersion() {
return this.patch;
@@ -679,8 +679,8 @@ public final class SemanticVersionNumber
/**
* @return identifiers describing this pre-release (empty if not a
* pre-release)
- * @since v0.4.0
* @since 2022-02-19
+ * @since v0.4.0
*/
public List<String> preReleaseIdentifiers() {
return Collections.unmodifiableList(this.preReleaseIdentifiers);
diff --git a/src/main/java/sevenUnits/utils/UncertainDouble.java b/src/main/java/sevenUnits/utils/UncertainDouble.java
index 46803d1..f700454 100644
--- a/src/main/java/sevenUnits/utils/UncertainDouble.java
+++ b/src/main/java/sevenUnits/utils/UncertainDouble.java
@@ -29,6 +29,7 @@ import java.util.regex.Pattern;
* arguments is null.
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final class UncertainDouble implements Comparable<UncertainDouble> {
/**
@@ -56,6 +57,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @throws NumberFormatException if the argument is not a number
*
* @since 2022-04-18
+ * @since v0.4.0
*/
public static final UncertainDouble fromRoundedString(String s) {
final BigDecimal value = new BigDecimal(s);
@@ -75,6 +77,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return {@code UncertainDouble} instance
* @throws IllegalArgumentException if the string is invalid
* @since 2020-09-07
+ * @since v0.3.0
*/
public static final UncertainDouble fromString(String s) {
Objects.requireNonNull(s, "s may not be null");
@@ -116,6 +119,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return {@code UncertainDouble} instance with these parameters
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public static final UncertainDouble of(double value, double uncertainty) {
return new UncertainDouble(value, uncertainty);
@@ -132,6 +136,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return {@code UncertainDouble} instance with these parameters
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public static final UncertainDouble ofRelative(double value,
double relativeUncertainty) {
@@ -146,6 +151,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @param value
* @param uncertainty
* @since 2020-09-07
+ * @since v0.3.0
*/
private UncertainDouble(double value, double uncertainty) {
this.value = value;
@@ -178,6 +184,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return quotient
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final UncertainDouble dividedBy(UncertainDouble other) {
Objects.requireNonNull(other, "other may not be null");
@@ -192,6 +199,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return quotient
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final UncertainDouble dividedByExact(double other) {
return UncertainDouble.of(this.value / other, this.uncertainty / other);
@@ -216,6 +224,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return true iff this and {@code other} are within each other's
* uncertainty range.
* @since 2020-09-07
+ * @since v0.3.0
*/
public final boolean equivalent(UncertainDouble other) {
Objects.requireNonNull(other, "other may not be null");
@@ -227,6 +236,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* Gets the preferred scale for rounding a value for toString.
*
* @since 2020-09-07
+ * @since v0.3.0
*/
private final int getDisplayScale() {
// round based on uncertainty
@@ -263,6 +273,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return true iff the value has no uncertainty
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final boolean isExact() {
return this.uncertainty == 0;
@@ -275,6 +286,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return result of subtraction
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final UncertainDouble minus(UncertainDouble other) {
Objects.requireNonNull(other, "other may not be null");
@@ -289,6 +301,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return result of subtraction
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final UncertainDouble minusExact(double other) {
return UncertainDouble.of(this.value - other, this.uncertainty);
@@ -301,6 +314,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return result of addition
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final UncertainDouble plus(UncertainDouble other) {
Objects.requireNonNull(other, "other may not be null");
@@ -315,6 +329,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return result of addition
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final UncertainDouble plusExact(double other) {
return UncertainDouble.of(this.value + other, this.uncertainty);
@@ -323,6 +338,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
/**
* @return relative uncertainty
* @since 2020-09-07
+ * @since v0.3.0
*/
public final double relativeUncertainty() {
return this.uncertainty / this.value;
@@ -335,6 +351,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return product
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final UncertainDouble times(UncertainDouble other) {
Objects.requireNonNull(other, "other may not be null");
@@ -349,6 +366,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return product
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final UncertainDouble timesExact(double other) {
return UncertainDouble.of(this.value * other, this.uncertainty * other);
@@ -361,6 +379,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return result of exponentation
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final UncertainDouble toExponent(UncertainDouble other) {
Objects.requireNonNull(other, "other may not be null");
@@ -381,6 +400,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return result of exponentation
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final UncertainDouble toExponentExact(double other) {
return UncertainDouble.ofRelative(Math.pow(this.value, other),
@@ -404,6 +424,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* </pre>
*
* @since 2020-09-07
+ * @since v0.3.0
*/
@Override
public final String toString() {
@@ -441,6 +462,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
* @return string representation of this {@code UncertainDouble}
*
* @since 2020-09-07
+ * @since v0.3.0
*/
public final String toString(boolean showUncertainty,
RoundingMode roundingMode) {
@@ -473,6 +495,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
/**
* @return absolute uncertainty
* @since 2020-09-07
+ * @since v0.3.0
*/
public final double uncertainty() {
return this.uncertainty;
@@ -481,6 +504,7 @@ public final class UncertainDouble implements Comparable<UncertainDouble> {
/**
* @return value without uncertainty
* @since 2020-09-07
+ * @since v0.3.0
*/
public final double value() {
return this.value;