package de.invesdwin.util.math;
import javax.annotation.concurrent.Immutable;
import de.invesdwin.norva.apt.staticfacade.StaticFacadeDefinition;
import de.invesdwin.util.lang.ADelegateComparator;
import de.invesdwin.util.math.internal.ADoublesStaticFacade;
import de.invesdwin.util.math.internal.CheckedCastDoubles;
import de.invesdwin.util.math.internal.CheckedCastDoublesObj;
@StaticFacadeDefinition(name = "de.invesdwin.util.math.internal.ADoublesStaticFacade", targets = {
CheckedCastDoubles.class, CheckedCastDoublesObj.class, com.google.common.primitives.Doubles.class })
@Immutable
public final class Doubles extends ADoublesStaticFacade {
public static final ADelegateComparator<Double> COMPARATOR = new ADelegateComparator<Double>() {
@Override
protected Comparable<?> getCompareCriteria(final Double e) {
return e;
}
};
private Doubles() {}
public static Double max(final Double first, final Double second) {
if (first == null) {
return second;
} else if (second == null) {
return first;
} else {
return Math.max(first, second);
}
}
public static Double min(final Double first, final Double second) {
if (first == null) {
return second;
} else if (second == null) {
return first;
} else {
return Math.min(first, second);
}
}
public static Double between(final Double value, final Double min, final Double max) {
return max(min(value, max), min);
}
public static double[] checkedCastVector(final float[] value) {
final double[] doubleVector = new double[value.length];
for (int i = 0; i < value.length; i++) {
doubleVector[i] = value[i];
}
return doubleVector;
}
public static double[][] checkedCastMatrix(final float[][] value) {
final double[][] doubleMatrix = new double[value.length][];
for (int row = 0; row < value.length; row++) {
final float[] vector = value[row];
doubleMatrix[row] = checkedCastVector(vector);
}
return doubleMatrix;
}
public static double[] checkedCastVector(final long[] value) {
final double[] doubleVector = new double[value.length];
for (int i = 0; i < value.length; i++) {
doubleVector[i] = value[i];
}
return doubleVector;
}
public static double[][] checkedCastMatrix(final long[][] value) {
final double[][] doubleMatrix = new double[value.length][];
for (int row = 0; row < value.length; row++) {
final long[] vector = value[row];
doubleMatrix[row] = checkedCastVector(vector);
}
return doubleMatrix;
}
}