blob: 7b92e252246423084ad663495a138684ad6d7117 [file] [log] [blame]
package org.checkerframework.checker.units.util;
import org.checkerframework.checker.units.qual.A;
import org.checkerframework.checker.units.qual.C;
import org.checkerframework.checker.units.qual.K;
import org.checkerframework.checker.units.qual.N;
import org.checkerframework.checker.units.qual.cd;
import org.checkerframework.checker.units.qual.degrees;
import org.checkerframework.checker.units.qual.g;
import org.checkerframework.checker.units.qual.h;
import org.checkerframework.checker.units.qual.kN;
import org.checkerframework.checker.units.qual.kg;
import org.checkerframework.checker.units.qual.km;
import org.checkerframework.checker.units.qual.km2;
import org.checkerframework.checker.units.qual.km3;
import org.checkerframework.checker.units.qual.kmPERh;
import org.checkerframework.checker.units.qual.m;
import org.checkerframework.checker.units.qual.m2;
import org.checkerframework.checker.units.qual.m3;
import org.checkerframework.checker.units.qual.mPERs;
import org.checkerframework.checker.units.qual.mPERs2;
import org.checkerframework.checker.units.qual.min;
import org.checkerframework.checker.units.qual.mm;
import org.checkerframework.checker.units.qual.mm2;
import org.checkerframework.checker.units.qual.mm3;
import org.checkerframework.checker.units.qual.mol;
import org.checkerframework.checker.units.qual.radians;
import org.checkerframework.checker.units.qual.s;
import org.checkerframework.checker.units.qual.t;
import org.checkerframework.framework.qual.AnnotatedFor;
// TODO: add fromTo methods for all useful unit combinations.
/** Utility methods to generate annotated types and to convert between them. */
@SuppressWarnings({"units", "checkstyle:constantname"})
@AnnotatedFor("nullness")
public class UnitsTools {
// Acceleration
public static final @mPERs2 int mPERs2 = 1;
// Angle
public static final @radians double rad = 1;
public static final @degrees double deg = 1;
public static @radians double toRadians(@degrees double angdeg) {
return Math.toRadians(angdeg);
}
public static @degrees double toDegrees(@radians double angrad) {
return Math.toDegrees(angrad);
}
// Area
public static final @mm2 int mm2 = 1;
public static final @m2 int m2 = 1;
public static final @km2 int km2 = 1;
// Volume
public static final @mm3 int mm3 = 1;
public static final @m3 int m3 = 1;
public static final @km3 int km3 = 1;
// Current
public static final @A int A = 1;
// Luminance
public static final @cd int cd = 1;
// Lengths
public static final @mm int mm = 1;
public static final @m int m = 1;
public static final @km int km = 1;
public static @m int fromMilliMeterToMeter(@mm int mm) {
return mm / 1000;
}
public static @mm int fromMeterToMilliMeter(@m int m) {
return m * 1000;
}
public static @km int fromMeterToKiloMeter(@m int m) {
return m / 1000;
}
public static @m int fromKiloMeterToMeter(@km int km) {
return km * 1000;
}
// Mass
public static final @g int g = 1;
public static final @kg int kg = 1;
public static final @t int t = 1;
public static @kg int fromGramToKiloGram(@g int g) {
return g / 1000;
}
public static @g int fromKiloGramToGram(@kg int kg) {
return kg * 1000;
}
public static @t int fromKiloGramToMetricTon(@kg int kg) {
return kg / 1000;
}
public static @kg int fromMetricTonToKiloGram(@t int t) {
return t * 1000;
}
// Force
public static final @N int N = 1;
public static final @kN int kN = 1;
public static @kN int fromNewtonToKiloNewton(@N int N) {
return N / 1000;
}
public static @N int fromKiloNewtonToNewton(@kN int kN) {
return kN * 1000;
}
// Speed
public static final @mPERs int mPERs = 1;
public static final @kmPERh int kmPERh = 1;
public static @kmPERh double fromMeterPerSecondToKiloMeterPerHour(@mPERs double mps) {
return mps * 3.6d;
}
public static @mPERs double fromKiloMeterPerHourToMeterPerSecond(@kmPERh double kmph) {
return kmph / 3.6d;
}
// Substance
public static final @mol int mol = 1;
// Temperature
public static final @K int K = 1;
public static final @C int C = 1;
public static @C int fromKelvinToCelsius(@K int k) {
return k - (int) 273.15;
}
public static @K int fromCelsiusToKelvin(@C int c) {
return c + (int) 273.15;
}
// Time
public static final @s int s = 1;
public static final @min int min = 1;
public static final @h int h = 1;
public static @min int fromSecondToMinute(@s int s) {
return s / 60;
}
public static @s int fromMinuteToSecond(@min int min) {
return min * 60;
}
public static @h int fromMinuteToHour(@min int min) {
return min / 60;
}
public static @min int fromHourToMinute(@h int h) {
return h * 60;
}
}