
This vendors the jscience javax.measure package, extracted from https://repo1.maven.org/maven2/org/jscience/jscience/4.3.1/jscience-4.3.1-sources.jar Using this package as a dependency leads to conflicting classes, which we can't solve from gradle. Instead of repackaging the jar file the easiest solution seems to be to vendor the sources we need.
86 lines
2.5 KiB
Java
86 lines
2.5 KiB
Java
/*
|
|
* JScience - Java(TM) Tools and Libraries for the Advancement of Sciences.
|
|
* Copyright (C) 2006 - JScience (http://jscience.org/)
|
|
* All rights reserved.
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software is
|
|
* freely granted, provided that this notice is preserved.
|
|
*/
|
|
package javax.measure.converter;
|
|
|
|
/**
|
|
* <p> This class represents a converter multiplying numeric values by a
|
|
* constant scaling factor (approximated as a <code>double</code>).
|
|
* For exact scaling conversions {@link RationalConverter} is preferred.</p>
|
|
*
|
|
* <p> Instances of this class are immutable.</p>
|
|
*
|
|
* @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
|
|
* @version 3.1, April 22, 2006
|
|
*/
|
|
public final class MultiplyConverter extends UnitConverter {
|
|
|
|
/**
|
|
* Holds the scale factor.
|
|
*/
|
|
private final double _factor;
|
|
|
|
/**
|
|
* Creates a multiply converter with the specified scale factor.
|
|
*
|
|
* @param factor the scale factor.
|
|
* @throws IllegalArgumentException if offset is one (or close to one).
|
|
*/
|
|
public MultiplyConverter(double factor) {
|
|
if ((float)factor == 1.0)
|
|
throw new IllegalArgumentException("Identity converter not allowed");
|
|
_factor = factor;
|
|
}
|
|
|
|
/**
|
|
* Returns the scale factor.
|
|
*
|
|
* @return the scale factor.
|
|
*/
|
|
public double getFactor() {
|
|
return _factor;
|
|
}
|
|
|
|
@Override
|
|
public UnitConverter inverse() {
|
|
return new MultiplyConverter(1.0 / _factor);
|
|
}
|
|
|
|
@Override
|
|
public double convert(double amount) {
|
|
return _factor * amount;
|
|
}
|
|
|
|
@Override
|
|
public boolean isLinear() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
public UnitConverter concatenate(UnitConverter converter) {
|
|
if (converter instanceof MultiplyConverter) {
|
|
double factor = _factor * ((MultiplyConverter) converter)._factor;
|
|
return valueOf(factor);
|
|
} else if (converter instanceof RationalConverter) {
|
|
double factor = _factor
|
|
* ((RationalConverter) converter).getDividend()
|
|
/ ((RationalConverter) converter).getDivisor();
|
|
return valueOf(factor);
|
|
} else {
|
|
return super.concatenate(converter);
|
|
}
|
|
}
|
|
|
|
private static UnitConverter valueOf(double factor) {
|
|
float asFloat = (float) factor;
|
|
return asFloat == 1.0f ? UnitConverter.IDENTITY
|
|
: new MultiplyConverter(factor);
|
|
}
|
|
|
|
private static final long serialVersionUID = 1L;
|
|
} |