package com.tddinaction.calculator;
import java.util.ArrayList;
import java.util.List;
public class Calculator {
private static final int HISTORY_SIZE = 6;
private static Calculator instance;
public static Calculator getInstance() {
if (instance == null) {
instance = new Calculator();
}
return instance;
}
private List<Operation> operationHistory = new ArrayList<Operation>();
private void addToHistory(double left, char operator, double right) {
Operation operation = new Operation();
operation.left = left;
operation.right = right;
operation.operator = operator;
operation.index = operationHistory.size() + 1;
operationHistory.add(operation);
if (operationHistory.size() > HISTORY_SIZE) {
operationHistory.remove(0);
}
}
public double add(double left, double right) {
addToHistory(left, '+', right);
return left + right;
}
public double subtract(double left, double right) {
addToHistory(left, '-', right);
return left - right;
}
public double multiply(double left, double right) {
addToHistory(left, '*', right);
return left * right;
}
public double divide(double left, double right) {
addToHistory(left, '/', right);
if (right == 0.0d) {
throw new IllegalArgumentException(
"Can't divide with zero");
}
return left / right;
}
public List<Operation> getOperations() {
return operationHistory;
}
}