package ql.value;
import ql.Value;
import ql.ast.QLType;
import ql.ast.type.QLFloat;
public class FloatValue implements Value {
protected final Float value;
public FloatValue(Float value) {
this.value = value;
}
@Override
public boolean isUndefined() {
return false;
}
@Override
public boolean isNumeric() {
return true;
}
@Override
public Float getPrimitive() {
return value;
}
@Override
public QLType getType() {
return new QLFloat();
}
@Override
public Value add(Value argument) {
return argument.addFloat(this);
}
@Override
public Value addInteger(IntegerValue argument) {
return new FloatValue(argument.getPrimitive() + getPrimitive());
}
@Override
public Value addFloat(FloatValue argument) {
return new FloatValue(argument.getPrimitive() + getPrimitive());
}
@Override
public Value divide(Value argument) {
return argument.divideFloat(this);
}
@Override
public Value divideInteger(IntegerValue argument) {
return new FloatValue(argument.getPrimitive() / getPrimitive());
}
@Override
public Value divideFloat(FloatValue argument) {
return new FloatValue(argument.getPrimitive() / getPrimitive());
}
@Override
public Value multiply(Value argument) {
return argument.multiplyFloat(this);
}
@Override
public Value multiplyInteger(IntegerValue argument) {
return new FloatValue(argument.getPrimitive() * getPrimitive());
}
@Override
public Value multiplyFloat(FloatValue argument) {
return new FloatValue(argument.getPrimitive() * getPrimitive());
}
@Override
public Value subtract(Value argument) {
return argument.subtractFloat(this);
}
@Override
public Value subtractInteger(IntegerValue argument) {
return new FloatValue(argument.getPrimitive() - getPrimitive());
}
@Override
public Value subtractFloat(FloatValue argument) {
return new FloatValue(argument.getPrimitive() - getPrimitive());
}
@Override
public Value not() {
throw new UnsupportedOperationException("Cannot negate a Float.");
}
@Override
public Value positive() {
return new FloatValue(getPrimitive() < 0.0 ? getPrimitive() * -1 : getPrimitive());
}
@Override
public Value negative() {
return new FloatValue(getPrimitive() * -1);
}
@Override
public Value or(Value argument) {
throw new UnsupportedOperationException();
}
@Override
public Value orBoolean(BooleanValue argument) {
throw new UnsupportedOperationException();
}
@Override
public Value notEqualTo(Value argument) {
return argument.notEqualToFloat(this);
}
@Override
public Value notEqualToBoolean(BooleanValue argument) {
throw new UnsupportedOperationException();
}
@Override
public Value notEqualToInteger(IntegerValue argument) {
return new BooleanValue((float)argument.getPrimitive() != getPrimitive());
}
@Override
public Value notEqualToFloat(FloatValue argument) {
return new BooleanValue(!argument.getPrimitive().equals(getPrimitive()));
}
@Override
public Value notEqualToString(StringValue argument) {
throw new UnsupportedOperationException();
}
@Override
public Value lowerThan(Value argument) {
return argument.lowerThanFloat(this);
}
@Override
public Value lowerThanInteger(IntegerValue argument) {
return new BooleanValue(argument.getPrimitive() < getPrimitive());
}
@Override
public Value lowerThanFloat(FloatValue argument) {
return new BooleanValue(argument.getPrimitive() < getPrimitive());
}
@Override
public Value lowerOrEqual(Value argument) {
return argument.lowerOrEqualFloat(this);
}
@Override
public Value lowerOrEqualInteger(IntegerValue argument) {
return new BooleanValue(argument.getPrimitive() <= getPrimitive());
}
@Override
public Value lowerOrEqualFloat(FloatValue argument) {
return new BooleanValue(argument.getPrimitive() <= getPrimitive());
}
@Override
public Value greaterThan(Value argument) {
return argument.greaterThanFloat(this);
}
@Override
public Value greaterThanInteger(IntegerValue argument) {
return new BooleanValue(argument.getPrimitive() > getPrimitive());
}
@Override
public Value greaterThanFloat(FloatValue argument) {
return new BooleanValue(argument.getPrimitive() > getPrimitive());
}
@Override
public Value greaterOrEqual(Value argument) {
return argument.greaterOrEqualThanFloat(this);
}
@Override
public Value greaterOrEqualThanInteger(IntegerValue argument) {
return new BooleanValue(argument.getPrimitive() >= getPrimitive());
}
@Override
public Value greaterOrEqualThanFloat(FloatValue argument) {
return new BooleanValue(argument.getPrimitive() >= getPrimitive());
}
@Override
public Value equalTo(Value argument) {
return argument.equalToFloat(this);
}
@Override
public Value equalToBoolean(BooleanValue argument) {
throw new UnsupportedOperationException();
}
@Override
public Value equalToInteger(IntegerValue argument) {
return new BooleanValue((float)argument.getPrimitive() == getPrimitive());
}
@Override
public Value equalToFloat(FloatValue argument) {
return new BooleanValue(argument.getPrimitive().equals(getPrimitive()));
}
@Override
public Value equalToString(StringValue argument) {
throw new UnsupportedOperationException();
}
@Override
public Value and(Value argument) {
throw new UnsupportedOperationException();
}
@Override
public Value andBoolean(BooleanValue argument) {
throw new UnsupportedOperationException();
}
@Override
public int hashCode() {
return value.hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj instanceof FloatValue) {
return getPrimitive().equals(((FloatValue) obj).getPrimitive());
}
return false;
}
@Override
public String toString() {
return getPrimitive().toString();
}
}