1 package org.djunits.value;
2
3 import org.djunits.unit.AbsoluteLinearUnit;
4 import org.djunits.unit.Unit;
5
6 /**
7 * Absolute values are quantities that are measured from some agreed upon reference point. Absolute types always have an
8 * associated Relative type, indicated by the interface AbsWithRel. Values are Absolute when the sum of two values makes no
9 * sense, but the difference does (but results in a Relative).
10 * <p>
11 * Copyright (c) 2015-2025 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
12 * BSD-style license. See <a href="https://djunits.org/docs/license.html">DJUNITS License</a>.
13 * </p>
14 * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
15 * @author <a href="https://www.tudelft.nl/staff/p.knoppers/">Peter Knoppers</a>
16 * @param <AU> the absolute unit type
17 * @param <A> the absolute value type
18 * @param <RU> the relative unit type
19 * @param <R> the relative value type
20 */
21 public interface Absolute<AU extends AbsoluteLinearUnit<AU, RU>, A extends Absolute<AU, A, RU, R>, RU extends Unit<RU>,
22 R extends RelWithAbs<AU, A, RU, R>>
23 {
24 /**
25 * Add a Relative value to this Absolute value. A new value is returned due to immutability.
26 * @param rel R the right operand
27 * @return the sum of this value and the operand
28 */
29 A plus(R rel);
30
31 /**
32 * Subtract a Relative value from this Absolute value. A new value is returned due to immutability.
33 * @param rel R the right operand
34 * @return the subtraction of this value and the operand
35 */
36 A minus(R rel);
37
38 /**
39 * Subtract an Absolute value from this Absolute value, resulting in a Relative value. A new value is returned due to
40 * immutability.
41 * @param abs A the right operand
42 * @return the subtraction of this value and the operand
43 */
44 R minus(A abs);
45 }