package ash.reverse.struct;
import java.io.PrintStream;

/**
 * タイトル付きの数値配列データ群とその集計結果をプリント出力する。
 */
public class ObjectAggregator {
	private PrintStream out;
	private int[] values;

	/**
	 * コンストラクタでは出力先のストリームと数値配列の個数を指定する。
	 * @param out 出力先のストリーム
	 * @param columns 数値配列の個数
	 */
	public ObjectAggregator(PrintStream out, int columns) {
		this.out = out;
		values = new int[columns];
	}

	/**
	 * 渡された数値列の累積値を計算すると共に、タイトル付きで出力する。
	 * @param title タイトル
	 * @param values 数値列
	 */
	public void print(String title, int... values) {
		int i = 0;
		for(int value : values)
			this.values[i++] += value;
		printData(title, values);
	}

	/**
	 * 集計結果をタイトル付きで出力する。
	 * @param title タイトル
	 */
	public void printSummary(String title) {
		printData(title, values);
	}

	/**
	 * 出力先ストリームにタイトルと数値列を出力する。
	 * @param title タイトル
	 * @param values 数値列
	 */
	protected void printData(String title, int... values) {
		out.printf("%-30s", title);
		for(int value : values) out.printf("\t%6s", value);
		out.println();
	}
}
