package org.uva.student.calinwouter.qlqls.ql.types; import org.uva.student.calinwouter.qlqls.ql.interfaces.IAllowTypeChecker; import org.uva.student.calinwouter.qlqls.ql.interfaces.ITypeCallback; import org.uva.student.calinwouter.qlqls.ql.interfaces.ITypeDescriptor; public class IntegerValue extends Value { public static final ITypeDescriptor INTEGER_VALUE_TYPE_DESCRIPTOR = new ITypeDescriptor() { public void callTypeMethod(final ITypeCallback typeCallback) { typeCallback.usesInteger(); } public IntegerValue getDefaultValue() { return new IntegerValue(0); } public boolean isAllowed(IAllowTypeChecker allowTypeChecker) { return allowTypeChecker.allowsIntegerValue(); } @Override public String toString() { return "Integer"; } @Override public boolean equals(final Object obj) { if (!(obj instanceof ITypeDescriptor)) { return false; } final ITypeDescriptor otherType = (ITypeDescriptor) obj; final Value otherDefaultValue = otherType.getDefaultValue(); final Value thisDefaultValue = getDefaultValue(); final BooleanValue equalityComparisonValue = otherDefaultValue.valueEquals(thisDefaultValue); return equalityComparisonValue.isTrue(); } }; public Value add(Value value) { return new IntegerValue((Integer) toJavaObject() + (Integer) value.toJavaObject()); } public Value subtract(Value value) { return new IntegerValue((Integer) toJavaObject() - (Integer) value.toJavaObject()); } public Value multiply(Value value) { return new IntegerValue((Integer) toJavaObject() * (Integer) value.toJavaObject()); } public Value divide(Value value) { return new IntegerValue((Integer) toJavaObject() / (Integer) value.toJavaObject()); } public Value modulo(Value value) { return new IntegerValue((Integer) toJavaObject() % (Integer) value.toJavaObject()); } public BooleanValue lesserThan(Value value) { return new BooleanValue((Integer) toJavaObject() < (Integer) value.toJavaObject()); } public BooleanValue greaterThan(Value value) { return new BooleanValue((Integer) toJavaObject() > (Integer) value.toJavaObject()); } public BooleanValue lesserThanOrEquals(Value value) { return new BooleanValue((Integer) toJavaObject() <= (Integer) value.toJavaObject()); } public BooleanValue greaterThanOrEquals(Value value) { return new BooleanValue((Integer) toJavaObject() >= (Integer) value.toJavaObject()); } @Override public void apply(ITypeCallback typeCallback) { typeCallback.usesInteger(); } public IntegerValue(Integer value) { super(value); } }