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.TypeInteger;
import org.reldb.rel.v0.vm.Context;
public class ValueInteger extends ValueAlpha implements Comparable<Value> {
private static final long serialVersionUID = 0;
private long internalValue;
public static ValueInteger select(Generator generator, long x) {
return (ValueInteger)generator.selectValue(TypeInteger.getInstance(), new ValueInteger(generator, x));
}
private ValueInteger(Generator generator, long b) {
super(generator, TypeInteger.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.longValue();
}
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 ValueInteger(generator, internalValue)));
String typeSignature = getType(generator.getDatabase()).getSignature();
if (typeSignature.equals(TypeInteger.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 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 Long.valueOf(internalValue).hashCode();
}
/** Compare this integer to another. */
public int compareTo(Value v) {
if (internalValue == v.longValue())
return 0;
else if (internalValue > v.longValue())
return 1;
else
return -1;
}
public Value add(Generator generator, Value v) {
return new ValueInteger(generator, internalValue + v.longValue());
}
public String toString() {
return "" + internalValue;
}
}