package ast.value;
public class Int extends Value{
private final Integer value;
public Int(Integer value) {
this.value = value;
}
public Integer getValue() {
return value;
}
@Override
public Value add(Value val){
return val.addInt(this);
}
@Override
protected Value addInt(Int val){
return new Int(val.getValue() + getValue());
}
@Override
public Value sub(Value val){
return val.subInt(this);
}
@Override
protected Value subInt(Int val){
return new Int(val.getValue() - getValue());
}
@Override
public Value div(Value val){
return val.divInt(this);
}
@Override
protected Value divInt(Int val){
return new Int(val.getValue() / getValue());
}
@Override
public Value mul(Value val){
return val.mulInt(this);
}
@Override
protected Value mulInt(Int val){
return new Int(val.getValue() * getValue());
}
@Override
public Value gt(Value val){
return val.gtInt(this);
}
@Override
protected Value gtInt(Int val){
return new Bool(val.getValue() > getValue());
}
@Override
public Value lt(Value val){
return val.ltInt(this);
}
@Override
protected Value ltInt(Int val){
return new Bool(val.getValue() < getValue());
}
@Override
public Value geq(Value val){
return val.geqInt(this);
}
@Override
protected Value geqInt(Int val){
return new Bool(val.getValue() >= getValue());
}
@Override
public Value leq(Value val){
return val.leqInt(this);
}
@Override
protected Value leqInt(Int val){
return new Bool(val.getValue() <= getValue());
}
@Override
public Value pos(){
return new Int(+ getValue());
}
@Override
public Value neg(){
return new Int(- getValue());
}
@Override
public Value eq(Value val){
return val.eqInt(this);
}
@Override
protected Value eqInt(Int val){
return new Bool(val.getValue() == getValue());
}
@Override
public Value neq(Value val){
return val.neqInt(this);
}
@Override
protected Value neqInt(Int val){
return new Bool(val.getValue() != getValue());
}
@Override
public boolean isDefined() {
return true;
}
}