package ql.ast.expression_value; import java.math.BigDecimal; import ql.ast.visitor_elements.IValueElementVisitor; /** * @author orosu */ public class IntegerValue extends NumberValue { private final Integer _value; public IntegerValue(int value) { super(value); this._value = value; } @Override public Integer getValue() { return this._value; } @Override public IValue add(NumberValue rightValue) { return rightValue.addInteger(this); } @Override public IntegerValue addInteger(IntegerValue leftValue) { return new IntegerValue(leftValue.getValue() + this.getValue()); } @Override public DecimalValue addDecimal(DecimalValue leftValue) { return leftValue.addDecimal(new DecimalValue(new BigDecimal(this.getValue()))); } @Override public IValue divide(NumberValue rightValue) { return rightValue.divideInteger(this); } @Override public IntegerValue divideInteger(IntegerValue leftValue) { return new IntegerValue(leftValue.getValue() / this.getValue()); } @Override public IValue divideDecimal(DecimalValue leftValue) { return leftValue.divide(new DecimalValue(new BigDecimal(this.getValue()))); } @Override public IValue multiply(NumberValue rightValue) { return rightValue.multiplyInteger(this); } @Override public IntegerValue multiplyInteger(IntegerValue leftValue) { return new IntegerValue(leftValue.getValue() * this.getValue()); } @Override public IValue multiplyDecimal(DecimalValue leftValue) { return leftValue.multiply(new DecimalValue(new BigDecimal(this.getValue()))); } @Override public IValue remainder(NumberValue rightValue) { return rightValue.remainderInteger(this); } @Override public IntegerValue remainderInteger(IntegerValue leftValue) { return new IntegerValue(leftValue.getValue() % this.getValue()); } @Override public IValue remainderDecimal(DecimalValue leftValue) { return leftValue.remainder(new DecimalValue(new BigDecimal(this.getValue()))); } @Override public IValue subtract(NumberValue rightValue) { return rightValue.subtractInteger(this); } @Override public IntegerValue subtractInteger(IntegerValue leftValue) { return new IntegerValue(leftValue.getValue() - this.getValue()); } @Override public IValue subtractDecimal(DecimalValue leftValue) { return leftValue.subtract(new DecimalValue(new BigDecimal(this.getValue()))); } @Override public IValue greaterThan(NumberValue rightValue) { return rightValue.greaterThanInteger(this); } @Override public BooleanValue greaterThanInteger(IntegerValue leftValue) { return new BooleanValue(leftValue.getValue() > this.getValue()); } @Override public IValue greaterThanDecimal(DecimalValue leftValue) { return leftValue.greaterThan(new DecimalValue(new BigDecimal(this.getValue()))); } @Override public IValue greaterThanEqual(NumberValue rightValue) { return rightValue.greaterThanEqualInteger(this); } @Override public BooleanValue greaterThanEqualInteger(IntegerValue leftValue) { return new BooleanValue(leftValue.getValue() >= this.getValue()); } @Override public IValue greaterThanEqualDecimal(DecimalValue leftValue) { return leftValue.greaterThanEqual(new DecimalValue(new BigDecimal(this.getValue()))); } @Override public IValue lessThan(NumberValue rightValue) { return rightValue.lessThanInteger(this); } @Override public BooleanValue lessThanInteger(IntegerValue leftValue) { return new BooleanValue(leftValue.getValue() < this.getValue()); } @Override public IValue lessThanDecimal(DecimalValue leftValue) { return leftValue.lessThan(new DecimalValue(new BigDecimal(this.getValue()))); } @Override public IValue lessThanEqual(NumberValue rightValue) { return rightValue.lesssThanEqualInteger(this); } @Override public BooleanValue lessThanEqualInteger(IntegerValue leftValue) { return new BooleanValue(leftValue.getValue() <= this.getValue()); } @Override public IValue lessThanEqualDecimal(DecimalValue leftValue) { return leftValue.lessThanEqual(new DecimalValue(new BigDecimal(this.getValue()))); } @Override public IntegerValue unaryMinus() { return new IntegerValue(-this.getValue()); } @Override public IntegerValue unaryPlus() { return new IntegerValue(+this.getValue()); } @Override public boolean equals(IValue value) { return value instanceof IntegerValue; } @Override public <T> T accept(IValueElementVisitor<T> visitor) { return visitor.visit(this); } }