package org.uva.sea.ql.interpreter.value; import org.uva.sea.ql.ast.type.Type; public class Int extends Num<Integer> { public Int(){ this.value = 0; } public Int(int value){ this.value = value; } @Override public Value<?> add(Value<?> value) { return value.intAdd(this); } @Override public Value<?> sub(Value<?> value) { return value.intSub(this); } @Override public Value<?> mul(Value<?> value) { return value.intMul(this); } @Override public Value<?> div(Value<?> value) { return value.intDiv(this); } @Override public Value<?> pos() { return this; } @Override public Value<?> neg() { return new Int(value * -1); } @Override public Value<?> lt(Value<?> value) { return value.intLt(this); } @Override public Value<?> leq(Value<?> value) { return value.intLeq(this); } @Override public Value<?> gt(Value<?> value) { return value.intGt(this); } @Override public Value<?> geq(Value<?> value) { return value.intGeq(this); } @Override public Value<?> eq(Value<?> value) { return value.intEq(this); } @Override public Value<?> neq(Value<?> value) { return value.intNeq(this); } @Override protected Value<?> intAdd(Int leftValue) { return new Int(leftValue.getValue() + value); } @Override protected Value<?> intSub(Int leftValue) { return new Int(leftValue.getValue() - value); } @Override protected Value<?> intMul(Int leftValue) { return new Int(leftValue.getValue() * value); } @Override protected Value<?> intDiv(Int leftValue) { return new Int(leftValue.getValue() / value); } @Override protected Value<?> intLt(Int leftValue) { return new Bool(leftValue.getValue() < value); } @Override protected Value<?> intLeq(Int leftValue) { return new Bool(leftValue.getValue() <= value); } @Override protected Value<?> intGt(Int leftValue) { return new Bool(leftValue.getValue() > value); } @Override protected Value<?> intGeq(Int leftValue) { return new Bool(leftValue.getValue() >= value); } @Override protected Value<?> intEq(Int leftValue) { return new Bool(leftValue.getValue().equals(value)); } @Override protected Value<?> intNeq(Int leftValue) { return new Bool(!leftValue.getValue().equals(value)); } @Override public Value<?> parse(Type type) { return type.hasValue().parse(this); } @Override protected Value<?> parse(Int value) { return value; } @Override protected Value<?> parse(Undefined value) { return new Int(); } }