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