package de.gaalop.tba.table; import de.gaalop.tba.BladeRef; import de.gaalop.tba.IMultTable; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.Charset; import java.util.logging.Level; import java.util.logging.Logger; /** * Stores the product tables in a human readable format * @author christian */ public class TableHumanReadable implements TableReaderIO { @Override public void readFromInputStream(DataInputStream filestream, IMultTable innerTable, IMultTable outerTable, IMultTable geoTable) { try { BufferedReader d = new BufferedReader(new InputStreamReader(filestream, Charset.forName("UTF-8"))); long line = 0; while (d.ready()) { String rest = d.readLine(); if (line == 0) rest = "E"+rest; BladeRef ref0 = Parser.parseBladeRef(rest.substring(0, rest.indexOf(';'))); rest = rest.substring(rest.indexOf(';') + 1); BladeRef ref1 = Parser.parseBladeRef(rest.substring(0, rest.indexOf(';'))); rest = rest.substring(rest.indexOf(';') + 1); int index0 = ref0.getIndex(); int index1 = ref1.getIndex(); innerTable.setProduct(index0, index1, Parser.parseMultivector(rest.substring(0, rest.indexOf(';')))); rest = rest.substring(rest.indexOf(';') + 1); outerTable.setProduct(index0, index1, Parser.parseMultivector(rest.substring(0, rest.indexOf(';')))); rest = rest.substring(rest.indexOf(';') + 1); geoTable.setProduct(index0, index1, Parser.parseMultivector(rest)); line++; } d.close(); } catch (IOException ex) { Logger.getLogger(TableCompressed.class.getName()).log(Level.SEVERE, null, ex); } } @Override public void writeFromInputStream(int bladeCount, int dimension, IMultTable innerTable, IMultTable outerTable, IMultTable geoTable, DataOutputStream outputStream) { PrintWriter out = new PrintWriter(new OutputStreamWriter(outputStream, Charset.forName("UTF-8"))); long line = 0; for (int i=0;i<bladeCount;i++) for (int j=0;j<bladeCount;j++) { if (line!=0) out.print("E"); out.print(i);out.print(";"); out.print("E");out.print(j);out.print(";"); out.print(innerTable.getProduct(i, j).print());out.print(";"); out.print(outerTable.getProduct(i, j).print());out.print(";"); out.print(geoTable.getProduct(i, j).print()); out.println(); line++; } out.close(); } }