1 package org.djunits.value.vdouble.scalar.base;
2
3 import org.djunits.unit.Unit;
4 import org.djunits.value.util.ValueUtil;
5 import org.djunits.value.vdouble.scalar.Dimensionless;
6 import org.djunits.value.vdouble.scalar.SIScalar;
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public abstract class AbstractDoubleScalarRel<U extends Unit<U>, R extends AbstractDoubleScalarRel<U, R>>
22 extends AbstractDoubleScalar<U, R> implements DoubleScalarInterface.Rel<U, R>
23 {
24
25 private static final long serialVersionUID = 20150626L;
26
27
28
29
30
31
32 public AbstractDoubleScalarRel(final double value, final U unit)
33 {
34 super(unit, unit.isBaseSIUnit() ? value : ValueUtil.expressAsSIUnit(value, unit));
35 }
36
37
38
39
40
41 public AbstractDoubleScalarRel(final R value)
42 {
43 super(value.getDisplayUnit(), value.getSI());
44 }
45
46
47 @Override
48 public final R plus(final R increment)
49 {
50 if (getDisplayUnit().isBaseSIUnit())
51 {
52 return instantiateRel(this.getSI() + increment.getSI(), getDisplayUnit().getStandardUnit());
53 }
54 return getDisplayUnit().equals(increment.getDisplayUnit())
55 ? instantiateRel(getInUnit() + increment.getInUnit(), getDisplayUnit())
56 : instantiateRel(this.getSI() + increment.getSI(), getDisplayUnit().getStandardUnit());
57 }
58
59
60 @Override
61 public final R minus(final R decrement)
62 {
63 if (getDisplayUnit().isBaseSIUnit())
64 {
65 return instantiateRel(this.getSI() - decrement.getSI(), getDisplayUnit().getStandardUnit());
66 }
67 return getDisplayUnit().equals(decrement.getDisplayUnit())
68 ? instantiateRel(getInUnit() - decrement.getInUnit(), getDisplayUnit())
69 : instantiateRel(this.getSI() - decrement.getSI(), getDisplayUnit().getStandardUnit());
70 }
71
72
73
74
75
76
77 public SIScalar times(final AbstractDoubleScalarRel<?, ?> otherScalar)
78 {
79 return DoubleScalar.multiply(this, otherScalar);
80 }
81
82
83
84
85
86 public SIScalar reciprocal()
87 {
88 return DoubleScalar.divide(Dimensionless.ONE, this);
89 }
90
91
92
93
94
95
96 public SIScalar divide(final AbstractDoubleScalarRel<?, ?> otherScalar)
97 {
98 return DoubleScalar.divide(this, otherScalar);
99 }
100
101
102
103
104
105
106 @Override
107 @SuppressWarnings("checkstyle:designforextension")
108 public R abs()
109 {
110 return instantiateRel(Math.abs(getInUnit()), getDisplayUnit());
111 }
112
113
114 @Override
115 @SuppressWarnings("checkstyle:designforextension")
116 public R ceil()
117 {
118 return instantiateRel(Math.ceil(getInUnit()), getDisplayUnit());
119 }
120
121
122 @Override
123 @SuppressWarnings("checkstyle:designforextension")
124 public R floor()
125 {
126 return instantiateRel(Math.floor(getInUnit()), getDisplayUnit());
127 }
128
129
130 @Override
131 @SuppressWarnings("checkstyle:designforextension")
132 public R rint()
133 {
134 return instantiateRel(Math.rint(getInUnit()), getDisplayUnit());
135 }
136
137
138 @Override
139 @SuppressWarnings("checkstyle:designforextension")
140 public R neg()
141 {
142 return instantiateRel(-getInUnit(), getDisplayUnit());
143 }
144
145
146 @Override
147 @SuppressWarnings("checkstyle:designforextension")
148 public R times(final double constant)
149 {
150 return instantiateRel(getInUnit() * constant, getDisplayUnit());
151 }
152
153
154 @Override
155 @SuppressWarnings("checkstyle:designforextension")
156 public R divide(final double constant)
157 {
158 return instantiateRel(getInUnit() / constant, getDisplayUnit());
159 }
160
161
162 @Override
163 @SuppressWarnings("checkstyle:designforextension")
164 public R times(final float constant)
165 {
166 return instantiateRel(getInUnit() * constant, getDisplayUnit());
167 }
168
169
170 @Override
171 @SuppressWarnings("checkstyle:designforextension")
172 public R divide(final float constant)
173 {
174 return instantiateRel(getInUnit() / constant, getDisplayUnit());
175 }
176
177 }