1 package org.djunits.value.vdouble.scalar.base;
2
3 import org.djunits.unit.Unit;
4 import org.djunits.value.Absolute;
5 import org.djunits.value.AbstractScalar;
6 import org.djunits.value.formatter.Format;
7 import org.djunits.value.util.ValueUtil;
8
9
10
11
12
13
14
15
16
17
18
19
20 public abstract class AbstractDoubleScalar<U extends Unit<U>, S extends AbstractDoubleScalar<U, S>> extends AbstractScalar<U, S>
21 implements DoubleScalarInterface<U, S>
22 {
23
24 private static final long serialVersionUID = 20161015L;
25
26
27 @SuppressWarnings("checkstyle:visibilitymodifier")
28 public final double si;
29
30
31
32
33
34
35 AbstractDoubleScalar(final U unit, final double si)
36 {
37 super(unit);
38 this.si = si;
39 }
40
41
42 @Override
43 public final double getSI()
44 {
45 return this.si;
46 }
47
48
49 @Override
50 public final double getInUnit()
51 {
52 return ValueUtil.expressAsUnit(getSI(), getDisplayUnit());
53 }
54
55
56 @Override
57 public final double getInUnit(final U targetUnit)
58 {
59 return ValueUtil.expressAsUnit(getSI(), targetUnit);
60 }
61
62
63 @Override
64 public final boolean lt(final S o)
65 {
66 return this.getSI() < o.getSI();
67 }
68
69
70 @Override
71 public final boolean le(final S o)
72 {
73 return this.getSI() <= o.getSI();
74 }
75
76
77 @Override
78 public final boolean gt(final S o)
79 {
80 return this.getSI() > o.getSI();
81 }
82
83
84 @Override
85 public final boolean ge(final S o)
86 {
87 return this.getSI() >= o.getSI();
88 }
89
90
91 @Override
92 public final boolean eq(final S o)
93 {
94 return this.getSI() == o.getSI();
95 }
96
97
98 @Override
99 public final boolean ne(final S o)
100 {
101 return this.getSI() != o.getSI();
102 }
103
104
105 @Override
106 public final boolean lt0()
107 {
108 return this.getSI() < 0.0;
109 }
110
111
112 @Override
113 public final boolean le0()
114 {
115 return this.getSI() <= 0.0;
116 }
117
118
119 @Override
120 public final boolean gt0()
121 {
122 return this.getSI() > 0.0;
123 }
124
125
126 @Override
127 public final boolean ge0()
128 {
129 return this.getSI() >= 0.0;
130 }
131
132
133 @Override
134 public final boolean eq0()
135 {
136 return this.getSI() == 0.0;
137 }
138
139
140 @Override
141 public final boolean ne0()
142 {
143 return this.getSI() != 0.0;
144 }
145
146
147 @Override
148 public final int compareTo(final S o)
149 {
150 return Double.compare(this.getSI(), o.getSI());
151 }
152
153
154 @Override
155 public int intValue()
156 {
157 return (int) this.getSI();
158 }
159
160
161 @Override
162 public long longValue()
163 {
164 return (long) this.getSI();
165 }
166
167
168 @Override
169 public float floatValue()
170 {
171 return (float) this.getSI();
172 }
173
174
175 @Override
176 public double doubleValue()
177 {
178 return this.getSI();
179 }
180
181
182
183
184
185
186 @Override
187 protected Object clone() throws CloneNotSupportedException
188 {
189 return super.clone();
190 }
191
192
193 @Override
194 public final String toString()
195 {
196 return toString(getDisplayUnit(), false, true);
197 }
198
199
200 @Override
201 public final String toString(final U displayUnit)
202 {
203 return toString(displayUnit, false, true);
204 }
205
206
207 @Override
208 public final String toString(final boolean verbose, final boolean withUnit)
209 {
210 return toString(getDisplayUnit(), verbose, withUnit);
211 }
212
213
214 @Override
215 public final String toString(final U displayUnit, final boolean verbose, final boolean withUnit)
216 {
217 StringBuffer buf = new StringBuffer();
218 if (verbose)
219 {
220 buf.append(this instanceof Absolute ? "Abs " : "Rel ");
221 }
222 double d = ValueUtil.expressAsUnit(getSI(), displayUnit);
223 buf.append(Format.format(d));
224 if (withUnit)
225 {
226 buf.append(" ");
227 buf.append(displayUnit.getDefaultDisplayAbbreviation());
228 }
229 return buf.toString();
230 }
231
232
233 @Override
234 @SuppressWarnings("checkstyle:designforextension")
235 public int hashCode()
236 {
237 final int prime = 31;
238 int result = getDisplayUnit().getStandardUnit().hashCode();
239 long temp;
240 temp = Double.doubleToLongBits(this.getSI());
241 result = prime * result + (int) (temp ^ (temp >>> 32));
242 return result;
243 }
244
245
246 @Override
247 @SuppressWarnings({"checkstyle:designforextension", "checkstyle:needbraces", "unchecked"})
248 public boolean equals(final Object obj)
249 {
250 if (this == obj)
251 return true;
252 if (obj == null)
253 return false;
254 if (getClass() != obj.getClass())
255 return false;
256 AbstractDoubleScalar<U, S> other = (AbstractDoubleScalar<U, S>) obj;
257 if (!getDisplayUnit().getStandardUnit().equals(other.getDisplayUnit().getStandardUnit()))
258 return false;
259 if (Double.doubleToLongBits(this.getSI()) != Double.doubleToLongBits(other.getSI()))
260 return false;
261 return true;
262 }
263
264 }