1 package org.djunits.value.vdouble.scalar;
2
3 import java.util.regex.Matcher;
4
5 import org.djunits.unit.DimensionlessUnit;
6 import org.djunits.unit.FlowMassUnit;
7 import org.djunits.unit.ForceUnit;
8 import org.djunits.unit.FrequencyUnit;
9 import org.djunits.unit.MassUnit;
10 import org.djunits.unit.Unit;
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 public class FlowMass extends AbstractDoubleScalarRel<FlowMassUnit, FlowMass>
37 {
38
39 private static final long serialVersionUID = 20150905L;
40
41
42 public static final FlowMass ZERO = new FlowMass(0.0, FlowMassUnit.SI);
43
44
45 @SuppressWarnings("checkstyle:constantname")
46 public static final FlowMass NaN = new FlowMass(Double.NaN, FlowMassUnit.SI);
47
48
49 public static final FlowMass POSITIVE_INFINITY = new FlowMass(Double.POSITIVE_INFINITY, FlowMassUnit.SI);
50
51
52 public static final FlowMass NEGATIVE_INFINITY = new FlowMass(Double.NEGATIVE_INFINITY, FlowMassUnit.SI);
53
54
55 public static final FlowMass POS_MAXVALUE = new FlowMass(Double.MAX_VALUE, FlowMassUnit.SI);
56
57
58 public static final FlowMass NEG_MAXVALUE = new FlowMass(-Double.MAX_VALUE, FlowMassUnit.SI);
59
60
61
62
63
64
65 public FlowMass(final double value, final FlowMassUnit unit)
66 {
67 super(value, unit);
68 }
69
70
71
72
73
74 public FlowMass(final FlowMass value)
75 {
76 super(value);
77 }
78
79
80 @Override
81 public final FlowMass instantiateRel(final double value, final FlowMassUnit unit)
82 {
83 return new FlowMass(value, unit);
84 }
85
86
87
88
89
90
91 public static final FlowMass createSI(final double value)
92 {
93 return new FlowMass(value, FlowMassUnit.SI);
94 }
95
96
97
98
99
100
101
102
103 public static FlowMass interpolate(final FlowMass zero, final FlowMass one, final double ratio)
104 {
105 return new FlowMass(zero.getInUnit() * (1 - ratio) + one.getInUnit(zero.getUnit()) * ratio, zero.getUnit());
106 }
107
108
109
110
111
112
113
114 public static FlowMass max(final FlowMass r1, final FlowMass r2)
115 {
116 return (r1.gt(r2)) ? r1 : r2;
117 }
118
119
120
121
122
123
124
125
126 public static FlowMass max(final FlowMass r1, final FlowMass r2, final FlowMass... rn)
127 {
128 FlowMass maxr = (r1.gt(r2)) ? r1 : r2;
129 for (FlowMass r : rn)
130 {
131 if (r.gt(maxr))
132 {
133 maxr = r;
134 }
135 }
136 return maxr;
137 }
138
139
140
141
142
143
144
145 public static FlowMass min(final FlowMass r1, final FlowMass r2)
146 {
147 return (r1.lt(r2)) ? r1 : r2;
148 }
149
150
151
152
153
154
155
156
157 public static FlowMass min(final FlowMass r1, final FlowMass r2, final FlowMass... rn)
158 {
159 FlowMass minr = (r1.lt(r2)) ? r1 : r2;
160 for (FlowMass r : rn)
161 {
162 if (r.lt(minr))
163 {
164 minr = r;
165 }
166 }
167 return minr;
168 }
169
170
171
172
173
174
175
176
177
178 public static FlowMass valueOf(final String text) throws IllegalArgumentException
179 {
180 if (text == null || text.length() == 0)
181 {
182 throw new IllegalArgumentException("Error parsing FlowMass -- null or empty argument");
183 }
184 Matcher matcher = NUMBER_PATTERN.matcher(text);
185 if (matcher.find())
186 {
187 int index = matcher.end();
188 try
189 {
190 String unitString = text.substring(index).trim();
191 String valueString = text.substring(0, index).trim();
192 for (FlowMassUnit unit : Unit.getUnits(FlowMassUnit.class))
193 {
194 if (unit.getDefaultLocaleTextualRepresentations().contains(unitString))
195 {
196 double d = Double.parseDouble(valueString);
197 return new FlowMass(d, unit);
198 }
199 }
200 }
201 catch (Exception exception)
202 {
203 throw new IllegalArgumentException("Error parsing FlowMass from " + text, exception);
204 }
205 }
206 throw new IllegalArgumentException("Error parsing FlowMass from " + text);
207 }
208
209
210
211
212
213
214 public final Dimensionless divideBy(final FlowMass v)
215 {
216 return new Dimensionless(this.si / v.si, DimensionlessUnit.SI);
217 }
218
219
220
221
222
223
224 public final Mass multiplyBy(final Duration v)
225 {
226 return new Mass(this.si * v.si, MassUnit.SI);
227 }
228
229
230
231
232
233
234 public final Mass divideBy(final Frequency v)
235 {
236 return new Mass(this.si / v.si, MassUnit.SI);
237 }
238
239
240
241
242
243
244 public final Frequency divideBy(final Mass v)
245 {
246 return new Frequency(this.si / v.si, FrequencyUnit.SI);
247 }
248
249
250
251
252
253
254 public final Force multiplyBy(final Speed v)
255 {
256 return new Force(this.si * v.si, ForceUnit.SI);
257 }
258
259 }