1 package org.djunits.value.vdouble.matrix;
2
3 import org.djunits.unit.AbsoluteLinearUnit;
4 import org.djunits.unit.Unit;
5 import org.djunits.value.StorageType;
6 import org.djunits.value.ValueException;
7 import org.djunits.value.vdouble.scalar.DoubleScalar;
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 public abstract class DoubleMatrix
23 {
24
25
26
27
28
29 public static class Abs<AU extends AbsoluteLinearUnit<AU, RU>, RU extends Unit<RU>> extends AbstractDoubleMatrixAbs<AU, RU,
30 DoubleMatrix.Abs<AU, RU>, DoubleMatrix.Rel<RU>, MutableDoubleMatrix.Abs<AU, RU>, DoubleScalar.Abs<AU, RU>>
31 {
32
33 private static final long serialVersionUID = 20151003L;
34
35
36
37
38
39
40
41
42 public Abs(final double[][] values, final AU unit, final StorageType storageType) throws ValueException
43 {
44 super(values, unit, storageType);
45 }
46
47
48
49
50
51
52
53 public Abs(final DoubleScalar.Abs<AU, RU>[][] values, final StorageType storageType) throws ValueException
54 {
55 super(values, storageType);
56 }
57
58
59
60
61
62
63 Abs(final DoubleMatrixData data, final AU unit)
64 {
65 super(data, unit);
66 }
67
68
69 @Override
70 @SuppressWarnings("designforextension")
71 public DoubleMatrix.Abs<AU, RU> toDense()
72 {
73 return this.data.isDense() ? this : instantiateTypeAbs(this.data.toDense(), getUnit());
74 }
75
76
77 @Override
78 @SuppressWarnings("designforextension")
79 public DoubleMatrix.Abs<AU, RU> toSparse()
80 {
81 return this.data.isSparse() ? this : instantiateTypeAbs(this.data.toSparse(), getUnit());
82 }
83
84
85 @Override
86 protected final DoubleMatrix.Abs<AU, RU> instantiateTypeAbs(final DoubleMatrixData dmd, final AU unit)
87 {
88 return new DoubleMatrix.Abs<AU, RU>(dmd, unit);
89 }
90
91
92 @Override
93 protected final DoubleMatrix.Rel<RU> instantiateTypeRel(final DoubleMatrixData dmd, final RU unit)
94 {
95 return new DoubleMatrix.Rel<RU>(dmd, unit);
96 }
97
98
99 @Override
100 protected final MutableDoubleMatrix.Abs<AU, RU> instantiateMutableType(final DoubleMatrixData dmd, final AU unit)
101 {
102 return new MutableDoubleMatrix.Abs<AU, RU>(dmd, unit);
103 }
104
105
106 @Override
107 protected final DoubleScalar.Abs<AU, RU> instantiateScalar(final double value, final AU unit)
108 {
109 return new DoubleScalar.Abs<AU, RU>(value, unit);
110 }
111 }
112
113
114
115
116
117 public static class Rel<U extends Unit<U>>
118 extends AbstractDoubleMatrixRel<U, DoubleMatrix.Rel<U>, MutableDoubleMatrix.Rel<U>, DoubleScalar.Rel<U>>
119
120 {
121
122 private static final long serialVersionUID = 20151003L;
123
124
125
126
127
128
129
130
131 public Rel(final double[][] values, final U unit, final StorageType storageType) throws ValueException
132 {
133 super(values, unit, storageType);
134 }
135
136
137
138
139
140
141
142 public Rel(final DoubleScalar.Rel<U>[][] values, final StorageType storageType) throws ValueException
143 {
144 super(values, storageType);
145 }
146
147
148
149
150
151
152 Rel(final DoubleMatrixData data, final U unit)
153 {
154 super(data, unit);
155 }
156
157
158 @Override
159 @SuppressWarnings("designforextension")
160 public DoubleMatrix.Rel<U> toDense()
161 {
162 return this.data.isDense() ? this : instantiateType(this.data.toDense(), getUnit());
163 }
164
165
166 @Override
167 @SuppressWarnings("designforextension")
168 public DoubleMatrix.Rel<U> toSparse()
169 {
170 return this.data.isSparse() ? this : instantiateType(this.data.toSparse(), getUnit());
171 }
172
173
174 @Override
175 protected final DoubleMatrix.Rel<U> instantiateType(final DoubleMatrixData dmd, final U unit)
176 {
177 return new DoubleMatrix.Rel<U>(dmd, unit);
178 }
179
180
181 @Override
182 protected final MutableDoubleMatrix.Rel<U> instantiateMutableType(final DoubleMatrixData dmd, final U unit)
183 {
184 return new MutableDoubleMatrix.Rel<U>(dmd, unit);
185 }
186
187
188 @Override
189 protected final DoubleScalar.Rel<U> instantiateScalar(final double value, final U unit)
190 {
191 return new DoubleScalar.Rel<U>(value, unit);
192 }
193 }
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208 static <AU extends AbsoluteLinearUnit<AU, RU>, RU extends Unit<RU>> DoubleMatrix.Abs<AU, RU> plus(
209 final DoubleMatrix.Abs<AU, RU> left, final DoubleMatrix.Rel<RU> right) throws ValueException
210 {
211 return left.mutable().plus(right);
212 }
213
214
215
216
217
218
219
220
221
222 static <U extends Unit<U>> DoubleMatrix.Rel<U> plus(final DoubleMatrix.Rel<U> left, final DoubleMatrix.Rel<U> right)
223 throws ValueException
224 {
225 return left.mutable().plus(right);
226 }
227
228
229
230
231
232
233
234
235
236
237 static <AU extends AbsoluteLinearUnit<AU, RU>, RU extends Unit<RU>> DoubleMatrix.Abs<AU, RU> minus(
238 final DoubleMatrix.Abs<AU, RU> left, final DoubleMatrix.Rel<RU> right) throws ValueException
239 {
240 return left.mutable().minus(right);
241 }
242
243
244
245
246
247
248
249
250
251
252 static <AU extends AbsoluteLinearUnit<AU, RU>, RU extends Unit<RU>> DoubleMatrix.Rel<RU> minus(
253 final DoubleMatrix.Abs<AU, RU> left, final DoubleMatrix.Abs<AU, RU> right) throws ValueException
254 {
255 return left.mutable().minus(right);
256 }
257
258
259
260
261
262
263
264
265
266 static <U extends Unit<U>> DoubleMatrix.Rel<U> minus(final DoubleMatrix.Rel<U> left, final DoubleMatrix.Rel<U> right)
267 throws ValueException
268 {
269 return left.mutable().minus(right);
270 }
271
272
273
274
275
276
277
278
279
280
281 static <U extends Unit<U>> DoubleMatrix.Rel<U> times(final DoubleMatrix.Rel<U> left, final DoubleMatrix.Rel<U> right)
282 throws ValueException
283 {
284 return left.mutable().times(right);
285 }
286
287
288
289
290
291
292
293
294
295
296 static <U extends Unit<U>> DoubleMatrix.Rel<U> divide(final DoubleMatrix.Rel<U> left, final DoubleMatrix.Rel<U> right)
297 throws ValueException
298 {
299 return left.mutable().divide(right);
300 }
301
302 }