package nl.uva.softwcons.ql.eval.value;
import java.math.BigDecimal;
import java.math.BigInteger;
public class NumberValue extends Value {
private final BigDecimal value;
public NumberValue(final int value) {
this.value = new BigDecimal(value);
}
public NumberValue(final double value) {
this.value = new BigDecimal(value);
}
public NumberValue(final Number value) {
this.value = new BigDecimal(value.toString());
}
public NumberValue(final BigDecimal value) {
this.value = value;
}
public NumberValue(final BigInteger value) {
this.value = new BigDecimal(value);
}
@Override
public BigDecimal getNumber() {
return value;
}
@Override
public String toString() {
return value.toString();
}
@Override
public Value add(final Value otherValue) {
return otherValue.addNumber(this);
}
@Override
public Value subtract(final Value otherValue) {
return otherValue.subtractNumber(this);
}
@Override
public Value multiply(final Value otherValue) {
return otherValue.multiplyNumber(this);
}
@Override
public Value divide(final Value otherValue) {
return otherValue.divideNumber(this);
}
@Override
public Value isEqual(final Value otherValue) {
return otherValue.isEqualNumber(this);
}
@Override
public Value isGreater(final Value otherValue) {
return otherValue.isGreaterNumber(this);
}
@Override
public Value isLower(final Value otherValue) {
return otherValue.isLowerNumber(this);
}
@Override
public Value isGreaterOrEqual(final Value otherValue) {
return otherValue.isGreaterOrEqualNumber(this);
}
@Override
public Value isLowerOrEqual(final Value otherValue) {
return otherValue.isLowerNumber(this);
}
@Override
public Value addNumber(final NumberValue otherValue) {
return new NumberValue(this.value.add(otherValue.getNumber()));
}
@Override
public Value subtractNumber(final NumberValue otherValue) {
return new NumberValue(otherValue.getNumber().subtract(this.value));
}
@Override
public Value multiplyNumber(final NumberValue otherValue) {
return new NumberValue(this.value.multiply(otherValue.getNumber()));
}
@Override
public Value divideNumber(final NumberValue otherValue) {
return new NumberValue(otherValue.getNumber().divide(this.value));
}
@Override
public BooleanValue isEqualNumber(final NumberValue otherValue) {
return new BooleanValue(this.value.compareTo(otherValue.getNumber()) == 0);
}
@Override
public BooleanValue isGreaterNumber(final NumberValue otherValue) {
return new BooleanValue(otherValue.getNumber().compareTo(this.value) > 0);
}
@Override
public BooleanValue isLowerNumber(final NumberValue otherValue) {
return new BooleanValue(otherValue.getNumber().compareTo(this.value) < 0);
}
@Override
public BooleanValue isGreaterOrEqualNumber(final NumberValue otherValue) {
return new BooleanValue(otherValue.getNumber().compareTo(this.value) >= 0);
}
@Override
public BooleanValue isLowerOrEqualNumber(final NumberValue otherValue) {
return new BooleanValue(otherValue.getNumber().compareTo(this.value) <= 0);
}
}