1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package eu.simuline.octave.type;
20
21 import eu.simuline.octave.exception.OctaveClassCastException;
22 import eu.simuline.octave.type.cast.Cast;
23 import eu.simuline.octave.type.matrix.AbstractGenericMatrix;
24 import eu.simuline.octave.type.matrix.AbstractObjectMatrix;
25
26 import it.unimi.dsi.fastutil.objects.ObjectArrayList;
27
28 import java.util.List;
29
30
31
32
33 public final class OctaveCell
34 extends AbstractObjectMatrix<OctaveObject> implements OctaveObject {
35
36
37
38
39
40
41
42
43
44
45
46 private static final OctaveObject DEFAULT_VALUE = new OctaveDouble(0, 0);
47
48
49
50
51
52
53 @Deprecated
54 public OctaveCell() {
55 super();
56 }
57
58
59
60
61 public OctaveCell(final int... size) {
62 super(size);
63 }
64
65 private OctaveCell(final AbstractGenericMatrix<OctaveObject[], ObjectArrayList<OctaveObject>> o) {
66 super(o);
67 }
68
69 @Override
70 @SuppressWarnings("PMD.AvoidThrowingNullPointerException")
71 public void set(OctaveObject value, int... pos) {
72 if (value == null) {
73
74 throw new NullPointerException("Cannot put null into OctaveCell");
75 }
76 if (DEFAULT_VALUE.equals(value)) {
77 super.set(null, pos);
78 } else {
79 super.set(value, pos);
80 }
81 }
82
83 @Override
84 public OctaveObject get(int... pos) {
85 OctaveObject get = super.get(pos);
86 if (get == null) {
87 get = DEFAULT_VALUE;
88 }
89 return get.shallowCopy();
90
91 }
92
93
94
95
96
97
98
99
100
101
102 public <T extends OctaveObject> T get(final Class<T> castClass,
103 final int... pos) {
104 return Cast.cast(castClass, get(pos));
105 }
106
107 @Override
108 public OctaveCell shallowCopy() {
109 return new OctaveCell(this);
110 }
111
112 }