package nl.uva.se.ql.evaluation.value;
import java.math.BigDecimal;
public class DecimalValue extends Value<BigDecimal> {
public DecimalValue(BigDecimal value) {
super(value);
}
@Override
public Value add(Value value) {
return value.addDecimal(this);
}
@Override
public DecimalValue addInteger(IntegerValue value) {
Integer i = value.getValue();
return new DecimalValue(new BigDecimal(i).add(getValue()));
}
@Override
public DecimalValue addDecimal(DecimalValue value) {
BigDecimal d = value.getValue();
return new DecimalValue(d.add(getValue()));
}
@Override
public Value div(Value value) {
return value.divDecimal(this);
}
@Override
public DecimalValue divInteger(IntegerValue value) {
Integer i = value.getValue();
return new DecimalValue(new BigDecimal(i).divide(getValue()));
}
@Override
public DecimalValue divDecimal(DecimalValue value) {
BigDecimal d = value.getValue();
return new DecimalValue(d.divide(getValue()));
}
@Override
public Value mod(Value value) {
return value.modDecimal(this);
}
@Override
public DecimalValue modInteger(IntegerValue value) {
Integer i = value.getValue();
return new DecimalValue(new BigDecimal(i).remainder(getValue()));
}
@Override
public DecimalValue modDecimal(DecimalValue value) {
BigDecimal d = value.getValue();
return new DecimalValue(d.remainder(getValue()));
}
@Override
public Value mult(Value value) {
return value.multDecimal(this);
}
@Override
public DecimalValue multInteger(IntegerValue value) {
Integer i = value.getValue();
return new DecimalValue(new BigDecimal(i).multiply(getValue()));
}
@Override
public DecimalValue multDecimal(DecimalValue value) {
BigDecimal d = value.getValue();
return new DecimalValue(d.multiply(getValue()));
}
@Override
public Value neg() {
return negDecimal();
}
@Override
public DecimalValue negInteger() {
return new DecimalValue(getValue().negate());
}
@Override
public DecimalValue negDecimal() {
return new DecimalValue(getValue().negate());
}
@Override
public Value pos() {
return posDecimal();
}
@Override
public DecimalValue posInteger() {
return new DecimalValue(getValue());
}
@Override
public DecimalValue posDecimal() {
return new DecimalValue(getValue());
}
@Override
public Value pow(Value value) {
return value.powDecimal(this);
}
@Override
public DecimalValue powInteger(IntegerValue value) {
Integer i = value.getValue();
return new DecimalValue(new BigDecimal(i).pow(getValue().intValue()));
}
@Override
public DecimalValue powDecimal(DecimalValue value) {
BigDecimal d = value.getValue();
return new DecimalValue(d.pow(getValue().intValue()));
}
@Override
public Value sub(Value value) {
return value.subDecimal(this);
}
@Override
public DecimalValue subInteger(IntegerValue value) {
Integer i = value.getValue();
return new DecimalValue(new BigDecimal(i).subtract(getValue()));
}
@Override
public DecimalValue subDecimal(DecimalValue value) {
BigDecimal d = value.getValue();
return new DecimalValue(d.subtract(getValue()));
}
@Override
public Value equal(Value value) {
return value.equalDecimal(this);
}
@Override
public BooleanValue equalInteger(IntegerValue value) {
Integer i = value.getValue();
return new BooleanValue(new BigDecimal(i).compareTo(getValue()) == 0);
}
@Override
public BooleanValue equalDecimal(DecimalValue value) {
BigDecimal d = value.getValue();
return new BooleanValue(d.compareTo(getValue()) == 0);
}
@Override
public Value greaterOrEqual(Value value) {
return value.greaterOrEqualDecimal(this);
}
@Override
public BooleanValue greaterOrEqualInteger(IntegerValue value) {
Integer i = value.getValue();
return new BooleanValue(new BigDecimal(i).compareTo(getValue()) >= 0);
}
@Override
public BooleanValue greaterOrEqualDecimal(DecimalValue value) {
BigDecimal d = value.getValue();
return new BooleanValue(d.compareTo(getValue()) >= 0);
}
@Override
public Value greaterThan(Value value) {
return value.greaterThanDecimal(this);
}
@Override
public BooleanValue greaterThanInteger(IntegerValue value) {
Integer i = value.getValue();
return new BooleanValue(new BigDecimal(i).compareTo(getValue()) > 0);
}
@Override
public BooleanValue greaterThanDecimal(DecimalValue value) {
BigDecimal d = value.getValue();
return new BooleanValue(d.compareTo(getValue()) > 0);
}
@Override
public Value lessOrEqual(Value value) {
return value.lessOrEqualDecimal(this);
}
@Override
public BooleanValue lessOrEqualInteger(IntegerValue value) {
Integer i = value.getValue();
return new BooleanValue(new BigDecimal(i).compareTo(getValue()) <= 0);
}
@Override
public BooleanValue lessOrEqualDecimal(DecimalValue value) {
BigDecimal d = value.getValue();
return new BooleanValue(d.compareTo(getValue()) <= 0);
}
@Override
public Value lessThan(Value value) {
return value.lessThanDecimal(this);
}
@Override
public BooleanValue lessThanInteger(IntegerValue value) {
Integer i = value.getValue();
return new BooleanValue(new BigDecimal(i).compareTo(getValue()) < 0);
}
@Override
public BooleanValue lessThanDecimal(DecimalValue value) {
BigDecimal d = value.getValue();
return new BooleanValue(d.compareTo(getValue()) < 0);
}
@Override
public Value notEqual(Value value) {
return value.notEqualDecimal(this);
}
@Override
public BooleanValue notEqualInteger(IntegerValue value) {
Integer i = value.getValue();
return new BooleanValue(new BigDecimal(i).compareTo(getValue()) != 0);
}
@Override
public BooleanValue notEqualDecimal(DecimalValue value) {
BigDecimal d = value.getValue();
return new BooleanValue(d.compareTo(getValue()) != 0);
}
}