package edu.washington.escience.myria.util; @SuppressWarnings({"rawtypes", "unchecked"}) public class Tuple implements Comparable<Tuple> { Comparable[] values; public Tuple(final int numFields) { values = new Comparable[numFields]; } @Override public int compareTo(final Tuple o) { if (o == null || o.values.length != values.length) { throw new IllegalArgumentException("invalid tuple"); } for (int i = 0; i < values.length; i++) { final int sub = values[i].compareTo(o.values[i]); if (sub != 0) { return sub; } } return 0; } @Override public boolean equals(final Object o) { if (this == o) { return true; } if (!(o instanceof Tuple)) { return false; } return compareTo((Tuple) o) == 0; } public Object get(final int i) { return values[i]; } @Override public int hashCode() { int h = 1; for (final Comparable o : values) { h = 31 * h + o.hashCode(); } return h; } public int numFields() { return values.length; } public void set(final int i, final Comparable v) { values[i] = v; } public void setAll(final int start, final Tuple other) { System.arraycopy(other.values, 0, values, start, other.values.length); } @Override public String toString() { final StringBuilder sb = new StringBuilder("("); for (int i = 0; i < values.length - 1; i++) { final Comparable<?> v = values[i]; sb.append(v + ", "); } sb.append(values[values.length - 1] + ")"); return sb.toString(); } }