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