2 **********************************************************************
\r
3 * Copyright (c) 2002-2009, Google, International Business Machines
\r
4 * Corporation and others. All Rights Reserved.
\r
5 **********************************************************************
\r
7 **********************************************************************
\r
9 package com.ibm.icu.impl;
\r
11 import com.ibm.icu.util.Freezable;
\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
21 * Convenience Methods
\r
23 public static <C0, C1> R2<C0,C1> of(C0 p0, C1 p1) {
\r
24 return new R2<C0,C1>(p0,p1);
\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
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
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
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
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
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
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
57 public Row<C0, C1, C2, C3, C4> set0(C0 item) {
\r
58 return set(0, item);
\r
61 return (C0) items[0];
\r
63 public Row<C0, C1, C2, C3, C4> set1(C1 item) {
\r
64 return set(1, item);
\r
67 return (C1) items[1];
\r
69 public Row<C0, C1, C2, C3, C4> set2(C2 item) {
\r
70 return set(2, item);
\r
73 return (C2) items[2];
\r
75 public Row<C0, C1, C2, C3, C4> set3(C3 item) {
\r
76 return set(3, item);
\r
79 return (C3) items[3];
\r
81 public Row<C0, C1, C2, C3, C4> set4(C4 item) {
\r
82 return set(4, item);
\r
85 return (C4) items[4];
\r
88 protected Row<C0, C1, C2, C3, C4> set(int i, Object item) {
\r
90 throw new UnsupportedOperationException("Attempt to modify frozen object");
\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
104 public boolean equals(Object other) {
\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
111 for (Object item : items) {
\r
112 if (!Utility.objectEquals(item, that.items[i++])) {
\r
117 } catch (Exception e) {
\r
122 public int compareTo(Object other) {
\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
130 for (Object item : items) {
\r
131 result = Utility.checkCompare(((Comparable)item), ((Comparable)that.items[i++]));
\r
139 public String toString() {
\r
140 StringBuilder result = new StringBuilder("[");
\r
141 boolean first = true;
\r
142 for (Object item : items) {
\r
146 result.append(", ");
\r
148 result.append(item);
\r
150 return result.append("]").toString();
\r
153 public boolean isFrozen() {
\r
157 public Row<C0, C1, C2, C3, C4> freeze() {
\r
162 public Object clone() {
\r
163 if (frozen) return this;
\r
165 Row<C0, C1, C2, C3, C4> result = (Row<C0, C1, C2, C3, C4>) super.clone();
\r
166 items = items.clone();
\r
168 } catch (CloneNotSupportedException e) {
\r
173 public Row<C0, C1, C2, C3, C4> cloneAsThawed() {
\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
179 } catch (CloneNotSupportedException e) {
\r