package it.demo.twitterlike.android.utils;
import java.io.IOException;
import java.io.Serializable;
/**
* Type safe, inmutable, tuple classes can be serialized with xmlencoder (>=1.6)
* or objectoutputstream.
*
* Whenever you need to create public api, it is best not to use these classes
* since the given names (first, second, etc) are not descriptive.
*
* @author i30817
*/
public final class Tuples {
private Tuples() {
}
public static <X> T1<X> createSingleton(X target) {
return new T1<X>(target);
}
public static <X, Y> T2<X, Y> createPair(X target1, Y target2) {
return new T2<X, Y>(target1, target2);
}
public static <X, Y, Z> T3<X, Y, Z> createTriple(X target1, Y target2,
Z target3) {
return new T3<X, Y, Z>(target1, target2, target3);
}
public static <W, X, Y, Z> T4<W, X, Y, Z> createQuadruple(W target1,
X target2, Y target3, Z target4) {
return new T4<W, X, Y, Z>(target1, target2, target3, target4);
}
public static final class T1<X> implements Serializable {
private static final long serialVersionUID = 362498860763181265L;
private X first;
// @java.beans.ConstructorProperties({"first"})
private T1(X first) {
this.first = first;
}
public X getFirst() {
return first;
}
@Override
public String toString() {
return "(" + first + ")";
}
@SuppressWarnings(value = "unchecked")
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final T1<X> other = (T1<X>) obj;
if (this.first != other.first
&& (this.first == null || !this.first.equals(other.first))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 97 * hash + (this.first != null ? this.first.hashCode() : 0);
return hash;
}
private void writeObject(java.io.ObjectOutputStream out)
throws IOException {
out.writeObject(first);
}
@SuppressWarnings(value = "unchecked")
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
first = (X) in.readObject();
}
}
public static final class T2<X, Y> implements Serializable {
private static final long serialVersionUID = 463498820763161265L;
private X first;
private Y second;
// @java.beans.ConstructorProperties({"first","second"})
private T2(X first, Y second) {
this.first = first;
this.second = second;
}
public X getFirst() {
return first;
}
public Y getSecond() {
return second;
}
@Override
public String toString() {
return "(" + first + ", " + second + ")";
}
@SuppressWarnings(value = "unchecked")
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final T2<X, Y> other = (T2<X, Y>) obj;
if (this.first != other.first
&& (this.first == null || !this.first.equals(other.first))) {
return false;
}
if (this.second != other.second
&& (this.second == null || !this.second
.equals(other.second))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 3;
hash = 67 * hash + (this.first != null ? this.first.hashCode() : 0);
hash = 67 * hash
+ (this.second != null ? this.second.hashCode() : 0);
return hash;
}
private void writeObject(java.io.ObjectOutputStream out)
throws IOException {
out.writeObject(first);
out.writeObject(second);
}
@SuppressWarnings(value = "unchecked")
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
first = (X) in.readObject();
second = (Y) in.readObject();
}
}
public static final class T3<X, Y, Z> implements Serializable {
private static final long serialVersionUID = 162498830763481765L;
private X first;
private Y second;
private Z third;
// @java.beans.ConstructorProperties({"first","second","third"})
private T3(X first, Y second, Z third) {
this.first = first;
this.second = second;
this.third = third;
}
public X getFirst() {
return first;
}
public Y getSecond() {
return second;
}
public Z getThird() {
return third;
}
@Override
public String toString() {
return "(" + first + ", " + second + ", " + third + ")";
}
@SuppressWarnings(value = "unchecked")
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final T3<X, Y, Z> other = (T3<X, Y, Z>) obj;
if (this.first != other.first
&& (this.first == null || !this.first.equals(other.first))) {
return false;
}
if (this.second != other.second
&& (this.second == null || !this.second
.equals(other.second))) {
return false;
}
if (this.third != other.third
&& (this.third == null || !this.third.equals(other.third))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 7;
hash = 71 * hash + (this.first != null ? this.first.hashCode() : 0);
hash = 71 * hash
+ (this.second != null ? this.second.hashCode() : 0);
hash = 71 * hash + (this.third != null ? this.third.hashCode() : 0);
return hash;
}
private void writeObject(java.io.ObjectOutputStream out)
throws IOException {
out.writeObject(first);
out.writeObject(second);
out.writeObject(third);
}
@SuppressWarnings(value = "unchecked")
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
first = (X) in.readObject();
second = (Y) in.readObject();
third = (Z) in.readObject();
}
}
public static final class T4<W, X, Y, Z> implements Serializable {
private static final long serialVersionUID = 162498830763581765L;
private W first;
private X second;
private Y third;
private Z fourth;
// @java.beans.ConstructorProperties({"first","second","third","fourth"})
private T4(W first, X second, Y third, Z fourth) {
this.first = first;
this.second = second;
this.third = third;
this.fourth = fourth;
}
public W getFirst() {
return first;
}
public X getSecond() {
return second;
}
public Y getThird() {
return third;
}
public Z getFourth() {
return fourth;
}
@Override
public String toString() {
return "(" + first + ", " + second + ", " + third + ", " + fourth
+ ")";
}
@SuppressWarnings(value = "unchecked")
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final T4<W, X, Y, Z> other = (T4<W, X, Y, Z>) obj;
if (this.first != other.first
&& (this.first == null || !this.first.equals(other.first))) {
return false;
}
if (this.second != other.second
&& (this.second == null || !this.second
.equals(other.second))) {
return false;
}
if (this.third != other.third
&& (this.third == null || !this.third.equals(other.third))) {
return false;
}
if (this.fourth != other.fourth
&& (this.fourth == null || !this.fourth
.equals(other.fourth))) {
return false;
}
return true;
}
@Override
public int hashCode() {
int hash = 5;
hash = 29 * hash + (this.first != null ? this.first.hashCode() : 0);
hash = 29 * hash
+ (this.second != null ? this.second.hashCode() : 0);
hash = 29 * hash + (this.third != null ? this.third.hashCode() : 0);
hash = 29 * hash
+ (this.fourth != null ? this.fourth.hashCode() : 0);
return hash;
}
private void writeObject(java.io.ObjectOutputStream out)
throws IOException {
out.writeObject(first);
out.writeObject(second);
out.writeObject(third);
out.writeObject(fourth);
}
@SuppressWarnings(value = "unchecked")
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException {
first = (W) in.readObject();
second = (X) in.readObject();
third = (Y) in.readObject();
fourth = (Z) in.readObject();
}
}
}