package janala.interpreters; public class DoubleValue extends Value { double concrete; @Override public Object getConcrete() { return concrete; } @Override public boolean equals(Object other) { if (other == this) { return true; } else if (other == null) { return false; } else if (other instanceof DoubleValue) { DoubleValue otherVal = (DoubleValue) other; return (concrete == otherVal.concrete); } else { return false; } } public DoubleValue(double concrete) { this.concrete = concrete; } public DoubleValue DADD(DoubleValue d) { return new DoubleValue(concrete + d.concrete); } public DoubleValue DSUB(DoubleValue d) { return new DoubleValue(concrete - d.concrete); } public DoubleValue DMUL(DoubleValue d) { return new DoubleValue(concrete * d.concrete); } public DoubleValue DDIV(DoubleValue d) { return new DoubleValue(concrete / d.concrete); } public DoubleValue DREM(DoubleValue d) { return new DoubleValue(concrete % d.concrete); } public DoubleValue DNEG() { return new DoubleValue(-concrete); } public IntValue D2I() { return new IntValue((int) concrete); } public LongValue D2L() { return new LongValue((long) concrete); } public FloatValue D2F() { return new FloatValue((float) concrete); } public IntValue DCMPL(DoubleValue d) { if (Double.isNaN(concrete) || Double.isNaN(d.concrete)) { return new IntValue(-1); } else { return new IntValue(-((Double)concrete).compareTo(d.concrete)); } } public IntValue DCMPG(DoubleValue d) { if (Double.isNaN(concrete) || Double.isNaN(d.concrete)) { return new IntValue(1); } else { return new IntValue(((Double)concrete).compareTo(d.concrete)); } } }