1765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/******************************************************************************* 2765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Copyright (c) 2011 Google, Inc. 3765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * All rights reserved. This program and the accompanying materials 4765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * are made available under the terms of the Eclipse Public License v1.0 5765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * which accompanies this distribution, and is available at 6765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * http://www.eclipse.org/legal/epl-v10.html 7765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 8765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Contributors: 9765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Google, Inc. - initial API and implementation 10765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *******************************************************************************/ 11765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepackage org.eclipse.wb.internal.core.utils; 12765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 13765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport com.google.common.base.Objects; 14765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 15765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/** 16765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Pair of two objects. 17765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 18765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @author scheglov_ke 19765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @coverage core.util 20765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 21765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepublic final class Pair<L, R> { 22765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private final L left; 23765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private final R right; 24765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 25765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 26765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 27765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Constructor 28765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 29765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 30765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public Pair(L left, R right) { 31765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye this.left = left; 32765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye this.right = right; 33765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 34765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 35765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 36765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 37765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Object 38765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 39765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 40765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 41765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public boolean equals(Object o) { 42765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (o == this) { 43765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return true; 44765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 45765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (!(o instanceof Pair<?, ?>)) { 46765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return false; 47765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 48765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Pair<?, ?> other = (Pair<?, ?>) o; 49765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return Objects.equal(getLeft(), other.getLeft()) 50765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye && Objects.equal(getRight(), other.getRight()); 51765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 52765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 53765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 54765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public int hashCode() { 55765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int hLeft = getLeft() == null ? 0 : getLeft().hashCode(); 56765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int hRight = getRight() == null ? 0 : getRight().hashCode(); 57765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return hLeft + 37 * hRight; 58765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 59765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 60765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 61765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 62765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Access 63765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 64765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 65765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public L getLeft() { 66765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return left; 67765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 68765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 69765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public R getRight() { 70765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return right; 71765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 72765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 73765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 74765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 75765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Factory 76765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 77765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 78765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public static <L, R> Pair<L, R> create(L left, R right) { 79765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return new Pair<L, R>(left, right); 80765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 81765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye}