diff options
Diffstat (limited to 'core/java/android/util/LongSparseArray.java')
| -rw-r--r-- | core/java/android/util/LongSparseArray.java | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/core/java/android/util/LongSparseArray.java b/core/java/android/util/LongSparseArray.java index d3b2c46ff1c3..55542d898784 100644 --- a/core/java/android/util/LongSparseArray.java +++ b/core/java/android/util/LongSparseArray.java @@ -16,11 +16,19 @@ package android.util; +import android.annotation.NonNull; +import android.os.Parcel; + import com.android.internal.util.ArrayUtils; import com.android.internal.util.GrowingArrayUtils; +import com.android.internal.util.Preconditions; +import com.android.internal.util.function.LongObjPredicate; 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 @@ -140,6 +148,18 @@ public class LongSparseArray<E> implements Cloneable { delete(key); } + /** @hide */ + @SuppressWarnings("unchecked") + public void removeIf(@NonNull LongObjPredicate<? super E> filter) { + Objects.requireNonNull(filter); + for (int i = 0; i < mSize; ++i) { + if (mValues[i] != DELETED && filter.test(mKeys[i], (E) mValues[i])) { + mValues[i] = DELETED; + mGarbage = true; + } + } + } + /** * Removes the mapping at the specified index. * @@ -442,4 +462,51 @@ public class LongSparseArray<E> implements Cloneable { buffer.append('}'); return buffer.toString(); } + + /** + * @hide + */ + public static class StringParcelling implements + com.android.internal.util.Parcelling<LongSparseArray<String>> { + @Override + public void parcel(LongSparseArray<String> array, Parcel dest, int parcelFlags) { + if (array == null) { + dest.writeInt(-1); + return; + } + + int size = array.mSize; + + dest.writeInt(size); + dest.writeLongArray(array.mKeys); + + dest.writeStringArray(Arrays.copyOfRange(array.mValues, 0, size, String[].class)); + } + + @Override + public LongSparseArray<String> unparcel(Parcel source) { + int size = source.readInt(); + if (size == -1) { + return null; + } + + LongSparseArray<String> array = new LongSparseArray<>(0); + array.mSize = size; + array.mKeys = source.createLongArray(); + array.mValues = source.createStringArray(); + + // Make sure array is sane + Preconditions.checkArgument(array.mKeys.length >= size); + Preconditions.checkArgument(array.mValues.length >= size); + + if (size > 0) { + long last = array.mKeys[0]; + for (int i = 1; i < size; i++) { + Preconditions.checkArgument(last < array.mKeys[i]); + } + } + + return array; + } + } } |
