package edu.berkeley.cs.nlp.ocular.util;
import java.io.Serializable;
import java.util.Comparator;
/**
* @author Dan Klein
* @author Dan Garrette (dhgarrette@gmail.com)
*/
public class Tuple3<A1, A2, A3> implements Serializable {
static final long serialVersionUID = 53;
public final A1 _1;
public final A2 _2;
public final A3 _3;
public boolean equals(Object o) {
if (this == o)
return true;
if (!(o instanceof Tuple3))
return false;
@SuppressWarnings("rawtypes")
final Tuple3 tuple = (Tuple3) o;
if (_1 != null ? !_1.equals(tuple._1) : tuple._1 != null)
return false;
if (_2 != null ? !_2.equals(tuple._2) : tuple._2 != null)
return false;
if (_3 != null ? !_3.equals(tuple._3) : tuple._3 != null)
return false;
return true;
}
public int hashCode() {
int result;
result = (_1 != null ? _1.hashCode() : 0);
result = 29 * result + (_2 != null ? _2.hashCode() : 0);
result = 31 * result + (_3 != null ? _3.hashCode() : 0);
return result;
}
public String toString() {
return "(" + _1 + ", " + _2 + ", " + _3 + ")";
}
public Tuple3(A1 _1, A2 _2, A3 _3) {
this._1 = _1;
this._2 = _2;
this._3 = _3;
}
public static <A1, A2, A3> Tuple3<A1, A2, A3> Tuple3(A1 _1, A2 _2, A3 _3) {
return new Tuple3<A1, A2, A3>(_1, _2, _3);
}
public static class LexicographicTuple3Comparator<A1, A2, A3> implements Comparator<Tuple3<A1, A2, A3>> {
Comparator<A1> _1Comparator;
Comparator<A2> _2Comparator;
Comparator<A3> _3Comparator;
public int compare(Tuple3<A1, A2, A3> tuple1, Tuple3<A1, A2, A3> tuple2) {
int _1Compare = _1Comparator.compare(tuple1._1, tuple2._1);
if (_1Compare != 0)
return _1Compare;
int _2Compare = _2Comparator.compare(tuple1._2, tuple2._2);
if (_2Compare != 0)
return _2Compare;
return _3Comparator.compare(tuple1._3, tuple2._3);
}
public LexicographicTuple3Comparator(Comparator<A1> _1Comparator, Comparator<A2> _2Comparator, Comparator<A3> _3Comparator) {
this._1Comparator = _1Comparator;
this._2Comparator = _2Comparator;
this._3Comparator = _3Comparator;
}
}
public static class DefaultLexicographicTuple3Comparator<A1 extends Comparable<A1>, A2 extends Comparable<A2>, A3 extends Comparable<A3>>
implements Comparator<Tuple3<A1, A2, A3>> {
public int compare(Tuple3<A1, A2, A3> x, Tuple3<A1, A2, A3> y) {
int _1Compare = x._1.compareTo(y._1);
if (_1Compare != 0) {
return _1Compare;
}
int _2Compare = x._2.compareTo(y._2);
if (_2Compare != 0) {
return _2Compare;
}
return x._3.compareTo(y._3);
}
}
}