package me.piebridge.brevent.protocol; import android.os.Parcel; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.ArraySet; import android.support.v4.util.SimpleArrayMap; import android.util.SparseIntArray; import java.util.Collection; /** * parcel utils for Brevent Protocol * <p> * Created by thom on 2017/2/6. */ class ParcelUtils { private ParcelUtils() { } static void writeCollection(Parcel dest, @Nullable Collection<String> collection) { if (collection == null) { dest.writeInt(-1); } else { dest.writeInt(collection.size()); for (String s : collection) { dest.writeString(s); } } } @NonNull static Collection<String> readCollection(Parcel in) { int size = in.readInt(); if (size <= 0) { return new ArraySet<>(); } Collection<String> collection = new ArraySet<>(size); for (int i = 0; i < size; ++i) { collection.add(in.readString()); } return collection; } @NonNull private static SparseIntArray readSparseIntArray(Parcel in) { int size = in.readInt(); if (size < 0) { return new SparseIntArray(0); } SparseIntArray array = new SparseIntArray(size); for (int i = 0; i < size; ++i) { array.append(in.readInt(), in.readInt()); } return array; } private static void writeSparseIntArray(Parcel dest, @Nullable SparseIntArray array) { if (array == null) { dest.writeInt(-1); } else { int size = array.size(); dest.writeInt(size); for (int i = 0; i < size; ++i) { dest.writeInt(array.keyAt(i)); dest.writeInt(array.valueAt(i)); } } } @NonNull static SimpleArrayMap<String, SparseIntArray> readSimpleArrayMap(Parcel in) { int size = in.readInt(); if (size <= 0) { return new SimpleArrayMap<>(); } SimpleArrayMap<String, SparseIntArray> map = new SimpleArrayMap<>(size); for (int i = 0; i < size; ++i) { map.put(in.readString(), readSparseIntArray(in)); } return map; } static void writeSimpleArrayMap(Parcel dest, @Nullable SimpleArrayMap<String, SparseIntArray> map) { if (map == null) { dest.writeInt(-1); } else { int size = map.size(); dest.writeInt(size); for (int i = 0; i < size; ++i) { dest.writeString(map.keyAt(i)); writeSparseIntArray(dest, map.valueAt(i)); } } } }