1 /*
2 * Copyright (C) 2020 Alberto Irurueta Carro (alberto@irurueta.com)
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package com.irurueta.units;
17
18 import java.math.BigDecimal;
19
20 /**
21 * Contains a magnetic flux density value and unit.
22 */
23 public class MagneticFluxDensity extends Measurement<MagneticFluxDensityUnit> {
24
25 /**
26 * Constructor with value and unit.
27 *
28 * @param value magnetic flux density value.
29 * @param unit unit of magnetic flux density.
30 * @throws IllegalArgumentException if either value or unit is null.
31 */
32 public MagneticFluxDensity(final Number value, final MagneticFluxDensityUnit unit) {
33 super(value, unit);
34 }
35
36 /**
37 * Constructor.
38 */
39 MagneticFluxDensity() {
40 super();
41 }
42
43 /**
44 * Determines if two magnetic flux densities are equal up to a certain tolerance.
45 * If needed, this method attempts unit conversion to compare both objects.
46 *
47 * @param other another measurement to compare.
48 * @param tolerance amount of tolerance to determine whether two magnetic flux density instances are equal or not.
49 * @return true if provided magnetic flux density is assumed ot be equal to this instance, false otherwise.
50 */
51 @Override
52 public boolean equals(final Measurement<MagneticFluxDensityUnit> other, final double tolerance) {
53 if (super.equals(other, tolerance)) {
54 return true;
55 }
56
57 // attempt conversion to common units
58 if (other == null) {
59 return false;
60 }
61
62 final var otherValue = MagneticFluxDensityConverter.convert(other.getValue().doubleValue(),
63 other.getUnit(), getUnit());
64 return Math.abs(getValue().doubleValue() - otherValue) <= tolerance;
65 }
66
67 /**
68 * Ads two magnetic flux density values and units and returns the result.
69 *
70 * @param value1 1st argument value.
71 * @param unit1 1st argument unit
72 * @param value2 2nd argument value.
73 * @param unit2 2nd argument unit.
74 * @param resultUnit unit of result to be returned.
75 * @return result of addition.
76 */
77 public static double add(
78 final double value1, final MagneticFluxDensityUnit unit1,
79 final double value2, final MagneticFluxDensityUnit unit2,
80 final MagneticFluxDensityUnit resultUnit) {
81 final var v1 = MagneticFluxDensityConverter.convert(value1, unit1, resultUnit);
82 final var v2 = MagneticFluxDensityConverter.convert(value2, unit2, resultUnit);
83 return v1 + v2;
84 }
85
86 /**
87 * Adds two magnetic flux density values and units and returns the result.
88 *
89 * @param value1 1st argument value.
90 * @param unit1 1st argument unit.
91 * @param value2 2nd argument value.
92 * @param unit2 2nd argument unit.
93 * @param resultUnit unit of result to be returned.
94 * @return result of addition.
95 */
96 public static Number add(
97 final Number value1, final MagneticFluxDensityUnit unit1,
98 final Number value2, final MagneticFluxDensityUnit unit2,
99 final MagneticFluxDensityUnit resultUnit) {
100 return BigDecimal.valueOf(add(value1.doubleValue(), unit1, value2.doubleValue(), unit2, resultUnit));
101 }
102
103 /**
104 * Adds two magnetic flux density instances and stores the result into
105 * provided instance.
106 *
107 * @param arg1 1st argument.
108 * @param arg2 2nd argument.
109 * @param result instance where result will be stored.
110 */
111 public static void add(
112 final MagneticFluxDensity arg1, final MagneticFluxDensity arg2, final MagneticFluxDensity result) {
113 result.setValue(add(arg1.getValue(), arg1.getUnit(), arg2.getValue(), arg2.getUnit(), result.getUnit()));
114 }
115
116 /**
117 * Adds two magnetic flux density instances.
118 *
119 * @param arg1 1st argument.
120 * @param arg2 2nd argument.
121 * @param unit unit of returned magnetic flux density.
122 * @return a new instance containing result.
123 */
124 public static MagneticFluxDensity addAndReturnNew(
125 final MagneticFluxDensity arg1, final MagneticFluxDensity arg2, final MagneticFluxDensityUnit unit) {
126 final var result = new MagneticFluxDensity();
127 result.setUnit(unit);
128 add(arg1, arg2, result);
129 return result;
130 }
131
132 /**
133 * Adds provided magnetic flux density value and unit and returns a new
134 * magnetic flux density instance using provided unit.
135 *
136 * @param value value to be added.
137 * @param unit unit of value to be added.
138 * @param resultUnit unit of returned magnetic flux density.
139 * @return a new magnetic flux density containing result.
140 */
141 public MagneticFluxDensity addAndReturnNew(
142 final double value, final MagneticFluxDensityUnit unit, final MagneticFluxDensityUnit resultUnit) {
143 final var result = new MagneticFluxDensity();
144 result.setUnit(resultUnit);
145 result.setValue(add(getValue().doubleValue(), getUnit(), value, unit, resultUnit));
146 return result;
147 }
148
149 /**
150 * Adds provided magnetic flux density value and unit and returns a new
151 * magnetic flux density instance using provided unit.
152 *
153 * @param value value to be added.
154 * @param unit unit of value to be added.
155 * @param resultUnit unit of returned frequency.
156 * @return a new frequency containing result.
157 */
158 public MagneticFluxDensity addAndReturnNew(
159 final Number value, final MagneticFluxDensityUnit unit, final MagneticFluxDensityUnit resultUnit) {
160 final var result = new MagneticFluxDensity();
161 result.setUnit(resultUnit);
162 result.setValue(add(getValue(), getUnit(), value, unit, resultUnit));
163 return result;
164 }
165
166 /**
167 * Adds provided magnetic flux density to current instance and returns
168 * a new magnetic flux density instance.
169 *
170 * @param b magnetic flux density to be added.
171 * @param unit unit of returned magnetic flux density.
172 * @return a new magnetic flux density containing result.
173 */
174 public MagneticFluxDensity addAndReturnNew(final MagneticFluxDensity b, final MagneticFluxDensityUnit unit) {
175 return addAndReturnNew(this, b, unit);
176 }
177
178 /**
179 * Adds provided magnetic flux density value and unit and updates current
180 * magnetic flux density instance.
181 *
182 * @param value magnetic flux density value to be added.
183 * @param unit unit of magnetic flux density value.
184 */
185 public void add(final double value, final MagneticFluxDensityUnit unit) {
186 setValue(add(getValue(), getUnit(), value, unit, getUnit()));
187 }
188
189 /**
190 * Adds provided magnetic flux density value and unit and updates current
191 * magnetic flux density instance.
192 *
193 * @param value magnetic flux density value to be added.
194 * @param unit unit of magnetic flux density value.
195 */
196 public void add(final Number value, final MagneticFluxDensityUnit unit) {
197 setValue(add(getValue(), getUnit(), value, unit, getUnit()));
198 }
199
200 /**
201 * Adds provided magnetic flux density and updates current magnetic
202 * flux density instance.
203 *
204 * @param magneticFluxDensity magnetic flux density to be added.
205 */
206 public void add(final MagneticFluxDensity magneticFluxDensity) {
207 add(this, magneticFluxDensity, this);
208 }
209
210 /**
211 * Adds provided magnetic flux density and stores the result into
212 * provided magnetic flux density instance.
213 *
214 * @param b magnetic flux density to be added.
215 * @param result instance where result will be stored.
216 */
217 public void add(final MagneticFluxDensity b, final MagneticFluxDensity result) {
218 add(this, b, result);
219 }
220
221 /**
222 * Subtracts two magnetic flux density values and units and returns the
223 * result.
224 *
225 * @param value1 1st argument value.
226 * @param unit1 1st argument unit.
227 * @param value2 2nd argument value.
228 * @param unit2 2nd argument unit.
229 * @param resultUnit unit of result to be returned.
230 * @return result of subtraction.
231 */
232 public static double subtract(
233 final double value1, final MagneticFluxDensityUnit unit1,
234 final double value2, final MagneticFluxDensityUnit unit2,
235 final MagneticFluxDensityUnit resultUnit) {
236 final var v1 = MagneticFluxDensityConverter.convert(value1, unit1, resultUnit);
237 final var v2 = MagneticFluxDensityConverter.convert(value2, unit2, resultUnit);
238 return v1 - v2;
239 }
240
241 /**
242 * Subtracts two magnetic flux density values and units and returns the
243 * result.
244 *
245 * @param value1 1st argument value.
246 * @param unit1 1st argument unit.
247 * @param value2 2nd argument value.
248 * @param unit2 2nd argument unit.
249 * @param resultUnit unit of result to be returned.
250 * @return result of subtraction.
251 */
252 public static Number subtract(
253 final Number value1, final MagneticFluxDensityUnit unit1,
254 final Number value2, final MagneticFluxDensityUnit unit2,
255 final MagneticFluxDensityUnit resultUnit) {
256 return BigDecimal.valueOf(subtract(value1.doubleValue(), unit1, value2.doubleValue(), unit2, resultUnit));
257 }
258
259 /**
260 * Subtracts two magnetic flux density instances and stores the result
261 * into provided instance.
262 *
263 * @param arg1 1st argument.
264 * @param arg2 2nd argument.
265 * @param result instance where result will be stored.
266 */
267 public static void subtract(
268 final MagneticFluxDensity arg1, final MagneticFluxDensity arg2, final MagneticFluxDensity result) {
269 result.setValue(subtract(arg1.getValue(), arg1.getUnit(), arg2.getValue(), arg2.getUnit(), result.getUnit()));
270 }
271
272 /**
273 * Subtracts two magnetic flux density instances.
274 *
275 * @param arg1 1st argument.
276 * @param arg2 2nd argument.
277 * @param unit unit of returned magnetic flux density.
278 * @return a new instance containing result.
279 */
280 public static MagneticFluxDensity subtractAndReturnNew(
281 final MagneticFluxDensity arg1, final MagneticFluxDensity arg2, final MagneticFluxDensityUnit unit) {
282 final var result = new MagneticFluxDensity();
283 result.setUnit(unit);
284 subtract(arg1, arg2, result);
285 return result;
286 }
287
288 /**
289 * Subtracts provided magnetic flux density value and unit and returns a
290 * new magnetic flux density instance using provided unit.
291 *
292 * @param value value to be subtracted.
293 * @param unit unit of value to be subtracted.
294 * @param resultUnit unit of returned magnetic flux density.
295 * @return a new magnetic flux density containing result.
296 */
297 public MagneticFluxDensity subtractAndReturnNew(
298 final double value, final MagneticFluxDensityUnit unit, final MagneticFluxDensityUnit resultUnit) {
299 final var result = new MagneticFluxDensity();
300 result.setUnit(resultUnit);
301 result.setValue(subtract(getValue().doubleValue(), getUnit(), value, unit, resultUnit));
302 return result;
303 }
304
305 /**
306 * Subtracts provided magnetic flux density value and unit and returns a
307 * new magnetic flux density instance using provided unit.
308 *
309 * @param value value to be subtracted.
310 * @param unit unit of value to be subtracted.
311 * @param resultUnit unit of returned magnetic flux density.
312 * @return a new magnetic flux density containing result.
313 */
314 public MagneticFluxDensity subtractAndReturnNew(
315 final Number value, final MagneticFluxDensityUnit unit, final MagneticFluxDensityUnit resultUnit) {
316 final var result = new MagneticFluxDensity();
317 result.setUnit(resultUnit);
318 result.setValue(subtract(getValue(), getUnit(), value, unit, resultUnit));
319 return result;
320 }
321
322 /**
323 * Subtracts provided magnetic flux density from current instance and
324 * returns a new instance.
325 *
326 * @param b magnetic flux density to be subtracted.
327 * @param unit unit of returned magnetic flux density.
328 * @return a new magnetic flux density containing result.
329 */
330 public MagneticFluxDensity subtractAndReturnNew(final MagneticFluxDensity b, final MagneticFluxDensityUnit unit) {
331 return subtractAndReturnNew(this, b, unit);
332 }
333
334 /**
335 * Subtracts provided magnetic flux density value and unit and updates
336 * current magnetic flux density instance.
337 *
338 * @param value magnetic flux density value to be subtracted.
339 * @param unit unit of magnetic flux density value.
340 */
341 public void subtract(final double value, final MagneticFluxDensityUnit unit) {
342 setValue(subtract(getValue(), getUnit(), value, unit, getUnit()));
343 }
344
345 /**
346 * Subtracts provided magnetic flux density value and unit and update current
347 * magnetic flux density instance.
348 *
349 * @param value magnetic flux density value to be subtracted.
350 * @param unit unit of magnetic flux density value.
351 */
352 public void subtract(final Number value, final MagneticFluxDensityUnit unit) {
353 setValue(subtract(getValue(), getUnit(), value, unit, getUnit()));
354 }
355
356 /**
357 * Subtracts provided magnetic flux density and updates current magnetic
358 * flux density.
359 *
360 * @param b magnetic flux density to be subtracted.
361 */
362 public void subtract(final MagneticFluxDensity b) {
363 subtract(this, b, this);
364 }
365
366 /**
367 * Subtracts provided magnetic flux density and stores the result into
368 * provided magnetic flux density.
369 *
370 * @param b magnetic flux density to be subtracted.
371 * @param result instance where result will be stored.
372 */
373 public void subtract(final MagneticFluxDensity b, final MagneticFluxDensity result) {
374 subtract(this, b, result);
375 }
376 }