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 Tuple2<A1, A2> implements Serializable {
static final long serialVersionUID = 52;
public final A1 _1;
public final A2 _2;
public boolean equals(Object o) {
if (this == o)
return true;
if (!(o instanceof Tuple2))
return false;
@SuppressWarnings("rawtypes")
final Tuple2 tuple = (Tuple2) 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;
return true;
}
public int hashCode() {
int result;
result = (_1 != null ? _1.hashCode() : 0);
result = 29 * result + (_2 != null ? _2.hashCode() : 0);
return result;
}
public String toString() {
return "(" + _1 + ", " + _2 + ")";
}
public Tuple2(A1 _1, A2 _2) {
this._1 = _1;
this._2 = _2;
}
public static <A1, A2> Tuple2<A1, A2> Tuple2(A1 _1, A2 _2) {
return new Tuple2<A1, A2>(_1, _2);
}
public static class LexicographicTuple2Comparator<A1, A2> implements Comparator<Tuple2<A1, A2>> {
Comparator<A1> _1Comparator;
Comparator<A2> _2Comparator;
public int compare(Tuple2<A1, A2> tuple1, Tuple2<A1, A2> tuple2) {
int _1Compare = _1Comparator.compare(tuple1._1, tuple2._1);
if (_1Compare != 0)
return _1Compare;
return _2Comparator.compare(tuple1._2, tuple2._2);
}
public LexicographicTuple2Comparator(Comparator<A1> _1Comparator, Comparator<A2> _2Comparator) {
this._1Comparator = _1Comparator;
this._2Comparator = _2Comparator;
}
}
public static class DefaultLexicographicTuple2Comparator<A1 extends Comparable<A1>, A2 extends Comparable<A2>>
implements Comparator<Tuple2<A1, A2>> {
public int compare(Tuple2<A1, A2> x, Tuple2<A1, A2> y) {
int _1Compare = x._1.compareTo(y._1);
if (_1Compare != 0) {
return _1Compare;
}
return y._2.compareTo(y._2);
}
}
}