]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.diagram/src/org/simantics/diagram/content/OrderedPair.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / content / OrderedPair.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.diagram.content;\r
13 \r
14 /**\r
15  * @author Tuukka Lehtonen\r
16  *\r
17  * @param <T> a comparable type\r
18  */\r
19 public class OrderedPair<T extends Comparable<T>> {\r
20 \r
21     private final T first;\r
22     private final T second;\r
23 \r
24     public OrderedPair(T first, T second) {\r
25         assert first != null;\r
26         assert second != null;\r
27 \r
28         int comp = first.compareTo(second);\r
29         if (comp < 0) {\r
30             this.first = first;\r
31             this.second = second;\r
32         } else {\r
33             this.first = second;\r
34             this.second = first;\r
35         }\r
36     }\r
37 \r
38     public T first() {\r
39         return first;\r
40     }\r
41 \r
42     public T second() {\r
43         return second;\r
44     }\r
45 \r
46     @Override\r
47     public int hashCode() {\r
48         return (first.hashCode() * 31) + second.hashCode();\r
49     }\r
50 \r
51     @Override\r
52     public boolean equals(Object obj) {\r
53         if (this == obj)\r
54             return true;\r
55         if (!(obj instanceof OrderedPair<?>))\r
56             return false;\r
57         OrderedPair<?> other = (OrderedPair<?>) obj;\r
58         return first.equals(other.first) && second.equals(other.second);\r
59     }\r
60 \r
61     public static <T extends Comparable<T>> OrderedPair<T> make(T ra, T rb) {\r
62         return new OrderedPair<T>(ra, rb);\r
63     }\r
64 \r
65 }