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