1 package org.djunits.value.vfloat.scalar;
2
3 import java.util.regex.Matcher;
4
5 import org.djunits.unit.DimensionlessUnit;
6 import org.djunits.unit.DurationUnit;
7 import org.djunits.unit.ElectricalChargeUnit;
8 import org.djunits.unit.EnergyUnit;
9 import org.djunits.unit.LengthUnit;
10 import org.djunits.unit.MassUnit;
11 import org.djunits.unit.MoneyUnit;
12 import org.djunits.unit.SpeedUnit;
13 import org.djunits.unit.TimeUnit;
14 import org.djunits.unit.Unit;
15 import org.djunits.unit.VolumeUnit;
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public class FloatDuration extends AbstractFloatScalarRel<DurationUnit, FloatDuration>
43 {
44
45 private static final long serialVersionUID = 20150901L;
46
47
48 public static final FloatDuration ZERO = new FloatDuration(0.0f, DurationUnit.SI);
49
50
51 @SuppressWarnings("checkstyle:constantname")
52 public static final FloatDuration NaN = new FloatDuration(Float.NaN, DurationUnit.SI);
53
54
55 public static final FloatDuration POSITIVE_INFINITY = new FloatDuration(Float.POSITIVE_INFINITY, DurationUnit.SI);
56
57
58 public static final FloatDuration NEGATIVE_INFINITY = new FloatDuration(Float.NEGATIVE_INFINITY, DurationUnit.SI);
59
60
61 public static final FloatDuration POS_MAXVALUE = new FloatDuration(Float.MAX_VALUE, DurationUnit.SI);
62
63
64 public static final FloatDuration NEG_MAXVALUE = new FloatDuration(-Float.MAX_VALUE, DurationUnit.SI);
65
66
67
68
69
70
71 public FloatDuration(final float value, final DurationUnit unit)
72 {
73 super(value, unit);
74 }
75
76
77
78
79
80 public FloatDuration(final FloatDuration value)
81 {
82 super(value);
83 }
84
85
86
87
88
89
90 public FloatDuration(final double value, final DurationUnit unit)
91 {
92 super((float) value, unit);
93 }
94
95
96 @Override
97 public final FloatDuration instantiateRel(final float value, final DurationUnit unit)
98 {
99 return new FloatDuration(value, unit);
100 }
101
102
103
104
105
106
107 public static final FloatDuration createSI(final float value)
108 {
109 return new FloatDuration(value, DurationUnit.SI);
110 }
111
112
113
114
115
116
117
118 public final FloatTime instantiateAbs(final float value, final TimeUnit unit)
119 {
120 return new FloatTime(value, unit);
121 }
122
123
124
125
126
127
128
129
130 public static FloatDuration interpolate(final FloatDuration zero, final FloatDuration one, final float ratio)
131 {
132 return new FloatDuration(zero.getInUnit() * (1 - ratio) + one.getInUnit(zero.getUnit()) * ratio, zero.getUnit());
133 }
134
135
136
137
138
139
140 public final FloatTime plus(final FloatTime v)
141 {
142 TimeUnit targetUnit = v.getUnit();
143 return instantiateAbs(v.getInUnit() + getInUnit(targetUnit.getRelativeUnit()), targetUnit);
144 }
145
146
147
148
149
150
151
152 public static FloatDuration max(final FloatDuration r1, final FloatDuration r2)
153 {
154 return (r1.gt(r2)) ? r1 : r2;
155 }
156
157
158
159
160
161
162
163
164 public static FloatDuration max(final FloatDuration r1, final FloatDuration r2, final FloatDuration... rn)
165 {
166 FloatDuration maxr = (r1.gt(r2)) ? r1 : r2;
167 for (FloatDuration r : rn)
168 {
169 if (r.gt(maxr))
170 {
171 maxr = r;
172 }
173 }
174 return maxr;
175 }
176
177
178
179
180
181
182
183 public static FloatDuration min(final FloatDuration r1, final FloatDuration r2)
184 {
185 return (r1.lt(r2)) ? r1 : r2;
186 }
187
188
189
190
191
192
193
194
195 public static FloatDuration min(final FloatDuration r1, final FloatDuration r2, final FloatDuration... rn)
196 {
197 FloatDuration minr = (r1.lt(r2)) ? r1 : r2;
198 for (FloatDuration r : rn)
199 {
200 if (r.lt(minr))
201 {
202 minr = r;
203 }
204 }
205 return minr;
206 }
207
208
209
210
211
212
213
214
215
216 public static FloatDuration valueOf(final String text) throws IllegalArgumentException
217 {
218 if (text == null || text.length() == 0)
219 {
220 throw new IllegalArgumentException("Error parsing FloatDuration -- null or empty argument");
221 }
222 Matcher matcher = NUMBER_PATTERN.matcher(text);
223 if (matcher.find())
224 {
225 int index = matcher.end();
226 try
227 {
228 String unitString = text.substring(index).trim();
229 String valueString = text.substring(0, index).trim();
230 for (DurationUnit unit : Unit.getUnits(DurationUnit.class))
231 {
232 if (unit.getDefaultLocaleTextualRepresentations().contains(unitString))
233 {
234 float f = Float.parseFloat(valueString);
235 return new FloatDuration(f, unit);
236 }
237 }
238 }
239 catch (Exception exception)
240 {
241 throw new IllegalArgumentException("Error parsing FloatDuration from " + text, exception);
242 }
243 }
244 throw new IllegalArgumentException("Error parsing FloatDuration from " + text);
245 }
246
247
248
249
250
251
252 public final FloatDimensionless divideBy(final FloatDuration v)
253 {
254 return new FloatDimensionless(this.si / v.si, DimensionlessUnit.SI);
255 }
256
257
258
259
260
261
262 public final FloatDimensionless multiplyBy(final FloatFrequency v)
263 {
264 return new FloatDimensionless(this.si * v.si, DimensionlessUnit.SI);
265 }
266
267
268
269
270
271
272
273 public final FloatElectricalCharge multiplyBy(final FloatElectricalCurrent v)
274 {
275 return new FloatElectricalCharge(this.si * v.si, ElectricalChargeUnit.SI);
276 }
277
278
279
280
281
282
283 public final FloatMass multiplyBy(final FloatFlowMass v)
284 {
285 return new FloatMass(this.si * v.si, MassUnit.SI);
286 }
287
288
289
290
291
292
293 public final FloatVolume multiplyBy(final FloatFlowVolume v)
294 {
295 return new FloatVolume(this.si * v.si, VolumeUnit.SI);
296 }
297
298
299
300
301
302
303 public final FloatSpeed multiplyBy(final FloatAcceleration v)
304 {
305 return new FloatSpeed(this.si * v.si, SpeedUnit.SI);
306 }
307
308
309
310
311
312
313 public final FloatEnergy multiplyBy(final FloatPower v)
314 {
315 return new FloatEnergy(this.si * v.si, EnergyUnit.SI);
316 }
317
318
319
320
321
322
323 public final FloatLength multiplyBy(final FloatSpeed v)
324 {
325 return new FloatLength(this.si * v.si, LengthUnit.SI);
326 }
327
328
329
330
331
332
333 public final FloatMoney multiplyBy(final FloatMoneyPerDuration v)
334 {
335 return new FloatMoney(this.si * v.si, MoneyUnit.getStandardMoneyUnit());
336 }
337
338 }