package ql.value;
import ql.Value;
import ql.ast.QLType;
import ql.ast.type.QLError;
public class UndefinedValue implements Value {
@Override
public boolean isUndefined() {
return true;
}
@Override
public boolean isNumeric() {
return false;
}
@Override
public Void getPrimitive() {
return null;
}
@Override
public QLType getType() {
return new QLError();
}
@Override
public Value add(Value argument) {
return this;
}
@Override
public Value divide(Value argument) {
return this;
}
@Override
public Value multiply(Value argument) {
return this;
}
@Override
public Value subtract(Value argument) {
return this;
}
@Override
public Value not() {
return this;
}
@Override
public Value positive() {
return this;
}
@Override
public Value negative() {
return this;
}
@Override
public Value or(Value argument) {
return argument.orBoolean(new BooleanValue(false));
}
@Override
public Value notEqualTo(Value argument) {
return this;
}
@Override
public Value lowerThan(Value argument) {
return this;
}
@Override
public Value lowerOrEqual(Value argument) {
return this;
}
@Override
public Value greaterThan(Value argument) {
return this;
}
@Override
public Value greaterOrEqual(Value argument) {
return this;
}
@Override
public Value equalTo(Value argument) {
return this;
}
@Override
public Value and(Value argument) {
return argument.andBoolean(new BooleanValue(false));
}
@Override
public Value addInteger(IntegerValue argument) {
return this;
}
@Override
public Value addFloat(FloatValue argument) {
return this;
}
@Override
public Value divideInteger(IntegerValue argument) {
return this;
}
@Override
public Value divideFloat(FloatValue argument) {
return this;
}
@Override
public Value multiplyInteger(IntegerValue argument) {
return this;
}
@Override
public Value multiplyFloat(FloatValue argument) {
return this;
}
@Override
public Value subtractInteger(IntegerValue argument) {
return this;
}
@Override
public Value subtractFloat(FloatValue argument) {
return this;
}
@Override
public Value orBoolean(BooleanValue argument) {
return new BooleanValue(argument.getPrimitive());
}
@Override
public Value notEqualToBoolean(BooleanValue argument) {
return this;
}
@Override
public Value notEqualToInteger(IntegerValue argument) {
return this;
}
@Override
public Value notEqualToFloat(FloatValue argument) {
return this;
}
@Override
public Value notEqualToString(StringValue argument) {
return this;
}
@Override
public Value lowerThanInteger(IntegerValue argument) {
return this;
}
@Override
public Value lowerThanFloat(FloatValue argument) {
return this;
}
@Override
public Value lowerOrEqualInteger(IntegerValue argument) {
return this;
}
@Override
public Value lowerOrEqualFloat(FloatValue argument) {
return this;
}
@Override
public Value greaterThanInteger(IntegerValue argument) {
return this;
}
@Override
public Value greaterThanFloat(FloatValue argument) {
return this;
}
@Override
public Value greaterOrEqualThanInteger(IntegerValue argument) {
return this;
}
@Override
public Value greaterOrEqualThanFloat(FloatValue argument) {
return this;
}
@Override
public Value equalToBoolean(BooleanValue argument) {
return this;
}
@Override
public Value equalToInteger(IntegerValue argument) {
return this;
}
@Override
public Value equalToFloat(FloatValue argument) {
return this;
}
@Override
public Value equalToString(StringValue argument) {
return this;
}
@Override
public Value andBoolean(BooleanValue argument) {
return new BooleanValue(false);
}
@Override
public int hashCode() {
return Boolean.hashCode(false);
}
@Override
public boolean equals(Object obj) {
if(obj instanceof UndefinedValue) {
return true;
}
return false;
};
@Override
public String toString() {
return "Undefined";
}
}