Merge "Checkng upper bound in *Array classes."

This commit is contained in:
TreeHugger Robot
2019-03-06 22:08:20 +00:00
committed by Android (Google) Code Review
7 changed files with 105 additions and 13 deletions

View File

@@ -16,12 +16,12 @@
package android.util;
import libcore.util.EmptyArray;
import android.annotation.UnsupportedAppUsage;
import com.android.internal.util.ArrayUtils;
import libcore.util.EmptyArray;
import java.util.Collection;
import java.util.ConcurrentModificationException;
import java.util.Map;
@@ -453,6 +453,10 @@ public final class ArrayMap<K, V> implements Map<K, V> {
* @return Returns the key stored at the given index.
*/
public K keyAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
return (K)mArray[index << 1];
}
@@ -462,6 +466,10 @@ public final class ArrayMap<K, V> implements Map<K, V> {
* @return Returns the value stored at the given index.
*/
public V valueAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
return (V)mArray[(index << 1) + 1];
}
@@ -472,6 +480,10 @@ public final class ArrayMap<K, V> implements Map<K, V> {
* @return Returns the previous value at the given index.
*/
public V setValueAt(int index, V value) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
index = (index << 1) + 1;
V old = (V)mArray[index];
mArray[index] = value;
@@ -665,6 +677,11 @@ public final class ArrayMap<K, V> implements Map<K, V> {
* @return Returns the value that was stored at this index.
*/
public V removeAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
final Object old = mArray[(index << 1) + 1];
final int osize = mSize;
final int nsize;

View File

@@ -21,9 +21,6 @@ import com.android.internal.util.GrowingArrayUtils;
import libcore.util.EmptyArray;
import java.util.Arrays;
import java.util.Objects;
/**
* SparseArray mapping longs to Objects. Unlike a normal array of Objects,
* there can be gaps in the indices. It is intended to be more memory efficient
@@ -147,6 +144,10 @@ public class LongSparseArray<E> implements Cloneable {
* Removes the mapping at the specified index.
*/
public void removeAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
if (mValues[index] != DELETED) {
mValues[index] = DELETED;
mGarbage = true;
@@ -236,6 +237,10 @@ public class LongSparseArray<E> implements Cloneable {
* key.</p>
*/
public long keyAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
if (mGarbage) {
gc();
}
@@ -256,6 +261,10 @@ public class LongSparseArray<E> implements Cloneable {
*/
@SuppressWarnings("unchecked")
public E valueAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
if (mGarbage) {
gc();
}
@@ -269,6 +278,10 @@ public class LongSparseArray<E> implements Cloneable {
* LongSparseArray stores.
*/
public void setValueAt(int index, E value) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
if (mGarbage) {
gc();
}

View File

@@ -16,14 +16,13 @@
package android.util;
import android.annotation.UnsupportedAppUsage;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.GrowingArrayUtils;
import android.annotation.UnsupportedAppUsage;
import libcore.util.EmptyArray;
import java.util.Arrays;
/**
* Map of {@code long} to {@code long}. Unlike a normal array of longs, there
* can be gaps in the indices. It is intended to be more memory efficient than using a
@@ -173,6 +172,10 @@ public class LongSparseLongArray implements Cloneable {
* key.</p>
*/
public long keyAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
return mKeys[index];
}
@@ -188,6 +191,10 @@ public class LongSparseLongArray implements Cloneable {
* associated with the largest key.</p>
*/
public long valueAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
return mValues[index];
}

View File

@@ -16,10 +16,11 @@
package android.util;
import android.annotation.UnsupportedAppUsage;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.GrowingArrayUtils;
import android.annotation.UnsupportedAppUsage;
import libcore.util.EmptyArray;
/**
@@ -171,6 +172,10 @@ public class SparseArray<E> implements Cloneable {
* the behavior is undefined.</p>
*/
public void removeAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
if (mValues[index] != DELETED) {
mValues[index] = DELETED;
mGarbage = true;
@@ -279,6 +284,10 @@ public class SparseArray<E> implements Cloneable {
* the behavior is undefined.</p>
*/
public int keyAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
if (mGarbage) {
gc();
}
@@ -302,6 +311,10 @@ public class SparseArray<E> implements Cloneable {
*/
@SuppressWarnings("unchecked")
public E valueAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
if (mGarbage) {
gc();
}
@@ -317,6 +330,10 @@ public class SparseArray<E> implements Cloneable {
* <p>For indices outside of the range <code>0...size()-1</code>, the behavior is undefined.</p>
*/
public void setValueAt(int index, E value) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
if (mGarbage) {
gc();
}

View File

@@ -16,10 +16,11 @@
package android.util;
import android.annotation.UnsupportedAppUsage;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.GrowingArrayUtils;
import android.annotation.UnsupportedAppUsage;
import libcore.util.EmptyArray;
/**
@@ -167,6 +168,10 @@ public class SparseBooleanArray implements Cloneable {
* key.</p>
*/
public int keyAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
return mKeys[index];
}
@@ -182,6 +187,10 @@ public class SparseBooleanArray implements Cloneable {
* associated with the largest key.</p>
*/
public boolean valueAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
return mValues[index];
}
@@ -189,11 +198,19 @@ public class SparseBooleanArray implements Cloneable {
* Directly set the value at a particular index.
*/
public void setValueAt(int index, boolean value) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
mValues[index] = value;
}
/** @hide */
public void setKeyAt(int index, int key) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
mKeys[index] = key;
}

View File

@@ -16,14 +16,15 @@
package android.util;
import android.annotation.UnsupportedAppUsage;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.GrowingArrayUtils;
import java.util.Arrays;
import android.annotation.UnsupportedAppUsage;
import libcore.util.EmptyArray;
import java.util.Arrays;
/**
* SparseIntArrays map integers to integers. Unlike a normal array of integers,
* there can be gaps in the indices. It is intended to be more memory efficient
@@ -171,6 +172,10 @@ public class SparseIntArray implements Cloneable {
* key.</p>
*/
public int keyAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
return mKeys[index];
}
@@ -186,6 +191,10 @@ public class SparseIntArray implements Cloneable {
* associated with the largest key.</p>
*/
public int valueAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
return mValues[index];
}
@@ -193,6 +202,10 @@ public class SparseIntArray implements Cloneable {
* Directly set the value at a particular index.
*/
public void setValueAt(int index, int value) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
mValues[index] = value;
}

View File

@@ -182,6 +182,10 @@ public class SparseLongArray implements Cloneable {
* key.</p>
*/
public int keyAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
return mKeys[index];
}
@@ -197,6 +201,10 @@ public class SparseLongArray implements Cloneable {
* associated with the largest key.</p>
*/
public long valueAt(int index) {
if (index >= mSize) {
// The array might be slightly bigger than mSize, in which case, indexing won't fail.
throw new ArrayIndexOutOfBoundsException(index);
}
return mValues[index];
}