blob: 7e5f653b9f83e2186026719589481727996971d7 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2015 Ericsson
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License 2.0 which
* accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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
* Alexandre Montplaisir - Made non-null and immutable
*******************************************************************************/
package org.eclipse.tracecompass.tmf.core.util;
import java.util.Objects;
import org.eclipse.jdt.annotation.Nullable;
/**
* 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
*/
public class Pair<A, B> {
/**
* A reference to the first object.
*/
private final A fFirst;
/**
* A reference to the second object.
*/
private final 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;
}
/**
* Returns a reference to the pair's first object.
*
* @return A reference to the pair's first object.
*/
public A getFirst() {
return fFirst;
}
/**
* Returns a reference to the pair's second object.
*
* @return A reference to the pair's second object.
*/
public B getSecond() {
return fSecond;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + hashFromNullable(fFirst);
result = prime * result + hashFromNullable(fSecond);
return result;
}
private static int hashFromNullable(@Nullable Object o) {
return o == null ? 0 : o.hashCode();
}
@Override
public boolean equals(@Nullable Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Pair<?, ?> other = (Pair<?, ?>) obj;
if (!Objects.equals(other.fFirst, fFirst)) {
return false;
}
return (Objects.equals(other.fSecond, fSecond));
}
@Override
public String toString() {
return "(" + fFirst + ", " + fSecond + ")"; //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
}
}