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