package ql.semantics.values;
/**
* Created by bore on 16/02/15.
*/
public class IntValue extends Value<Integer>
{
public IntValue(Integer value)
{
super(value);
}
public Value add(Value v)
{
return v.addInteger(this);
}
@Override
public Value addInteger(IntValue value)
{
return new IntValue(this.getValue() + value.getValue());
}
@Override
public Value sub(Value v)
{
return v.subInteger(this);
}
@Override
public Value subInteger(IntValue v)
{
return new IntValue(v.getValue() - this.getValue());
}
@Override
public Value mul(Value v)
{
return v.mulInteger(this);
}
@Override
public Value mulInteger(IntValue v)
{
return new IntValue(this.getValue() * v.getValue());
}
@Override
public Value div(Value v)
{
return v.divInteger(this);
}
@Override
public Value divInteger(IntValue v)
{
return new IntValue(v.getValue() / this.getValue());
}
@Override
public Value gt(Value v)
{
return v.gtInteger(this);
}
@Override
public Value gtInteger(IntValue v)
{
return new BoolValue(v.getValue() > this.getValue());
}
@Override
public Value lt(Value v)
{
return v.ltInteger(this);
}
@Override
public Value ltInteger(IntValue v)
{
return new BoolValue(v.getValue() < this.getValue());
}
@Override
public Value gtEqu(Value v)
{
return v.gtEquInteger(this);
}
@Override
public Value gtEquInteger(IntValue v)
{
return new BoolValue(v.getValue() >= this.getValue());
}
@Override
public Value ltEqu(Value v)
{
return v.ltEquInteger(this);
}
@Override
public Value ltEquInteger(IntValue v)
{
return new BoolValue(v.getValue() <= this.getValue());
}
@Override
public Value equ(Value v)
{
return v.equInteger(this);
}
@Override
public Value equInteger(IntValue v)
{
return new BoolValue(v.getValue() == this.getValue());
}
@Override
public Value notEqu(Value v)
{
return v.notEquInteger(this);
}
@Override
public Value notEquInteger(IntValue v)
{
return new BoolValue(v.getValue() != this.getValue());
}
@Override
public Value neg()
{
return this.negInteger();
}
@Override
public Value negInteger()
{
return new IntValue(this.getValue() * -1);
}
@Override
public Value pos()
{
return this.posInteger();
}
@Override
public Value posInteger()
{
return new IntValue(this.getValue());
}
@Override
public Value promoteTo(Value v)
{
return v.promoteInt(this);
}
public <T> T accept (ValueVisitor<T> visitor)
{
return visitor.visit(this);
}
}