RobotCore 1.0
WPILib port to raspberry Pi
Loading...
Searching...
No Matches
MultUnit.java
1// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
4
5package org.wpilib.units;
6
7import java.util.Objects;
8import org.wpilib.units.measure.Mult;
9
18public class MultUnit<A extends Unit, B extends Unit> extends Unit {
19 private final A m_unitA;
20 private final B m_unitB;
21
22 @SuppressWarnings("rawtypes")
23 private static final CombinatoryUnitCache<Unit, Unit, MultUnit> cache =
24 new CombinatoryUnitCache<>(MultUnit::new);
25
33 private MultUnit(A a, B b) {
34 super(
35 a.isBaseUnit() && b.isBaseUnit() ? null : combine(a.getBaseUnit(), b.getBaseUnit()),
36 a.toBaseUnits(1) * b.toBaseUnits(1),
37 a.name() + "-" + b.name(),
38 a.symbol() + "*" + b.symbol());
39 m_unitA = a;
40 m_unitB = b;
41 }
42
51 protected MultUnit(MultUnit<A, B> baseUnit, A a, B b) {
52 super(
53 baseUnit,
54 a.toBaseUnits(1) * b.toBaseUnits(1),
55 a.name() + "-" + b.name(),
56 a.symbol() + "*" + b.symbol());
57 m_unitA = a;
58 m_unitB = b;
59 }
60
62 MultUnit<A, B> baseUnit,
63 UnaryFunction toBaseConverter,
64 UnaryFunction fromBaseConverter,
65 String name,
66 String symbol) {
67 super(baseUnit, toBaseConverter, fromBaseConverter, name, symbol);
68 m_unitA = getBaseUnit().unitA();
69 m_unitB = getBaseUnit().unitB();
70 }
71
85 @SuppressWarnings("unchecked")
86 public static <A extends Unit, B extends Unit> MultUnit<A, B> combine(A a, B b) {
87 return cache.combine(a, b);
88 }
89
101 @Override
102 public Measure<? extends MultUnit<A, B>> of(double magnitude) {
103 return ofNative(magnitude);
104 }
105
117 @Override
118 public Measure<? extends MultUnit<A, B>> ofBaseUnits(double baseUnitMagnitude) {
119 return ofNativeBaseUnits(baseUnitMagnitude);
120 }
121
130 public final Mult<A, B> ofNative(double magnitude) {
131 return new Mult<>(magnitude, toBaseUnits(magnitude), this);
132 }
133
142 public final Mult<A, B> ofNativeBaseUnits(double baseUnitMagnitude) {
143 return new Mult<>(fromBaseUnits(baseUnitMagnitude), baseUnitMagnitude, this);
144 }
145
146 @Override
147 @SuppressWarnings("unchecked")
148 public Measure<? extends MultUnit<A, B>> zero() {
149 return (Measure<? extends MultUnit<A, B>>) super.zero();
150 }
151
152 @Override
153 @SuppressWarnings("unchecked")
154 public Measure<? extends MultUnit<A, B>> one() {
155 return (Measure<? extends MultUnit<A, B>>) super.one();
156 }
157
158 @Override
159 public Unit per(TimeUnit time) {
160 return VelocityUnit.combine(this, time);
161 }
162
170 public double convertFrom(double magnitude, MultUnit<A, B> otherUnit) {
171 return fromBaseUnits(otherUnit.toBaseUnits(magnitude));
172 }
173
174 @Override
175 @SuppressWarnings("unchecked")
176 public MultUnit<A, B> getBaseUnit() {
177 return (MultUnit<A, B>) super.getBaseUnit();
178 }
179
185 public A unitA() {
186 return m_unitA;
187 }
188
194 public B unitB() {
195 return m_unitB;
196 }
197
198 @Override
199 public String toString() {
200 return "(" + m_unitA.toString() + " * " + m_unitB.toString() + ")";
201 }
202
203 @Override
204 public boolean equals(Object o) {
205 if (this == o) {
206 return true;
207 }
208 if (o == null || getClass() != o.getClass()) {
209 return false;
210 }
211 if (!super.equals(o)) {
212 return false;
213 }
214 MultUnit<?, ?> multUnit = (MultUnit<?, ?>) o;
215 return Objects.equals(m_unitA, multUnit.m_unitA) && Objects.equals(m_unitB, multUnit.m_unitB);
216 }
217
218 @Override
219 public int hashCode() {
220 return Objects.hash(super.hashCode(), m_unitA, m_unitB);
221 }
222}
CombinatoryUnitCache(BiFunction<? super A, ? super B, ? extends Out > constructor)
final Mult< A, B > ofNative(double magnitude)
MultUnit(MultUnit< A, B > baseUnit, A a, B b)
Definition MultUnit.java:51
Measure<? extends MultUnit< A, B > > ofBaseUnits(double baseUnitMagnitude)
final Mult< A, B > ofNativeBaseUnits(double baseUnitMagnitude)
double convertFrom(double magnitude, MultUnit< A, B > otherUnit)
Measure<? extends MultUnit< A, B > > of(double magnitude)
Measure<? extends MultUnit< A, B > > one()
static< A extends Unit, B extends Unit > MultUnit< A, B > combine(A a, B b)
Definition MultUnit.java:86
Unit per(TimeUnit time)
MultUnit< A, B > getBaseUnit()
Measure<? extends MultUnit< A, B > > zero()
double toBaseUnits(double valueInNativeUnits)
Definition Unit.java:166
Unit(Unit baseUnit, UnaryFunction toBaseConverter, UnaryFunction fromBaseConverter, String name, String symbol)
Definition Unit.java:38
double fromBaseUnits(double valueInBaseUnits)
Definition Unit.java:156
static< D extends Unit > VelocityUnit< D > combine(D unit, TimeUnit period)