1
2 package eu.simuline.octave.io.impl;
3
4 import eu.simuline.octave.io.spi.OctaveDataWriter;
5 import eu.simuline.octave.type.matrix.AbstractGenericMatrix;
6
7 import java.io.IOException;
8 import java.io.Writer;
9
10
11
12
13
14
15
16
17 abstract class AbstractPrimitiveMatrixWriter
18 <T extends AbstractGenericMatrix<?,?>>
19 extends OctaveDataWriter<T> {
20
21 protected static final String NDIMS = "# ndims: ";
22 protected static final String NROWS = "# rows: ";
23 protected static final String NCOLUMNS = "# columns: ";
24
25
26 protected AbstractPrimitiveMatrixWriter() {
27 }
28
29
30
31
32 protected abstract String octaveMatrixType();
33
34
35
36
37 protected abstract String octaveScalarType();
38
39
40
41 public void write(final Writer writer,
42 final T octaveMatrix) throws IOException {
43 if (octaveMatrix.getSizeLength() == 2 &&
44 octaveMatrix.getSize(1) == 1 &&
45 octaveMatrix.getSize(2) == 1) {
46
47 writer.write("# type: " + octaveScalarType() + "\n");
48 writer.write(octaveMatrix.getPlainString(0) + "\n");
49 } else {
50 writer.write("# type: " + octaveMatrixType() + "\n");
51
52
53
54
55 saveDataVectorized(writer, octaveMatrix);
56 }
57 }
58
59 protected void saveDataVectorized(final Writer writer,
60 final T octaveMatrix)
61 throws IOException {
62
63 writer.write(NDIMS + octaveMatrix.getSizeLength() + "\n");
64 for (int idx = 1; idx <= octaveMatrix.getSizeLength(); idx++) {
65 writer.write(" " + octaveMatrix.getSize(idx));
66 }
67
68 int len = octaveMatrix.dataSize();
69 for (int idx = 0; idx < len; idx++) {
70 writer.write("\n " + octaveMatrix.getPlainString(idx));
71 }
72
73 writer.write("\n");
74 }
75
76 }