]> gitweb.fperrin.net Git - Dictionary.git/blob - jars/icu4j-4_4_2-src/main/classes/core/src/com/ibm/icu/impl/Row.java
go
[Dictionary.git] / jars / icu4j-4_4_2-src / main / classes / core / src / com / ibm / icu / impl / Row.java
1 /*\r
2  **********************************************************************\r
3  * Copyright (c) 2002-2009, Google, International Business Machines\r
4  * Corporation and others.  All Rights Reserved.\r
5  **********************************************************************\r
6  * Author: Mark Davis\r
7  **********************************************************************\r
8  */\r
9 package com.ibm.icu.impl;\r
10 \r
11 import com.ibm.icu.util.Freezable;\r
12 \r
13 \r
14 @SuppressWarnings("unchecked")\r
15 public class Row<C0, C1, C2, C3, C4> implements java.lang.Comparable, Cloneable,\r
16                                         Freezable<Row<C0, C1, C2, C3, C4>>{\r
17     protected Object[] items;\r
18     protected boolean frozen;\r
19 \r
20     /**\r
21      * Convenience Methods\r
22      */\r
23     public static <C0, C1> R2<C0,C1> of(C0 p0, C1 p1) {\r
24         return new R2<C0,C1>(p0,p1);\r
25     }\r
26     public static <C0, C1, C2> R3<C0,C1,C2> of(C0 p0, C1 p1, C2 p2) {\r
27         return new R3<C0,C1,C2>(p0,p1,p2);\r
28     }\r
29     public static <C0, C1, C2, C3> R4<C0,C1,C2,C3> of(C0 p0, C1 p1, C2 p2, C3 p3) {\r
30         return new R4<C0,C1,C2,C3>(p0,p1,p2,p3);\r
31     }\r
32     public static <C0, C1, C2, C3, C4> R5<C0,C1,C2,C3,C4> of(C0 p0, C1 p1, C2 p2, C3 p3, C4 p4) {\r
33         return new R5<C0,C1,C2,C3,C4>(p0,p1,p2,p3,p4);\r
34     }\r
35 \r
36     public static class R2<C0, C1> extends Row<C0, C1, C1, C1, C1> {\r
37         public R2(C0 a, C1 b)  {\r
38             items = new Object[] {a, b};\r
39         }\r
40     }\r
41     public static class R3<C0, C1, C2> extends Row<C0, C1, C2, C2, C2> {\r
42         public R3(C0 a, C1 b, C2 c)  {\r
43             items = new Object[] {a, b, c};\r
44         }\r
45     }\r
46     public static class R4<C0, C1, C2, C3> extends Row<C0, C1, C2, C3, C3> {\r
47         public R4(C0 a, C1 b, C2 c, C3 d)  {\r
48             items = new Object[] {a, b, c, d};\r
49         }\r
50     }\r
51     public static class R5<C0, C1, C2, C3, C4> extends Row<C0, C1, C2, C3, C4> {\r
52         public R5(C0 a, C1 b, C2 c, C3 d, C4 e)  {\r
53             items = new Object[] {a, b, c, d, e};\r
54         }\r
55     }\r
56 \r
57     public Row<C0, C1, C2, C3, C4> set0(C0 item) {\r
58         return set(0, item);\r
59     }\r
60     public C0 get0() {\r
61         return (C0) items[0];\r
62     }\r
63     public Row<C0, C1, C2, C3, C4> set1(C1 item) {\r
64         return set(1, item);\r
65     }\r
66     public C1 get1() {\r
67         return (C1) items[1];\r
68     }\r
69     public Row<C0, C1, C2, C3, C4> set2(C2 item) {\r
70         return set(2, item);\r
71     }\r
72     public C2 get2() {\r
73         return (C2) items[2];\r
74     }\r
75     public Row<C0, C1, C2, C3, C4> set3(C3 item) {\r
76         return set(3, item);\r
77     }\r
78     public C3 get3() {\r
79         return (C3) items[3];\r
80     }\r
81     public Row<C0, C1, C2, C3, C4> set4(C4 item) {\r
82         return set(4, item);\r
83     }\r
84     public C4 get4() {\r
85         return (C4) items[4];\r
86     }\r
87 \r
88     protected Row<C0, C1, C2, C3, C4> set(int i, Object item) {\r
89         if (frozen) {\r
90             throw new UnsupportedOperationException("Attempt to modify frozen object");\r
91         }\r
92         items[i] = item;\r
93         return this;\r
94     }\r
95 \r
96     public int hashCode() {\r
97         int sum = items.length;\r
98         for (Object item : items) {\r
99             sum = sum*37 + Utility.checkHash(item);\r
100         }\r
101         return sum;\r
102     }\r
103 \r
104     public boolean equals(Object other) {\r
105         try {\r
106             Row<C0, C1, C2, C3, C4> that = (Row<C0, C1, C2, C3, C4>)other;\r
107             if (items.length != that.items.length) {\r
108                 return false;\r
109             }\r
110             int i = 0;\r
111             for (Object item : items) {\r
112                 if (!Utility.objectEquals(item, that.items[i++])) {\r
113                     return false;\r
114                 }\r
115             }\r
116             return true;\r
117         } catch (Exception e) {\r
118             return false;\r
119         }\r
120     }\r
121 \r
122     public int compareTo(Object other) {\r
123         int result;\r
124         Row<C0, C1, C2, C3, C4> that = (Row<C0, C1, C2, C3, C4>)other;\r
125         result = items.length - that.items.length;\r
126         if (result != 0) {\r
127             return result;\r
128         }\r
129         int i = 0;\r
130         for (Object item : items) {\r
131             result = Utility.checkCompare(((Comparable)item), ((Comparable)that.items[i++]));\r
132             if (result != 0) {\r
133                 return result;\r
134             }\r
135         }\r
136         return 0;\r
137     }\r
138 \r
139     public String toString() {\r
140         StringBuilder result = new StringBuilder("[");\r
141         boolean first = true;\r
142         for (Object item : items) {\r
143             if (first) {\r
144                 first = false;\r
145             } else {\r
146                 result.append(", ");\r
147             }\r
148             result.append(item);\r
149         }\r
150         return result.append("]").toString();\r
151     }\r
152 \r
153     public boolean isFrozen() {\r
154         return frozen;\r
155     }\r
156 \r
157     public Row<C0, C1, C2, C3, C4> freeze() {\r
158         frozen = true;\r
159         return this;\r
160     }\r
161 \r
162     public Object clone() {\r
163         if (frozen) return this;\r
164         try {\r
165             Row<C0, C1, C2, C3, C4> result = (Row<C0, C1, C2, C3, C4>) super.clone();\r
166             items = items.clone();\r
167             return result;\r
168         } catch (CloneNotSupportedException e) {\r
169             return null;\r
170         }\r
171     }\r
172 \r
173     public Row<C0, C1, C2, C3, C4> cloneAsThawed() {\r
174         try {\r
175             Row<C0, C1, C2, C3, C4> result = (Row<C0, C1, C2, C3, C4>) super.clone();\r
176             items = items.clone();\r
177             result.frozen = false;\r
178             return result;\r
179         } catch (CloneNotSupportedException e) {\r
180             return null;\r
181         }\r
182     }\r
183 }\r
184 \r