/*******************************************************************************
* Copyright (c) 2012 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v1.0 which
* accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Philippe Sawicki (INF4990.A2010@gmail.com) - Initial API and implementation
* Mathieu Denis (mathieu.denis55@gmail.com) - Refactored code
* Bernd Hufmann - Integrated to TMF, fixed hashCode() and equals() methods
*******************************************************************************/
package fr.inria.linuxtools.tmf.core.util;
/**
* Pair utility class, encapsulates a pair of objects.
*
* @param <A>
* The type of the first object.
* @param <B>
* The type of the second object.
*
* @author Philippe Sawicki
* @since 2.0
*/
public class Pair<A, B> {
/**
* A reference to the first object.
*/
protected A fFirst;
/**
* A reference to the second object.
*/
protected B fSecond;
/**
* Constructor.
* @param first
* The pair's first object.
* @param second
* The pair's second object.
*/
public Pair(A first, B second) {
fFirst = first;
fSecond = second;
}
/**
* Constructor.
*/
public Pair() {
this(null, null);
}
/**
* Pair hash code.
*/
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((fFirst == null) ? 0 : fFirst.hashCode());
result = prime * result + ((fSecond == null) ? 0 : fSecond.hashCode());
return result;
}
/**
* Object comparison.
*/
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Pair<?, ?> other = (Pair<?, ?>) obj;
if (fFirst == null) {
if (other.fFirst != null) {
return false;
}
} else if (!fFirst.equals(other.fFirst)) {
return false;
}
if (fSecond == null) {
if (other.fSecond != null) {
return false;
}
} else if (!fSecond.equals(other.fSecond)) {
return false;
}
return true;
}
/**
* Object to string.
*/
@Override
public String toString() {
return "(" + fFirst + ", " + fSecond + ")"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
}
/**
* Returns a reference to the pair's first object.
* @return A reference to the pair's first object.
*/
public A getFirst() {
return fFirst;
}
/**
* Sets the pair's first object.
* @param first
* The pair's first object.
*/
public void setFirst(A first) {
fFirst = first;
}
/**
* Returns a reference to the pair's second object.
* @return A reference to the pair's second object.
*/
public B getSecond() {
return fSecond;
}
/**
* Sets the pair's second object.
* @param second
* The pair's second object.
*/
public void setSecond(B second) {
fSecond = second;
}
}