1 package eu.simuline.octave.io.impl;
2
3 import eu.simuline.octave.type.matrix.AbstractGenericMatrix;
4
5 import java.io.IOException;
6 import java.io.Writer;
7
8
9
10
11
12
13
14
15
16 abstract class AbstractLogicalFloatingPointWriter
17 <T extends AbstractGenericMatrix<?,?>>
18 extends AbstractPrimitiveMatrixWriter<T> {
19
20
21 @Override
22 public void write(final Writer writer,
23 final T octaveMatrix) throws IOException {
24 if (octaveMatrix.getSizeLength() > 2) {
25 writer.write("# type: " + octaveMatrixType() + "\n");
26 saveDataVectorized(writer, octaveMatrix);
27 } else {
28 if (octaveMatrix.getSizeLength() == 2 &&
29 octaveMatrix.getSize(1) == 1 &&
30 octaveMatrix.getSize(2) == 1) {
31
32 writer.write("# type: " + octaveScalarType() + "\n");
33 writer.write(octaveMatrix.getPlainString(0) + "\n");
34 } else {
35 writer.write("# type: " + octaveMatrixType() + "\n");
36 saveData2d(writer, octaveMatrix);
37 }
38 }
39 }
40
41 private void saveData2d(final Writer writer,
42 final T octaveMatrix)
43 throws IOException {
44
45 final int nrows = octaveMatrix.getSize(1);
46 final int ncols = octaveMatrix.getSizeLength() > 1
47 ? octaveMatrix.getSize(2) : 1;
48 writer.write(NROWS + nrows + "\n");
49 writer.write(NCOLUMNS + ncols + "\n");
50 for (int row = 0; row < nrows; row++) {
51 for (int col = 0; col < ncols; col++) {
52 writer.write(" " +
53 octaveMatrix.getPlainString(row + col * nrows));
54 }
55 writer.write('\n');
56 }
57 }
58
59 }