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}