package uva.ql.ast.value;
import java.util.Arrays;
import java.util.List;
import uva.ql.ast.type.*;
public class NumberValue extends GenericValue<Integer>{
private Integer value;
public NumberValue(Integer _value){
this.value = _value;
}
public NumberValue addition(NumberValue _value){
return new NumberValue(this.value + _value.value);
}
public NumberValue substraction(NumberValue _value){
return new NumberValue(this.value- _value.value);
}
public NumberValue exponentiation(NumberValue _value){
return new NumberValue((int)Math.pow(this.value, _value.value));
}
public NumberValue multiplication(NumberValue _value){
return new NumberValue(this.value * _value.value);
}
public NumberValue division(NumberValue _value){
try{
return new NumberValue(this.value / _value.value);
}
catch (ArithmeticException ex){
System.out.println("Exception -> NumberValue -> " + ex.getMessage());
}
return new NumberValue(0);
}
public BooleanValue greater(NumberValue _value){
return new BooleanValue(this.value > _value.value);
}
public BooleanValue greaterEqual(NumberValue _value){
return new BooleanValue(this.value >= _value.value);
}
public BooleanValue less(NumberValue _value){
return new BooleanValue(this.value < _value.value);
}
public BooleanValue lessEqual(NumberValue _value){
return new BooleanValue(this.value <= _value.value);
}
@Override
public Integer getValue(){
return this.value;
}
@Override
public List<Type> valueHasType() {
return Arrays.asList(new TypeInteger(), new TypeMoney());
}
@Override
public boolean equalsTo(GenericValue<?> value) {
if (value == null){
return false;
}
return value.getValue() == this.getValue();
}
@Override
public String toString(){
return String.valueOf(this.value);
}
}