001// Copyright (c) FIRST and other WPILib contributors.
002// Open Source Software; you can modify and/or share it under the terms of
003// the WPILib BSD license file in the root directory of this project.
004
005// THIS FILE WAS AUTO-GENERATED BY ./wpiunits/generate_units.py. DO NOT MODIFY
006
007package org.wpilib.units.measure;
008
009import static org.wpilib.units.Units.*;
010import org.wpilib.units.*;
011
012@SuppressWarnings({"unchecked", "cast", "checkstyle"})
013public record Velocity<D extends Unit>(double magnitude, double baseUnitMagnitude, VelocityUnit<D> unit) implements Measure<VelocityUnit<D>> {
014  /**
015   * For doing math with measures of a known dimension but an unknown unit. Most users should use
016   * {@link VelocityUnit#of(double)} on a known unit from {@link Units} instead of calling this method.
017   * @param magnitude the magnitude of the measurement in terms of the given unit
018   * @param unit the unit of the measurement
019   * @return a measurement object
020   */
021  public static <D extends Unit> Velocity<D> ofRelativeUnits(double magnitude, VelocityUnit<D> unit) {
022    return new Velocity<D>(magnitude, unit.toBaseUnits(magnitude), unit);
023  }
024
025  /**
026   * For doing math with measures of a known dimension but an unknown unit. Most users should use
027   * {@link VelocityUnit#of(double)} on a known unit from {@link Units} instead of calling this method.
028   * @param baseUnitMagnitude the magnitude of the measurement in terms of the given unit's base unit
029   * @param unit the unit of the measurement
030   * @return a measurement object
031   */
032  public static <D extends Unit> Velocity<D> ofBaseUnits(double baseUnitMagnitude, VelocityUnit<D> unit) {
033    return new Velocity<D>(unit.fromBaseUnits(baseUnitMagnitude), baseUnitMagnitude, unit);
034  }
035
036  @Override
037  public VelocityUnit<D> baseUnit() { return (VelocityUnit<D>) unit().getBaseUnit(); }
038
039  @Override
040  public double in(VelocityUnit<D> unit) {
041    return unit.fromBaseUnits(baseUnitMagnitude());
042  }
043
044  @Override
045  @SuppressWarnings("rawtypes")
046  public boolean equals(Object object) {
047    return object instanceof Velocity m && isEquivalent(m);
048  }
049
050  @Override
051  public Velocity<D> unaryMinus() {
052    return (Velocity<D>) unit().ofBaseUnits(0 - baseUnitMagnitude());
053  }
054
055  @Override
056  public Velocity<D> plus(Measure<? extends VelocityUnit<D>> other) {
057    return (Velocity<D>) unit().ofBaseUnits(baseUnitMagnitude() + other.baseUnitMagnitude());
058  }
059
060  @Override
061  public Velocity<D> minus(Measure<? extends VelocityUnit<D>> other) {
062    return (Velocity<D>) unit().ofBaseUnits(baseUnitMagnitude() - other.baseUnitMagnitude());
063  }
064
065  @Override
066  public Velocity<D> times(double multiplier) {
067    return (Velocity<D>) unit().ofBaseUnits(baseUnitMagnitude() * multiplier);
068  }
069
070  @Override
071  public Velocity<D> div(double divisor) {
072    return (Velocity<D>) unit().ofBaseUnits(baseUnitMagnitude() / divisor);
073  }
074
075
076  @Override
077  public Mult<VelocityUnit<D>, AccelerationUnit<?>> times(Acceleration<?> multiplier) {
078    return (Mult<VelocityUnit<D>, AccelerationUnit<?>>) Measure.super.times(multiplier);
079  }
080
081  @Override
082  public Per<VelocityUnit<D>, AccelerationUnit<?>> div(Acceleration<?> divisor) {
083    return (Per<VelocityUnit<D>, AccelerationUnit<?>>) Measure.super.div(divisor);
084  }
085
086  @Override
087  public Per<VelocityUnit<D>, AccelerationUnit<?>> per(AccelerationUnit<?> divisorUnit) {
088    return div(divisorUnit.one());
089  }
090
091
092  @Override
093  public Mult<VelocityUnit<D>, AngleUnit> times(Angle multiplier) {
094    return (Mult<VelocityUnit<D>, AngleUnit>) Measure.super.times(multiplier);
095  }
096
097  @Override
098  public Per<VelocityUnit<D>, AngleUnit> div(Angle divisor) {
099    return (Per<VelocityUnit<D>, AngleUnit>) Measure.super.div(divisor);
100  }
101
102  @Override
103  public Per<VelocityUnit<D>, AngleUnit> per(AngleUnit divisorUnit) {
104    return div(divisorUnit.one());
105  }
106
107
108  @Override
109  public Mult<VelocityUnit<D>, AngularAccelerationUnit> times(AngularAcceleration multiplier) {
110    return (Mult<VelocityUnit<D>, AngularAccelerationUnit>) Measure.super.times(multiplier);
111  }
112
113  @Override
114  public Per<VelocityUnit<D>, AngularAccelerationUnit> div(AngularAcceleration divisor) {
115    return (Per<VelocityUnit<D>, AngularAccelerationUnit>) Measure.super.div(divisor);
116  }
117
118  @Override
119  public Per<VelocityUnit<D>, AngularAccelerationUnit> per(AngularAccelerationUnit divisorUnit) {
120    return div(divisorUnit.one());
121  }
122
123
124  @Override
125  public Mult<VelocityUnit<D>, AngularMomentumUnit> times(AngularMomentum multiplier) {
126    return (Mult<VelocityUnit<D>, AngularMomentumUnit>) Measure.super.times(multiplier);
127  }
128
129  @Override
130  public Per<VelocityUnit<D>, AngularMomentumUnit> div(AngularMomentum divisor) {
131    return (Per<VelocityUnit<D>, AngularMomentumUnit>) Measure.super.div(divisor);
132  }
133
134  @Override
135  public Per<VelocityUnit<D>, AngularMomentumUnit> per(AngularMomentumUnit divisorUnit) {
136    return div(divisorUnit.one());
137  }
138
139
140  @Override
141  public Mult<VelocityUnit<D>, AngularVelocityUnit> times(AngularVelocity multiplier) {
142    return (Mult<VelocityUnit<D>, AngularVelocityUnit>) Measure.super.times(multiplier);
143  }
144
145  @Override
146  public Per<VelocityUnit<D>, AngularVelocityUnit> div(AngularVelocity divisor) {
147    return (Per<VelocityUnit<D>, AngularVelocityUnit>) Measure.super.div(divisor);
148  }
149
150  @Override
151  public Per<VelocityUnit<D>, AngularVelocityUnit> per(AngularVelocityUnit divisorUnit) {
152    return div(divisorUnit.one());
153  }
154
155
156  @Override
157  public Mult<VelocityUnit<D>, CurrentUnit> times(Current multiplier) {
158    return (Mult<VelocityUnit<D>, CurrentUnit>) Measure.super.times(multiplier);
159  }
160
161  @Override
162  public Per<VelocityUnit<D>, CurrentUnit> div(Current divisor) {
163    return (Per<VelocityUnit<D>, CurrentUnit>) Measure.super.div(divisor);
164  }
165
166  @Override
167  public Per<VelocityUnit<D>, CurrentUnit> per(CurrentUnit divisorUnit) {
168    return div(divisorUnit.one());
169  }
170
171  @Override
172  public Velocity<D> div(Dimensionless divisor) {
173    return (Velocity<D>) unit().of(baseUnitMagnitude() / divisor.baseUnitMagnitude());
174  }
175
176  @Override
177  public Velocity<D> times(Dimensionless multiplier) {
178    return (Velocity<D>) unit().of(baseUnitMagnitude() * multiplier.baseUnitMagnitude());
179  }
180
181
182  @Override
183  public Mult<VelocityUnit<D>, DistanceUnit> times(Distance multiplier) {
184    return (Mult<VelocityUnit<D>, DistanceUnit>) Measure.super.times(multiplier);
185  }
186
187  @Override
188  public Per<VelocityUnit<D>, DistanceUnit> div(Distance divisor) {
189    return (Per<VelocityUnit<D>, DistanceUnit>) Measure.super.div(divisor);
190  }
191
192  @Override
193  public Per<VelocityUnit<D>, DistanceUnit> per(DistanceUnit divisorUnit) {
194    return div(divisorUnit.one());
195  }
196
197
198  @Override
199  public Mult<VelocityUnit<D>, EnergyUnit> times(Energy multiplier) {
200    return (Mult<VelocityUnit<D>, EnergyUnit>) Measure.super.times(multiplier);
201  }
202
203  @Override
204  public Per<VelocityUnit<D>, EnergyUnit> div(Energy divisor) {
205    return (Per<VelocityUnit<D>, EnergyUnit>) Measure.super.div(divisor);
206  }
207
208  @Override
209  public Per<VelocityUnit<D>, EnergyUnit> per(EnergyUnit divisorUnit) {
210    return div(divisorUnit.one());
211  }
212
213
214  @Override
215  public Mult<VelocityUnit<D>, ForceUnit> times(Force multiplier) {
216    return (Mult<VelocityUnit<D>, ForceUnit>) Measure.super.times(multiplier);
217  }
218
219  @Override
220  public Per<VelocityUnit<D>, ForceUnit> div(Force divisor) {
221    return (Per<VelocityUnit<D>, ForceUnit>) Measure.super.div(divisor);
222  }
223
224  @Override
225  public Per<VelocityUnit<D>, ForceUnit> per(ForceUnit divisorUnit) {
226    return div(divisorUnit.one());
227  }
228
229
230  @Override
231  public Mult<VelocityUnit<D>, FrequencyUnit> times(Frequency multiplier) {
232    return (Mult<VelocityUnit<D>, FrequencyUnit>) Measure.super.times(multiplier);
233  }
234
235  @Override
236  public Per<VelocityUnit<D>, FrequencyUnit> div(Frequency divisor) {
237    return (Per<VelocityUnit<D>, FrequencyUnit>) Measure.super.div(divisor);
238  }
239
240  @Override
241  public Per<VelocityUnit<D>, FrequencyUnit> per(FrequencyUnit divisorUnit) {
242    return div(divisorUnit.one());
243  }
244
245
246  @Override
247  public Mult<VelocityUnit<D>, LinearAccelerationUnit> times(LinearAcceleration multiplier) {
248    return (Mult<VelocityUnit<D>, LinearAccelerationUnit>) Measure.super.times(multiplier);
249  }
250
251  @Override
252  public Per<VelocityUnit<D>, LinearAccelerationUnit> div(LinearAcceleration divisor) {
253    return (Per<VelocityUnit<D>, LinearAccelerationUnit>) Measure.super.div(divisor);
254  }
255
256  @Override
257  public Per<VelocityUnit<D>, LinearAccelerationUnit> per(LinearAccelerationUnit divisorUnit) {
258    return div(divisorUnit.one());
259  }
260
261
262  @Override
263  public Mult<VelocityUnit<D>, LinearMomentumUnit> times(LinearMomentum multiplier) {
264    return (Mult<VelocityUnit<D>, LinearMomentumUnit>) Measure.super.times(multiplier);
265  }
266
267  @Override
268  public Per<VelocityUnit<D>, LinearMomentumUnit> div(LinearMomentum divisor) {
269    return (Per<VelocityUnit<D>, LinearMomentumUnit>) Measure.super.div(divisor);
270  }
271
272  @Override
273  public Per<VelocityUnit<D>, LinearMomentumUnit> per(LinearMomentumUnit divisorUnit) {
274    return div(divisorUnit.one());
275  }
276
277
278  @Override
279  public Mult<VelocityUnit<D>, LinearVelocityUnit> times(LinearVelocity multiplier) {
280    return (Mult<VelocityUnit<D>, LinearVelocityUnit>) Measure.super.times(multiplier);
281  }
282
283  @Override
284  public Per<VelocityUnit<D>, LinearVelocityUnit> div(LinearVelocity divisor) {
285    return (Per<VelocityUnit<D>, LinearVelocityUnit>) Measure.super.div(divisor);
286  }
287
288  @Override
289  public Per<VelocityUnit<D>, LinearVelocityUnit> per(LinearVelocityUnit divisorUnit) {
290    return div(divisorUnit.one());
291  }
292
293
294  @Override
295  public Mult<VelocityUnit<D>, MassUnit> times(Mass multiplier) {
296    return (Mult<VelocityUnit<D>, MassUnit>) Measure.super.times(multiplier);
297  }
298
299  @Override
300  public Per<VelocityUnit<D>, MassUnit> div(Mass divisor) {
301    return (Per<VelocityUnit<D>, MassUnit>) Measure.super.div(divisor);
302  }
303
304  @Override
305  public Per<VelocityUnit<D>, MassUnit> per(MassUnit divisorUnit) {
306    return div(divisorUnit.one());
307  }
308
309
310  @Override
311  public Mult<VelocityUnit<D>, MomentOfInertiaUnit> times(MomentOfInertia multiplier) {
312    return (Mult<VelocityUnit<D>, MomentOfInertiaUnit>) Measure.super.times(multiplier);
313  }
314
315  @Override
316  public Per<VelocityUnit<D>, MomentOfInertiaUnit> div(MomentOfInertia divisor) {
317    return (Per<VelocityUnit<D>, MomentOfInertiaUnit>) Measure.super.div(divisor);
318  }
319
320  @Override
321  public Per<VelocityUnit<D>, MomentOfInertiaUnit> per(MomentOfInertiaUnit divisorUnit) {
322    return div(divisorUnit.one());
323  }
324
325
326  @Override
327  public Mult<VelocityUnit<D>, MultUnit<?, ?>> times(Mult<?, ?> multiplier) {
328    return (Mult<VelocityUnit<D>, MultUnit<?, ?>>) Measure.super.times(multiplier);
329  }
330
331  @Override
332  public Per<VelocityUnit<D>, MultUnit<?, ?>> div(Mult<?, ?> divisor) {
333    return (Per<VelocityUnit<D>, MultUnit<?, ?>>) Measure.super.div(divisor);
334  }
335
336  @Override
337  public Per<VelocityUnit<D>, MultUnit<?, ?>> per(MultUnit<?, ?> divisorUnit) {
338    return div(divisorUnit.ofNative(1));
339  }
340
341
342  @Override
343  public Mult<VelocityUnit<D>, PerUnit<?, ?>> times(Per<?, ?> multiplier) {
344    return (Mult<VelocityUnit<D>, PerUnit<?, ?>>) Measure.super.times(multiplier);
345  }
346
347  @Override
348  public Per<VelocityUnit<D>, PerUnit<?, ?>> div(Per<?, ?> divisor) {
349    return (Per<VelocityUnit<D>, PerUnit<?, ?>>) Measure.super.div(divisor);
350  }
351
352  @Override
353  public Per<VelocityUnit<D>, PerUnit<?, ?>> per(PerUnit<?, ?> divisorUnit) {
354    return div(divisorUnit.ofNative(1));
355  }
356
357
358  @Override
359  public Mult<VelocityUnit<D>, PowerUnit> times(Power multiplier) {
360    return (Mult<VelocityUnit<D>, PowerUnit>) Measure.super.times(multiplier);
361  }
362
363  @Override
364  public Per<VelocityUnit<D>, PowerUnit> div(Power divisor) {
365    return (Per<VelocityUnit<D>, PowerUnit>) Measure.super.div(divisor);
366  }
367
368  @Override
369  public Per<VelocityUnit<D>, PowerUnit> per(PowerUnit divisorUnit) {
370    return div(divisorUnit.one());
371  }
372
373
374  @Override
375  public Mult<VelocityUnit<D>, ResistanceUnit> times(Resistance multiplier) {
376    return (Mult<VelocityUnit<D>, ResistanceUnit>) Measure.super.times(multiplier);
377  }
378
379  @Override
380  public Per<VelocityUnit<D>, ResistanceUnit> div(Resistance divisor) {
381    return (Per<VelocityUnit<D>, ResistanceUnit>) Measure.super.div(divisor);
382  }
383
384  @Override
385  public Per<VelocityUnit<D>, ResistanceUnit> per(ResistanceUnit divisorUnit) {
386    return div(divisorUnit.one());
387  }
388
389
390  @Override
391  public Mult<VelocityUnit<D>, TemperatureUnit> times(Temperature multiplier) {
392    return (Mult<VelocityUnit<D>, TemperatureUnit>) Measure.super.times(multiplier);
393  }
394
395  @Override
396  public Per<VelocityUnit<D>, TemperatureUnit> div(Temperature divisor) {
397    return (Per<VelocityUnit<D>, TemperatureUnit>) Measure.super.div(divisor);
398  }
399
400  @Override
401  public Per<VelocityUnit<D>, TemperatureUnit> per(TemperatureUnit divisorUnit) {
402    return div(divisorUnit.one());
403  }
404
405  @Override
406  public Measure<D> times(Time multiplier) {
407    return (Measure<D>) unit().numerator().ofBaseUnits(baseUnitMagnitude() * multiplier.baseUnitMagnitude());
408  }
409
410  @Override
411  public Velocity<VelocityUnit<D>> div(Time divisor) {
412    return VelocityUnit.combine(unit(), divisor.unit()).ofBaseUnits(baseUnitMagnitude() / divisor.baseUnitMagnitude());
413  }
414
415  @Override
416  public Velocity<VelocityUnit<D>> per(TimeUnit divisorUnit) {
417    return div(divisorUnit.one());
418  }
419
420
421  @Override
422  public Mult<VelocityUnit<D>, TorqueUnit> times(Torque multiplier) {
423    return (Mult<VelocityUnit<D>, TorqueUnit>) Measure.super.times(multiplier);
424  }
425
426  @Override
427  public Per<VelocityUnit<D>, TorqueUnit> div(Torque divisor) {
428    return (Per<VelocityUnit<D>, TorqueUnit>) Measure.super.div(divisor);
429  }
430
431  @Override
432  public Per<VelocityUnit<D>, TorqueUnit> per(TorqueUnit divisorUnit) {
433    return div(divisorUnit.one());
434  }
435
436
437  @Override
438  public Mult<VelocityUnit<D>, VelocityUnit<?>> times(Velocity<?> multiplier) {
439    return (Mult<VelocityUnit<D>, VelocityUnit<?>>) Measure.super.times(multiplier);
440  }
441
442  @Override
443  public Per<VelocityUnit<D>, VelocityUnit<?>> div(Velocity<?> divisor) {
444    return (Per<VelocityUnit<D>, VelocityUnit<?>>) Measure.super.div(divisor);
445  }
446
447  @Override
448  public Per<VelocityUnit<D>, VelocityUnit<?>> per(VelocityUnit<?> divisorUnit) {
449    return div(divisorUnit.one());
450  }
451
452
453  @Override
454  public Mult<VelocityUnit<D>, VoltageUnit> times(Voltage multiplier) {
455    return (Mult<VelocityUnit<D>, VoltageUnit>) Measure.super.times(multiplier);
456  }
457
458  @Override
459  public Per<VelocityUnit<D>, VoltageUnit> div(Voltage divisor) {
460    return (Per<VelocityUnit<D>, VoltageUnit>) Measure.super.div(divisor);
461  }
462
463  @Override
464  public Per<VelocityUnit<D>, VoltageUnit> per(VoltageUnit divisorUnit) {
465    return div(divisorUnit.one());
466  }
467
468}