1ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette/* 2ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Copyright (C) 2014 The Android Open Source Project 3ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * 4ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Licensed under the Apache License, Version 2.0 (the "License"); 5ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * you may not use this file except in compliance with the License. 6ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * You may obtain a copy of the License at 7ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * 8ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * http://www.apache.org/licenses/LICENSE-2.0 9ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * 10ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Unless required by applicable law or agreed to in writing, software 11ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * distributed under the License is distributed on an "AS IS" BASIS, 12ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * See the License for the specific language governing permissions and 14ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * limitations under the License. 15ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 16ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 17ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverettepackage android.util; 18ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 19ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viveretteimport com.android.internal.util.ArrayUtils; 20112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichiimport com.android.internal.util.Preconditions; 219c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Banimport java.util.Arrays; 22ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viveretteimport libcore.util.EmptyArray; 23ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 24ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette/** 25ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Implements a growing array of int primitives. 26ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * 27ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * @hide 28ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 29ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverettepublic class IntArray implements Cloneable { 30ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette private static final int MIN_CAPACITY_INCREMENT = 12; 31ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 32ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette private int[] mValues; 33ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette private int mSize; 34ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 35112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi private IntArray(int[] array, int size) { 36112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi mValues = array; 37112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi mSize = Preconditions.checkArgumentInRange(size, 0, array.length, "size"); 38112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi } 39112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi 40ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette /** 41ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Creates an empty IntArray with the default initial capacity. 42ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 43ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette public IntArray() { 44ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette this(10); 45ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 46ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 47ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette /** 48ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Creates an empty IntArray with the specified initial capacity. 49ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 50ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette public IntArray(int initialCapacity) { 51ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette if (initialCapacity == 0) { 52ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette mValues = EmptyArray.INT; 53ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } else { 54ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette mValues = ArrayUtils.newUnpaddedIntArray(initialCapacity); 55ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 56ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette mSize = 0; 57ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 58ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 59ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette /** 60112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi * Creates an IntArray wrapping the given primitive int array. 61112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi */ 62112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi public static IntArray wrap(int[] array) { 63112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi return new IntArray(array, array.length); 64112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi } 65112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi 66112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi /** 67112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi * Creates an IntArray from the given primitive int array, copying it. 68112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi */ 69112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi public static IntArray fromArray(int[] array, int size) { 70112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi return wrap(Arrays.copyOf(array, size)); 71112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi } 72112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi 73112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi /** 74112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi * Changes the size of this IntArray. If this IntArray is shrinked, the backing array capacity 75112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi * is unchanged. If the new size is larger than backing array capacity, a new backing array is 76112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi * created from the current content of this IntArray padded with 0s. 77112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi */ 78112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi public void resize(int newSize) { 79112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi Preconditions.checkArgumentNonnegative(newSize); 80112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi if (newSize <= mValues.length) { 81112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi Arrays.fill(mValues, newSize, mValues.length, 0); 82112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi } else { 83112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi ensureCapacity(newSize - mSize); 84112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi } 85112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi mSize = newSize; 86112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi } 87112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi 88112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi /** 89ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Appends the specified value to the end of this array. 90ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 91ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette public void add(int value) { 92ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette add(mSize, value); 93ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 94ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 95ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette /** 96112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi * Inserts a value at the specified position in this array. If the specified index is equal to 97112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi * the length of the array, the value is added at the end. 98ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * 99ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * @throws IndexOutOfBoundsException when index < 0 || index > size() 100ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 101ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette public void add(int index, int value) { 102ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette ensureCapacity(1); 103112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi int rightSegment = mSize - index; 104112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi mSize++; 105112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi checkBounds(index); 106ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 107112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi if (rightSegment != 0) { 108112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi // Move by 1 all values from the right of 'index' 109112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi System.arraycopy(mValues, index, mValues, index + 1, rightSegment); 110ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 111ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 112ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette mValues[index] = value; 113ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 114ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 115ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette /** 1169c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * Searches the array for the specified value using the binary search algorithm. The array must 1179c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * be sorted (as by the {@link Arrays#sort(int[], int, int)} method) prior to making this call. 1189c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * If it is not sorted, the results are undefined. If the range contains multiple elements with 1199c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * the specified value, there is no guarantee which one will be found. 1209c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * 1219c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * @param value The value to search for. 1229c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * @return index of the search key, if it is contained in the array; otherwise, <i>(-(insertion 1239c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * point) - 1)</i>. The insertion point is defined as the point at which the key would 1249c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * be inserted into the array: the index of the first element greater than the key, or 1259c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * {@link #size()} if all elements in the array are less than the specified key. 1269c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * Note that this guarantees that the return value will be >= 0 if and only if the key 1279c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * is found. 1289c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban */ 1299c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban public int binarySearch(int value) { 1309c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban return ContainerHelpers.binarySearch(mValues, mSize, value); 1319c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban } 1329c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban 1339c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban /** 134ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Adds the values in the specified array to this array. 135ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 136ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette public void addAll(IntArray values) { 137ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette final int count = values.mSize; 138ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette ensureCapacity(count); 139ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 140ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette System.arraycopy(values.mValues, 0, mValues, mSize, count); 141ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette mSize += count; 142ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 143ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 144ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette /** 145ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Ensures capacity to append at least <code>count</code> values. 146ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 147ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette private void ensureCapacity(int count) { 148ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette final int currentSize = mSize; 149ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette final int minCapacity = currentSize + count; 150ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette if (minCapacity >= mValues.length) { 151ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette final int targetCap = currentSize + (currentSize < (MIN_CAPACITY_INCREMENT / 2) ? 152ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette MIN_CAPACITY_INCREMENT : currentSize >> 1); 153ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette final int newCapacity = targetCap > minCapacity ? targetCap : minCapacity; 154ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette final int[] newValues = ArrayUtils.newUnpaddedIntArray(newCapacity); 155ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette System.arraycopy(mValues, 0, newValues, 0, currentSize); 156ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette mValues = newValues; 157ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 158ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 159ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 160ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette /** 161ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Removes all values from this array. 162ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 163ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette public void clear() { 164ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette mSize = 0; 165ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 166ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 167ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette @Override 168ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette public IntArray clone() throws CloneNotSupportedException { 169ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette final IntArray clone = (IntArray) super.clone(); 170ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette clone.mValues = mValues.clone(); 171ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette return clone; 172ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 173ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 174ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette /** 175ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Returns the value at the specified position in this array. 176ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 177ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette public int get(int index) { 178112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi checkBounds(index); 179ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette return mValues[index]; 180ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 181ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 182ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette /** 183112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi * Sets the value at the specified position in this array. 184112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi */ 185112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi public void set(int index, int value) { 186112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi checkBounds(index); 187112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi mValues[index] = value; 188112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi } 189112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi 190112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi /** 191ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Returns the index of the first occurrence of the specified value in this 192ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * array, or -1 if this array does not contain the value. 193ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 194ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette public int indexOf(int value) { 195ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette final int n = mSize; 196ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette for (int i = 0; i < n; i++) { 197ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette if (mValues[i] == value) { 198ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette return i; 199ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 200ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 201ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette return -1; 202ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 203ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 204ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette /** 205ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Removes the value at the specified index from this array. 206ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 207ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette public void remove(int index) { 208112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi checkBounds(index); 209ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette System.arraycopy(mValues, index + 1, mValues, index, mSize - index - 1); 210ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette mSize--; 211ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 212ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette 213ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette /** 214ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette * Returns the number of values in this array. 215ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette */ 216ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette public int size() { 217ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette return mSize; 218ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette } 2199c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban 2209c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban /** 2219c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban * Returns a new array with the contents of this IntArray. 2229c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban */ 2239c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban public int[] toArray() { 2249c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban return Arrays.copyOf(mValues, mSize); 2259c5dfa5c79fff17f96bf977b86c0c9ceb8c3cf9bZoltan Szatmary-Ban } 226112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi 227112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi private void checkBounds(int index) { 228112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi if (index < 0 || mSize <= index) { 229112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi throw new ArrayIndexOutOfBoundsException(mSize, index); 230112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi } 231112962a6b09310c58093b9a8af341cbeaa612a48Hugo Benichi } 232ffb46bf2956d89e3190007ccf2ef3ce3eed005feAlan Viverette} 233