5package org.wpilib.units;
7import static org.wpilib.units.Units.Value;
9import org.wpilib.units.measure.Acceleration;
10import org.wpilib.units.measure.Angle;
11import org.wpilib.units.measure.AngularAcceleration;
12import org.wpilib.units.measure.AngularMomentum;
13import org.wpilib.units.measure.AngularVelocity;
14import org.wpilib.units.measure.Current;
15import org.wpilib.units.measure.Dimensionless;
16import org.wpilib.units.measure.Distance;
17import org.wpilib.units.measure.Energy;
18import org.wpilib.units.measure.Force;
19import org.wpilib.units.measure.Frequency;
20import org.wpilib.units.measure.LinearAcceleration;
21import org.wpilib.units.measure.LinearMomentum;
22import org.wpilib.units.measure.LinearVelocity;
23import org.wpilib.units.measure.Mass;
24import org.wpilib.units.measure.MomentOfInertia;
25import org.wpilib.units.measure.Mult;
26import org.wpilib.units.measure.Per;
27import org.wpilib.units.measure.Power;
28import org.wpilib.units.measure.Resistance;
29import org.wpilib.units.measure.Temperature;
30import org.wpilib.units.measure.Time;
31import org.wpilib.units.measure.Torque;
32import org.wpilib.units.measure.Velocity;
33import org.wpilib.units.measure.Voltage;
41public interface Measure<U
extends Unit> extends Comparable<Measure<U>> {
83 if (this.unit().equals(
unit)) {
96 @SuppressWarnings(
"unchecked")
98 return (U)
unit().getBaseUnit();
108 return Math.abs(this.
in(
unit));
179 && multiplier.
baseUnit().equals(ratio.denominator().getBaseUnit())) {
182 return ratio.numerator().ofBaseUnits(baseUnitResult);
184 &&
baseUnit().equals(ratio.denominator().getBaseUnit())) {
187 return ratio.numerator().ofBaseUnits(baseUnitResult);
190 &&
per.denominator().getBaseUnit().equals(otherPer.numerator().getBaseUnit())
191 &&
per.numerator().getBaseUnit().equals(otherPer.denominator().getBaseUnit())) {
194 return Value.of(baseUnitResult);
208 return switch (multiplier) {
209 case Acceleration<?> acceleration ->
times(acceleration);
210 case Angle angle ->
times(angle);
211 case AngularAcceleration angularAcceleration ->
times(angularAcceleration);
212 case AngularMomentum angularMomentum ->
times(angularMomentum);
213 case AngularVelocity angularVelocity ->
times(angularVelocity);
214 case Current current ->
times(current);
216 case Dimensionless dimensionless ->
times(dimensionless);
217 case Distance distance ->
times(distance);
218 case Energy energy ->
times(energy);
219 case Force force ->
times(force);
220 case Frequency frequency ->
times(frequency);
221 case LinearAcceleration linearAcceleration ->
times(linearAcceleration);
222 case LinearVelocity linearVelocity ->
times(linearVelocity);
223 case Mass mass ->
times(mass);
224 case MomentOfInertia momentOfInertia ->
times(momentOfInertia);
225 case Mult<?, ?> mult ->
times(mult);
227 case Power power ->
times(power);
228 case Temperature temperature ->
times(temperature);
229 case Time time ->
times(time);
230 case Torque torque ->
times(torque);
231 case Velocity<?> velocity ->
times(velocity);
232 case Voltage voltage ->
times(voltage);
233 case Resistance resistance ->
times(resistance);
540 @SuppressWarnings(
"unchecked")
573 return ImmutableMeasure.ofBaseUnits(
603 if (
unit().getBaseUnit().equals(divisor.
unit().getBaseUnit())) {
605 return Value.ofBaseUnits(baseUnitResult);
608 if (divisor instanceof Dimensionless) {
610 return unit().ofBaseUnits(baseUnitResult);
616 return ratio.reciprocal().ofBaseUnits(baseUnitResult);
624 return ratio.denominator().ofBaseUnits(baseUnitResult);
632 return switch (divisor) {
633 case Acceleration<?> acceleration ->
div(acceleration);
634 case Angle angle ->
div(angle);
635 case AngularAcceleration angularAcceleration ->
div(angularAcceleration);
636 case AngularMomentum angularMomentum ->
div(angularMomentum);
637 case AngularVelocity angularVelocity ->
div(angularVelocity);
638 case Current current ->
div(current);
640 case Dimensionless dimensionless ->
div(dimensionless);
641 case Distance distance ->
div(distance);
642 case Energy energy ->
div(energy);
643 case Force force ->
div(force);
644 case Frequency frequency ->
div(frequency);
645 case LinearAcceleration linearAcceleration ->
div(linearAcceleration);
646 case LinearVelocity linearVelocity ->
div(linearVelocity);
647 case Mass mass ->
div(mass);
648 case MomentOfInertia momentOfInertia ->
div(momentOfInertia);
649 case Mult<?, ?> mult ->
div(mult);
651 case Power power ->
div(power);
652 case Temperature temperature ->
div(temperature);
653 case Time time ->
div(time);
654 case Torque torque ->
div(torque);
655 case Velocity<?> velocity ->
div(velocity);
656 case Voltage voltage ->
div(voltage);
657 case Resistance resistance ->
div(resistance);
946 return div(divisorUnit.one());
957 return div(divisorUnit.
one());
968 return div(divisorUnit.one());
979 return div(divisorUnit.one());
990 return div(divisorUnit.one());
1001 return div(divisorUnit.
one());
1012 return div(divisorUnit.
one());
1023 return div(divisorUnit.
one());
1034 return div(divisorUnit.one());
1045 return div(divisorUnit.one());
1056 return div(divisorUnit.one());
1067 return div(divisorUnit.one());
1078 return div(divisorUnit.one());
1089 return div(divisorUnit.
one());
1100 return div(divisorUnit.one());
1111 return div(divisorUnit.
one());
1122 return div(divisorUnit.one());
1133 return div(divisorUnit.
one());
1144 return div(divisorUnit.
one());
1155 return div(period.
of(1));
1166 return div(divisorUnit.one());
1177 return div(divisorUnit.one());
1188 return div(divisorUnit.
one());
1199 return div(divisorUnit.one());
1213 return ImmutableMeasure.ofBaseUnits(
1214 baseUnitMagnitude() / divisor.baseUnitMagnitude(), divisor.unit().denominator());
1233 if (!this.
unit().getBaseUnit().equivalent(other.
unit().getBaseUnit())) {
1270 return this.
unit().getBaseUnit().equals(other.
unit().getBaseUnit())
1329 static <U extends Unit, T extends Measure<U>> T
max(T... measures) {
1330 if (measures.length == 0) {
1335 for (T measure : measures) {
1336 if (
max ==
null || measure.gt(
max)) {
1353 static <U extends Unit, T extends Measure<U>> T
min(T... measures) {
1354 if (measures.length == 0) {
1359 for (T measure : measures) {
1360 if (
max ==
null || measure.lt(
max)) {
1377 return String.format(
"%.3e %s",
magnitude(),
unit().symbol());
Measure<? extends MultUnit< A, B > > one()
static< A extends Unit, B extends Unit > MultUnit< A, B > combine(A a, B b)
static< N extends Unit, D extends Unit > PerUnit< N, D > combine(N numerator, D denominator)
Measure<? extends PerUnit< N, D > > one()
Time of(double magnitude)
static< D extends Unit > VelocityUnit< D > combine(D unit, TimeUnit period)
default Measure<?> per(VoltageUnit divisorUnit)
default Measure<?> div(Mass divisor)
Measure< U > times(Dimensionless multiplier)
default Measure<?> div(AngularAcceleration divisor)
default Measure<?> per(PowerUnit divisorUnit)
default boolean lte(Measure< U > o)
default Measure<?> per(TemperatureUnit divisorUnit)
default Measure<?> per(TorqueUnit divisorUnit)
default Measure<?> div(Angle divisor)
default Measure<?> times(LinearMomentum multiplier)
default double copySign(Measure< U > other, U unit)
default Measure<?> times(Distance multiplier)
default Measure<?> div(AngularMomentum divisor)
default Measure<?> per(FrequencyUnit divisorUnit)
static< U extends Unit, T extends Measure< U > > T max(T... measures)
default Measure<?> div(Current divisor)
default< Other extends Unit > Measure< Other > divideRatio(Measure<? extends PerUnit<? extends U, Other > > divisor)
default Measure<?> per(AngleUnit divisorUnit)
default Measure<?> times(Measure<?> multiplier)
default< Other extends Unit > Measure< Other > timesRatio(Measure<? extends PerUnit<? extends Other, U > > ratio)
default Measure<?> times(Current multiplier)
default Measure<?> div(Resistance divisor)
default Measure<?> div(LinearAcceleration divisor)
default Measure<?> times(AngularVelocity multiplier)
default double in(U unit)
default Measure<?> div(Distance divisor)
default String toShortString()
default Measure<?> times(Velocity<?> multiplier)
default Measure<?> per(LinearVelocityUnit divisorUnit)
default Measure<?> times(Time multiplier)
Measure< U > plus(Measure<? extends U > other)
default Measure<?> times(MomentOfInertia multiplier)
Measure< U > unaryMinus()
Measure< U > minus(Measure<? extends U > other)
default Measure<?> per(CurrentUnit divisorUnit)
default Measure<?> per(LinearAccelerationUnit divisorUnit)
default Measure<?> times(Temperature multiplier)
default Measure<?> per(AngularMomentumUnit divisorUnit)
default Measure<?> per(AccelerationUnit<?> divisorUnit)
default Measure<?> div(Measure<?> divisor)
default Measure<?> times(Per<?, ?> multiplier)
default Measure<?> per(MomentOfInertiaUnit divisorUnit)
default Measure<?> per(EnergyUnit divisorUnit)
default Measure<?> times(Mass multiplier)
default Measure<?> times(Power multiplier)
default Measure<?> div(Per<?, ?> divisor)
Measure< U > div(double divisor)
default Measure<?> per(LinearMomentumUnit divisorUnit)
default Measure<?> div(Power divisor)
default Measure<?> times(Torque multiplier)
default Dimensionless timesInverse(Measure<? extends PerUnit< DimensionlessUnit, ? extends U > > multiplier)
Measure< U > times(double multiplier)
default Measure<?> per(ResistanceUnit divisorUnit)
default Measure<?> div(Voltage divisor)
default boolean gt(Measure< U > o)
default Measure<?> per(MultUnit<?, ?> divisorUnit)
static< U extends Unit, T extends Measure< U > > T min(T... measures)
default Measure<?> times(Angle multiplier)
default Measure<?> div(Frequency divisor)
default Measure<?> per(ForceUnit divisorUnit)
default Measure<?> div(Torque divisor)
default Measure<?> times(LinearVelocity multiplier)
default Measure<?> per(PerUnit<?, ?> divisorUnit)
default double abs(U unit)
default< Other extends Unit, M extends Measure< Other > > M timesConversionFactor(Measure<? extends PerUnit< Other, U > > conversionFactor)
default boolean isNear(Measure<?> other, double varianceThreshold)
default Measure<?> div(Energy divisor)
default Measure<?> times(Resistance multiplier)
default Measure<?> div(Mult<?, ?> divisor)
default Measure<?> per(MassUnit divisorUnit)
default boolean gte(Measure< U > o)
default Measure<?> div(Temperature divisor)
double EQUIVALENCE_THRESHOLD
default Measure<?> div(Acceleration<?> divisor)
default Measure<?> per(VelocityUnit<?> divisorUnit)
default Measure<?> div(Time divisor)
default Measure<?> times(Voltage multiplier)
double baseUnitMagnitude()
default Measure<?> div(LinearVelocity divisor)
default Measure<?> times(AngularMomentum multiplier)
default Measure<?> div(AngularVelocity divisor)
default Measure<?> div(LinearMomentum divisor)
default String toLongString()
default Measure<?> times(Energy multiplier)
default Measure<?> per(DistanceUnit divisorUnit)
default Measure<?> times(AngularAcceleration multiplier)
default Measure<?> div(MomentOfInertia divisor)
default Measure<?> times(Frequency multiplier)
default Measure<?> times(Mult<?, ?> multiplier)
default boolean isNear(Measure< U > other, Measure< U > tolerance)
default Measure<?> times(LinearAcceleration multiplier)
Measure< U > div(Dimensionless divisor)
default Measure<?> times(Force multiplier)
default Measure<?> times(Acceleration<?> multiplier)
default Measure<?> per(TimeUnit period)
default Measure<?> per(AngularAccelerationUnit divisorUnit)
default Measure<?> div(Velocity<?> divisor)
default boolean isEquivalent(Measure<?> other)
default int compareTo(Measure< U > o)
default Measure<?> div(Force divisor)
default boolean lt(Measure< U > o)
default Measure<?> per(AngularVelocityUnit divisorUnit)