package jeql.engine.query; import jeql.util.TypeUtil; /** * An ordered vector of values. * Tuples are fully comparable. * * @author Martin Davis * */ public class Tuple implements Comparable { private Object[] values; public Tuple(int size) { values = new Object[size]; } public void setValue(int i, Object o) { values[i] = o; } public Object getValue(int i) { return values[i]; } public int size() { return values.length; } public int compareTo(Object o) { Tuple tup = (Tuple) o; if (size() != tup.size()) throw new IllegalArgumentException("Tuples are different sizes"); for (int i = 0; i < size(); i++) { Object v1 = getValue(i); Object v2 = tup.getValue(i); int comp = TypeUtil.compareValue(v1, v2); if (comp != 0) return comp; } return 0; } public String toString() { StringBuffer buf = new StringBuffer(); buf.append('<'); for (int i = 0; i < size(); i++) { if (i > 0) buf.append(", "); buf.append(getValue(i)); } buf.append('>'); return buf.toString(); } }