package com.jakehilborn.speedr.utils;
public class UnitUtils {
public static final long NANO_TENTH_SECOND = 100000000L;
public static final long NANO_ONE_SECOND = 1000000000L;
public static final long NANO_ONE_MINUTE = 60000000000L;
public static final long NANO_ONE_HOUR = 3600000000000L;
public static Integer msToMph(Double ms) {
if (ms == null) return null;
return (int) Math.round(ms * 2.23694);
}
public static Integer msToKph(Double ms) {
if (ms == null) return null;
return (int) Math.round(ms * 3.6);
}
public static Integer msToMphRoundToFive(Double ms) { //meters per second to nearest increment of 5 mph
if (ms == null) return null;
return (int) (5 * Math.round(ms * 2.23694 / 5));
}
public static Integer msToKphRoundToFive(Double ms) { //meters per second to nearest increment of 5 kph
if (ms == null) return null;
return (int) (5 * Math.round(ms * 3.6 / 5));
}
public static Double mphToMs(Integer mph) {
if (mph == null) return null;
return mph * 0.44704;
}
public static Double kphToMs(Integer kph) {
if (kph == null) return null;
return kph * 0.277778;
}
public static Double knotsToMs(Integer knots) {
if (knots == null) return null;
return knots * 0.514444;
}
public static Integer nanosToSeconds(Long nanos) {
if (nanos == null) return null;
return nanosToSeconds((double) nanos);
}
public static Integer nanosToSeconds(Double nanos) {
if (nanos == null) return null;
return (int) (nanos / NANO_ONE_SECOND);
}
public static Double roundNanosToNearestSecond(Double nanos) {
if (nanos == null) return null;
return (double) (Math.round(nanos / NANO_ONE_SECOND) * NANO_ONE_SECOND);
}
public static Integer nanosTo10thsModuloSeconds(Double nanos) {
if (nanos == null) return null;
return (int) ((nanos % NANO_ONE_SECOND) / NANO_TENTH_SECOND);
}
public static Integer nanosToSecondsModuloMinutes(Double nanos) {
if (nanos == null) return null;
return (int) ((nanos % NANO_ONE_MINUTE) / NANO_ONE_SECOND);
}
public static Integer nanosToMinutesModuloHours(Double nanos) {
if (nanos == null) return null;
return (int) ((nanos % NANO_ONE_HOUR) / NANO_ONE_MINUTE);
}
public static Integer nanosToHoursModuloMinutes(Double nanos) {
if (nanos == null) return null;
return (int) (nanos / NANO_ONE_HOUR);
}
public static Long secondsToNanos(Integer seconds) {
if (seconds == null) return null;
return (long) seconds * NANO_ONE_SECOND;
}
public static Long secondsToMillis(Integer seconds) {
if (seconds == null) return null;
return (long) seconds * 1000;
}
}