1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements.  See the NOTICE file distributed with
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership.
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License.  You may obtain a copy of the License at
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.lang.reflect;
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This class provides static methods to create and access arrays dynamically.
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @since Android 1.0
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic final class Array {
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Prevent this class from being instantiated.
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private Array(){
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //do nothing
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the element of the array at the specified index. This reproduces
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * the effect of {@code array[index]}. If the array component is a primitive
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * type, the result is automatically wrapped.
53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the requested element, possibly wrapped
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the array is null
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code array} is not an array
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code  index < 0 || index >= array.length}
67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Object get(Object array, int index)
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof Object[])
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((Object[]) array)[index];
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof boolean[])
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((boolean[]) array)[index] ? Boolean.TRUE : Boolean.FALSE;
77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof byte[])
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new Byte(((byte[]) array)[index]);
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof char[])
82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new Character(((char[]) array)[index]);
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof short[])
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new Short(((short[]) array)[index]);
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof int[])
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new Integer(((int[]) array)[index]);
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof long[])
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new Long(((long[]) array)[index]);
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof float[])
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new Float(((float[]) array)[index]);
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof double[])
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new Double(((double[]) array)[index]);
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array == null)
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new IllegalArgumentException("Not an array");
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the element of the array at the specified index, converted to a
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code boolean}, if possible. This reproduces the effect of {@code
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * array[index]}
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the requested element
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code array} is not an array or the element at the
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             index position can not be converted to the return type
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code index < 0 || index >= array.length}
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static boolean getBoolean(Object array, int index)
128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof boolean[]) {
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((boolean[]) array)[index];
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else if (array == null) {
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else if (array.getClass().isArray()) {
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("Wrong array type");
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("Not an array");
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the element of the array at the specified index, converted to a
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code byte}, if possible. This reproduces the effect of {@code
143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * array[index]}
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the requested element
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code array} is not an array or the element at the
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             index position can not be converted to the return type
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code index < 0 || index >= array.length}
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static byte getByte(Object array, int index)
163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof byte[]) {
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((byte[]) array)[index];
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return getBoolean(array, index) ? (byte)1 : (byte)0;
168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the element of the array at the specified index, converted to a
173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code char}, if possible. This reproduces the effect of {@code
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * array[index]}
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the requested element
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code array} is not an array or the element at the
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             index position can not be converted to the return type
188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code index < 0 || index >= array.length}
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static char getChar(Object array, int index)
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof char[]) {
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((char[]) array)[index];
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else if (array == null) {
198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else if (array.getClass().isArray()) {
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("Wrong array type");
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("Not an array");
203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the element of the array at the specified index, converted to a
208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code double}, if possible. This reproduces the effect of {@code
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * array[index]}
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the requested element
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code array} is not an array or the element at the
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             index position can not be converted to the return type
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code index < 0 || index >= array.length}
225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static double getDouble(Object array, int index)
229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof double[]) {
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((double[]) array)[index];
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return getFloat(array, index);
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the element of the array at the specified index, converted to a
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code float}, if possible. This reproduces the effect of {@code
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * array[index]}
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the requested element
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code array} is not an array or the element at the
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             index position can not be converted to the return type
254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code index < 0 || index >= array.length}
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static float getFloat(Object array, int index)
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof float[]) {
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((float[]) array)[index];
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return getLong(array, index);
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the element of the array at the specified index, converted to an
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code int}, if possible. This reproduces the effect of {@code
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * array[index]}
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the requested element
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code array} is not an array or the element at the
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             index position can not be converted to the return type
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code index < 0 || index >= array.length}
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static int getInt(Object array, int index)
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof int[]) {
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((int[]) array)[index];
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return getShort(array, index);
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the length of the array. This reproduces the effect of {@code
301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * array.length}
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the length of the array
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code array} is not an array
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static int getLength(Object array) {
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof Object[])
317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((Object[]) array).length;
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof boolean[])
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((boolean[]) array).length;
321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof byte[])
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((byte[]) array).length;
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof char[])
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((char[]) array).length;
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof short[])
329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((short[]) array).length;
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof int[])
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((int[]) array).length;
333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof long[])
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((long[]) array).length;
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof float[])
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((float[]) array).length;
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof double[])
341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((double[]) array).length;
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array == null)
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new IllegalArgumentException("Not an array");
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the element of the array at the specified index, converted to a
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code long}, if possible. This reproduces the effect of {@code
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * array[index]}
353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the requested element
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code array} is not an array or the element at the
365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             index position can not be converted to the return type
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code index < 0 || index >= array.length}
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static long getLong(Object array, int index)
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof long[]) {
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((long[]) array)[index];
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return getInt(array, index);
377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the element of the array at the specified index, converted to a
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * {@code short}, if possible. This reproduces the effect of {@code
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * array[index]}
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the requested element
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code array} is not an array or the element at the
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             index position can not be converted to the return type
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code index < 0 || index >= array.length}
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static short getShort(Object array, int index)
403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof short[])
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return ((short[]) array)[index];
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return getByte(array, index);
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a new multidimensional array of the specified component type and
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * dimensions. This reproduces the effect of {@code new
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * componentType[d0][d1]...[dn]} for a dimensions array of { d0, d1, ... ,
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * dn }.
415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param componentType
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the component type of the new array
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param dimensions
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the dimensions of the new array
420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the new array
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the component type is {@code null}
425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NegativeArraySizeException
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if any of the dimensions are negative
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the array of dimensions is of size zero, or exceeds the
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             limit of the number of dimension for an array (currently 255)
430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Object newInstance(Class<?> componentType, int[] dimensions)
434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws NegativeArraySizeException, IllegalArgumentException {
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (dimensions.length <= 0 || dimensions.length > 255)
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("Bad number of dimensions");
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (componentType == Void.TYPE)
439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException();
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (componentType == null)
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return createMultiArray(componentType, dimensions);
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Create a multi-dimensional array of objects with the specified type.
449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    native private static Object createMultiArray(Class<?> componentType,
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int[] dimensions) throws NegativeArraySizeException;
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns a new array of the specified component type and length. This
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * reproduces the effect of {@code new componentType[size]}.
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param componentType
458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the component type of the new array
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param size
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the length of the new array
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return the new array
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the component type is null
466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NegativeArraySizeException
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code size < 0}
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Object newInstance(Class<?> componentType, int size)
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws NegativeArraySizeException {
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!componentType.isPrimitive())
474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return createObjectArray(componentType, size);
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (componentType == Boolean.TYPE)
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new boolean[size];
478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (componentType == Byte.TYPE)
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new byte[size];
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (componentType == Character.TYPE)
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new char[size];
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (componentType == Short.TYPE)
486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new short[size];
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (componentType == Integer.TYPE)
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new int[size];
490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (componentType == Long.TYPE)
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new long[size];
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (componentType == Float.TYPE)
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new float[size];
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (componentType == Double.TYPE)
498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return new double[size];
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (componentType == Void.TYPE)
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException();
502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException(); // should be impossible
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /*
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Create a one-dimensional array of objects with the specified type.
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    native private static Object createObjectArray(Class<?> componentType,
510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int length) throws NegativeArraySizeException;
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the element of the array at the specified index to the value. This
514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * reproduces the effect of {@code array[index] = value}. If the array
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * component is a primitive type, the value is automatically unwrapped.
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the new value
523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code array} is not an array or the value cannot be
528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             converted to the array type by a widening conversion
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code  index < 0 || index >= array.length}
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void set(Object array, int index, Object value)
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!array.getClass().isArray()) {
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("Not an array type");
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof Object[]) {
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (value != null &&
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                !array.getClass().getComponentType().isInstance(value)) {
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                // incompatible object type for this array
544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new IllegalArgumentException("Wrong array type");
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ((Object[]) array)[index] = value;
548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (value == null) {
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new IllegalArgumentException("Primitive array can't take null values.");
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            if (value instanceof Boolean)
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setBoolean(array, index, ((Boolean) value).booleanValue());
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            else if (value instanceof Byte)
556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setByte(array, index, ((Byte) value).byteValue());
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            else if (value instanceof Character)
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setChar(array, index, ((Character) value).charValue());
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            else if (value instanceof Short)
560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setShort(array, index, ((Short) value).shortValue());
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            else if (value instanceof Integer)
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setInt(array, index, ((Integer) value).intValue());
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            else if (value instanceof Long)
564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setLong(array, index, ((Long) value).longValue());
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            else if (value instanceof Float)
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setFloat(array, index, ((Float) value).floatValue());
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            else if (value instanceof Double)
568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                setDouble(array, index, ((Double) value).doubleValue());
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the element of the array at the specified index to the {@code
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * boolean} value. This reproduces the effect of {@code array[index] =
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * value}.
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the new value
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is not an array or the value cannot be
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             converted to the array type by a widening conversion
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code  index < 0 || index >= array.length}
591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void setBoolean(Object array, int index, boolean value) {
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof boolean[]) {
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ((boolean[]) array)[index] = value;
597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setByte(array, index, value ? (byte)1 : (byte)0);
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Sets the element of the array at the specified index to the {@code byte}
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * value. This reproduces the effect of {@code array[index] = value}.
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the new value
612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is not an array or the value cannot be
617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             converted to the array type by a widening conversion
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code  index < 0 || index >= array.length}
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void setByte(Object array, int index, byte value)
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof byte[]) {
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ((byte[]) array)[index] = value;
627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setShort(array, index, value);
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Set the element of the array at the specified index to the {@code char}
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * value. This reproduces the effect of {@code array[index] = value}.
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the new value
642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is not an array or the value cannot be
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             converted to the array type by a widening conversion
648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code  index < 0 || index >= array.length}
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void setChar(Object array, int index, char value)
654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof char[]) {
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ((char[]) array)[index] = value;
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else if (array == null) {
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else if (!array.getClass().isArray()) {
660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("Not an array");
661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("Wrong array type");
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Set the element of the array at the specified index to the {@code double}
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * value. This reproduces the effect of {@code array[index] = value}.
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the new value
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is not an array or the value cannot be
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             converted to the array type by a widening conversion
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code  index < 0 || index >= array.length}
684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void setDouble(Object array, int index, double value)
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof double[]) {
690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ((double[]) array)[index] = value;
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else if (array == null) {
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new NullPointerException();
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else if (!array.getClass().isArray()) {
694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("Not an array");
695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("Wrong array type");
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Set the element of the array at the specified index to the {@code float}
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * value. This reproduces the effect of {@code array[index] = value}.
703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the new value
710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is not an array or the value cannot be
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             converted to the array type by a widening conversion
716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code  index < 0 || index >= array.length}
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void setFloat(Object array, int index, float value)
722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof float[]) {
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ((float[]) array)[index] = value;
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setDouble(array, index, value);
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Set the element of the array at the specified index to the {@code int}
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * value. This reproduces the effect of {@code array[index] = value}.
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the new value
740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is not an array or the value cannot be
745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             converted to the array type by a widening conversion
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code  index < 0 || index >= array.length}
748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void setInt(Object array, int index, int value)
752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof int[]) {
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ((int[]) array)[index] = value;
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setLong(array, index, value);
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Set the element of the array at the specified index to the {@code long}
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * value. This reproduces the effect of {@code array[index] = value}.
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the new value
770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is not an array or the value cannot be
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             converted to the array type by a widening conversion
776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code  index < 0 || index >= array.length}
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void setLong(Object array, int index, long value)
782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof long[]) {
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ((long[]) array)[index] = value;
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setFloat(array, index, value);
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Set the element of the array at the specified index to the {@code short}
792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * value. This reproduces the effect of {@code array[index] = value}.
793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param array
795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the array
796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param index
797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the index
798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param value
799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *            the new value
800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws NullPointerException
802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is {@code null}
803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws IllegalArgumentException
804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if the {@code array} is not an array or the value cannot be
805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             converted to the array type by a widening conversion
806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @throws ArrayIndexOutOfBoundsException
807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *             if {@code  index < 0 || index >= array.length}
808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @since Android 1.0
810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static void setShort(Object array, int index, short value)
812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throws IllegalArgumentException, ArrayIndexOutOfBoundsException {
813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (array instanceof short[]) {
814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            ((short[]) array)[index] = value;
815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        } else {
816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            setInt(array, index, value);
817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
821