package database.table.internals;
/**
* Author: Koushik Sen (ksen@cs.berkeley.edu)
*/
public class ArrayBasedTuple {
public Object[] array;
private int hc;
private boolean isHcInitialized = false;
public ArrayBasedTuple(Object[] array) {
this.array = array;
}
@Override
public int hashCode() {
if (!isHcInitialized) {
hc = 0;
for (int i = 0; i < array.length; i++) {
Object o = array[i];
hc += o.hashCode();
}
isHcInitialized = true;
}
return hc;
}
public void invalidateHashCode() {
isHcInitialized = false;
}
@Override
public boolean equals(Object o) {
if (!(o instanceof ArrayBasedTuple)) return false;
ArrayBasedTuple other = (ArrayBasedTuple) o;
if (array == other.array) return true;
if (other.array == null || array == null) return false;
if (other.array.length != array.length) return false;
for (int i = 0; i < array.length; i++) {
if (!array[i].equals(other.array[i])) return false;
}
return true;
}
}