package org.lemsml.jlems.io.out; import java.io.File; import java.io.IOException; import java.util.ArrayList; import org.lemsml.jlems.core.logging.E; import org.lemsml.jlems.core.out.ResultWriter; import org.lemsml.jlems.core.run.RuntimeError; import org.lemsml.jlems.core.run.RuntimeOutput; import org.lemsml.jlems.io.util.FileUtil; public class StringBuilderResultWriter implements ResultWriter { String id; String fileName; int colCount; StringBuilder sb = new StringBuilder(); ArrayList<double[]> dat; int wkCount; double[] wk = null; boolean newFile = true; boolean verbose = false; public StringBuilderResultWriter(RuntimeOutput ro) { id = ro.getID(); fileName = ro.getFileName(); colCount = 1; dat = new ArrayList<double[]>(); } public String getID() { return id; } @Override public void addPoint(String id, double x, double y) { if (verbose) System.out.println("addPoint: "+id+", "+wkCount+" ("+(float)x+", "+(float)y+", ...)"); wk[wkCount] = y; wkCount += 1; } public void advance(double t) throws RuntimeError { if (wk != null) { if (verbose) System.out.println(".. advance: "+(float)t+", "+ wk.length+" points ("+(float)wk[0]+", "+ (wk.length>1 ? (float)wk[1]: "--")+", ...)"); dat.add(wk); if (verbose) System.out.println("a Last dat of "+dat.size()+" ("+(float)dat.get(dat.size()-1)[0]+", "+(float)dat.get(dat.size()-1)[1]+", ...)"); } else { if (verbose) System.out.println(".. no data advance..."); } if (dat.size() > 1000) { flush(); } wk = new double[colCount]; wk[0] = t; wkCount = 1; } @Override public void addedRecorder() { colCount += 1; } public void flush() throws RuntimeError { if (verbose) System.out.println("--------------\nf Last dat ("+(float)dat.get(dat.size()-1)[0]+", "+(float)dat.get(dat.size()-1)[1]+", ...)"); for (double[] d : dat) { for (int i = 0; i < d.length; i++) { sb.append((float)d[i]); sb.append("\t"); } sb.append("\n"); } if (verbose) { System.out.println("Flushed "+dat.size()+" sets of points..."); System.out.println("("+(float)dat.get(0)[0]+", "+(float)dat.get(0)[1]+", ...)"); System.out.println("..."); System.out.println("("+(float)dat.get(dat.size()-1)[0]+", "+(float)dat.get(dat.size()-1)[1]+", ...)"); } dat = new ArrayList<double[]>(); } @Override public void close() throws RuntimeError { if (verbose) System.out.println("close()..."); flush(); } public StringBuilder getSBOutput() { return sb; } }