package org.reldb.rel.v0.values; import java.io.PrintStream; import org.reldb.rel.v0.generator.Generator; import org.reldb.rel.v0.types.Type; import org.reldb.rel.v0.types.TypeAlpha; import org.reldb.rel.v0.types.builtin.TypeRational; import org.reldb.rel.v0.vm.Context; public class ValueRational extends ValueAlpha implements Comparable<Value> { private static final long serialVersionUID = 0; private double internalValue; public static ValueRational select(Generator generator, double x) { return (ValueRational)generator.selectValue(TypeRational.getInstance(), new ValueRational(generator, x)); } private ValueRational(Generator generator, double b) { super(generator, TypeRational.getInstance(), new Value[1], 0); internalValue = b; } public Value getComponentValue(int offsetInValue) { return select(getGenerator(), internalValue); } public void setComponentValue(int offsetInValue, Value value) { internalValue = value.doubleValue(); } public void toStream(Context context, Type contextualType, PrintStream p, int depth) { Generator generator = getGenerator(); TypeAlpha type = (TypeAlpha) getType(context.getVirtualMachine().getRelDatabase()); setMST(generator.findMST(type, new ValueRational(generator, internalValue))); String typeSignature = getType(generator.getDatabase()).getSignature(); if (typeSignature.equals(TypeRational.Name)) p.print(internalValue); else p.print(typeSignature + "(" + internalValue + ")"); } /** Convert this to a primitive boolean. */ public boolean booleanValue() { return (internalValue != 0) ? true : false; } /** Convert this to a primitive long. */ public long longValue() { return (long)internalValue; } /** Convert this to a primitive double. */ public double doubleValue() { return (double)internalValue; } /** Convert this to a primitive String. */ public String stringValue() { return "" + internalValue; } public int hashCode() { return Double.valueOf(internalValue).hashCode(); } public int compareTo(Value v) { if (internalValue == v.doubleValue()) return 0; else if (internalValue > v.doubleValue()) return 1; else return -1; } public String toString() { return "" + internalValue; } }