diff options
Diffstat (limited to 'core/java/android/util/LongSparseArray.java')
| -rw-r--r-- | core/java/android/util/LongSparseArray.java | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/core/java/android/util/LongSparseArray.java b/core/java/android/util/LongSparseArray.java index d3b2c46ff1c3..e78b79695d3d 100644 --- a/core/java/android/util/LongSparseArray.java +++ b/core/java/android/util/LongSparseArray.java @@ -16,8 +16,12 @@ package android.util; +import android.os.Parcel; +import android.os.Parcelable; + import com.android.internal.util.ArrayUtils; import com.android.internal.util.GrowingArrayUtils; +import com.android.internal.util.Preconditions; import libcore.util.EmptyArray; @@ -442,4 +446,93 @@ public class LongSparseArray<E> implements Cloneable { buffer.append('}'); return buffer.toString(); } + + /** + * @hide + */ + public static class StringParcelling implements com.android.internal.util.Parcelling { + @Override + public void parcel(Object item, Parcel dest, int parcelFlags) { + if (item == null) { + dest.writeInt(-1); + return; + } + + LongSparseArray<String> array = (LongSparseArray<String>) item; + dest.writeInt(array.mSize); + dest.writeLongArray(array.mKeys); + dest.writeStringArray((String[]) array.mValues); + } + + @Override + public Object 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; + } + } + + /** + * @hide + */ + public static class Parcelling<T extends Parcelable> implements + com.android.internal.util.Parcelling { + @Override + public void parcel(Object item, Parcel dest, int parcelFlags) { + if (item == null) { + dest.writeInt(-1); + return; + } + + LongSparseArray<T> array = (LongSparseArray<T>) item; + dest.writeInt(array.mSize); + dest.writeLongArray(array.mKeys); + dest.writeParcelableArray((T[]) array.mValues, parcelFlags); + } + + @Override + public Object unparcel(Parcel source) { + int size = source.readInt(); + if (size == -1) { + return null; + } + + LongSparseArray<T> array = new LongSparseArray<>(0); + array.mSize = size; + array.mKeys = source.createLongArray(); + array.mValues = source.readParcelableArray(null); + + // 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; + } + } } |
