1cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowhampackage com.xtremelabs.robolectric.shadows; 2cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowham 3064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogenimport static com.xtremelabs.robolectric.Robolectric.shadowOf; 4064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 5064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogenimport android.os.Bundle; 6cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowhamimport android.os.Parcel; 76ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkelimport android.os.Parcelable; 8064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogenimport android.text.TextUtils; 9064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogenimport android.util.Log; 10064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogenimport android.util.Pair; 11064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 12cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowhamimport com.xtremelabs.robolectric.Robolectric; 13064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogenimport com.xtremelabs.robolectric.bytecode.ShadowWrangler; 14cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowhamimport com.xtremelabs.robolectric.internal.Implementation; 15cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowhamimport com.xtremelabs.robolectric.internal.Implements; 16053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawalaimport com.xtremelabs.robolectric.internal.RealObject; 17cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowham 18064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogenimport java.lang.reflect.Field; 19e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plissonimport java.util.ArrayList; 20064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogenimport java.util.HashMap; 21e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plissonimport java.util.List; 22064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogenimport java.util.Map; 23064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogenimport java.util.Set; 24e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson 25cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowham@Implements(Parcel.class) 266ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel@SuppressWarnings("unchecked") 27cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowhampublic class ShadowParcel { 28064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 29064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_NULL = -1; 30064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_STRING = 0; 31064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_INTEGER = 1; 32064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_MAP = 2; 33064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_BUNDLE = 3; 34064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_PARCELABLE = 4; 35064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_SHORT = 5; 36064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_LONG = 6; 37064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_FLOAT = 7; 38064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_DOUBLE = 8; 39064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_BOOLEAN = 9; 40064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_CHARSEQUENCE = 10; 41c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen private static final int VAL_LIST = 11; 42064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_BYTEARRAY = 13; 43064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_STRINGARRAY = 14; 44c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen private static final int VAL_PARCELABLEARRAY = 16; 45064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_OBJECTARRAY = 17; 46064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_INTARRAY = 18; 47064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_LONGARRAY = 19; 48064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_BYTE = 20; 49064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private static final int VAL_BOOLEANARRAY = 23; 50c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen private static final int VAL_CHARSEQUENCEARRAY = 24; 51064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 52064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private final ArrayList<Pair<Integer, ?>> parcelData = new ArrayList<Pair<Integer, ?>>(); 537598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz private int index = 0; 547598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 55053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala @RealObject 56053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala private Parcel realParcel; 57053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala 587598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz @Implementation 597598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public static Parcel obtain() { 607598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz return Robolectric.newInstanceOf(Parcel.class); 617598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 627598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 637598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz @Implementation 64064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public int dataAvail() { 65064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return dataSize() - dataPosition(); 667598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 677598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 687598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz @Implementation 69064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public int dataPosition() { 70064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return calculateSizeToIndex(index); 717598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 727598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 737598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz @Implementation 74064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public int dataSize() { 75064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return calculateSizeToIndex(parcelData.size()); 76e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson } 774851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel 780fbe55be997150aa5c41faa8276e8b7ab8d826ecadriancowham @Implementation 79064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public int dataCapacity() { 80064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return dataSize(); 81dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 82dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 83dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 84064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void setDataPosition(int pos) { 85064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen index = calculateIndexFromSizePosition(pos); 86dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 87dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 88064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private int calculateSizeToIndex(int index) { 89064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int size = 0; 90064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (int i = 0; i < index; i++) { 91064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen size += parcelData.get(i).first; 92064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 93064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return size; 94ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 95ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 96064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private int calculateIndexFromSizePosition(int pos) { 97064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int size = 0; 98064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (int i = 0; i < parcelData.size(); i++) { 99064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (size >= pos) { 100064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return i; 101064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 102064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen size += parcelData.get(i).first; 103064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 104064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return parcelData.size(); 105ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 106ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 107dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 108064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeString(String str) { 109064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (str == null) { 110064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(-1); 111064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else { 112064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(str.length()); 113064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen addValueToList(Pair.create(str.length(), str)); 114064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 1150fbe55be997150aa5c41faa8276e8b7ab8d826ecadriancowham } 116e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson 117e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson @Implementation 1187598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public String readString() { 119064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 120064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 121064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return null; 122064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else { 123064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readValueFromList(null); 124064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 1257598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 1267598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 1277598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz @Implementation 128c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen public CharSequence readCharSequence() { 129c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen return TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(realParcel); 130c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 131c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 132c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen @Implementation 133c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen public void writeCharSequence(CharSequence val) { 134c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen TextUtils.writeToParcel(val, realParcel, 0); 135c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 136c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 137c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen @Implementation 138064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeInt(int i) { 139064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen addValueToList(Pair.create(Integer.SIZE / 8, i)); 1407598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 1417598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 142e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson @Implementation 143064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public int readInt() { 144064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readValueFromList(0); 145dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 146dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 147dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 148064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeLong(long i) { 149064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen addValueToList(Pair.create(Long.SIZE / 8, i)); 150dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 151dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 152dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 153064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public long readLong() { 154064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readValueFromList((long) 0); 1550fbe55be997150aa5c41faa8276e8b7ab8d826ecadriancowham } 1564851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel 157064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 158064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeFloat(float f) { 159064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen addValueToList(Pair.create(Float.SIZE / 8, f)); 160ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 161ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 162064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 163064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public float readFloat() { 164064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readValueFromList((float) 0); 165ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 166ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 1670fbe55be997150aa5c41faa8276e8b7ab8d826ecadriancowham @Implementation 168064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeDouble(double f) { 169064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen addValueToList(Pair.create(Double.SIZE / 8, f)); 170e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson } 171e1deb33276ab52fe01c4d6a4f0a3d02c29ebdc6aSebastien Plisson 1726ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel @Implementation 173064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public double readDouble() { 174064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readValueFromList((double) 0); 1754851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel } 1764851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel 177064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeBoolean(boolean b) { 178064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen addValueToList(Pair.create(1, b)); 1794851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel } 1804851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel 181064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public boolean readBoolean() { 182064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readValueFromList(false); 183064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 184064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 185064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeChar(char c) { 186064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen addValueToList(Pair.create(Character.SIZE / 8, c)); 187064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 188064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 189064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public char readChar() { 190064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readValueFromList((char) 0); 1914851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel } 1924851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel 1934851b76e6ef185e8588c351cb303eb90f7e765e9Jan Berkel @Implementation 194064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @SuppressWarnings("unchecked") 195064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeByte(byte b) { 196064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen addValueToList(Pair.create(Byte.SIZE / 8, b)); 1976ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel } 1986ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel 1996ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel @Implementation 200064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public byte readByte() { 201064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readValueFromList((byte) 0); 2026ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel } 2036ca1c54a32a83fcc3e347c141a0fc3ba653193b3Jan Berkel 204dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 205ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen public void readBooleanArray(boolean[] val) { 206064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 207064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (val.length != N) 208064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("bad array lengths"); 209ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 210ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen val[i] = readBoolean(); 211ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 212ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 213ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 214ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen @Implementation 215ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen public void writeBooleanArray(boolean[] val) { 2168f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen if (val == null) { 2178f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen writeInt(-1); 2188f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return; 2198f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 220ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen writeInt(val.length); 221064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (boolean b : val) 222064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeBoolean(b); 223ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 224ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 225ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen @Implementation 226ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen public boolean[] createBooleanArray() { 227064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 228064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 2298f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return null; 2308f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 231064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen boolean[] val = new boolean[N]; 232ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 233ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen val[i] = readBoolean(); 234ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 235ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen return val; 236ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 237ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 238ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen @Implementation 239ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen public void readCharArray(char[] val) { 240064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 241064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (val.length != N) 242064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("bad array lengths"); 243ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 244ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen val[i] = readChar(); 245ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 246ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 247ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 248ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen @Implementation 249ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen public void writeCharArray(char[] val) { 2508f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen if (val == null) { 2518f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen writeInt(-1); 2528f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return; 2538f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 254ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen writeInt(val.length); 255064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (char b : val) 256064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeChar(b); 257ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 258ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 259ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen @Implementation 260ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen public char[] createCharArray() { 261064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 262064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 2638f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return null; 2648f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 265064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen char[] val = new char[N]; 266ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 267ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen val[i] = readChar(); 268ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 269ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen return val; 270ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 271ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 272ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen @Implementation 273dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void readFloatArray(float[] val) { 274064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 275064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (val.length != N) 276064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("bad array lengths"); 277ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 278dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel val[i] = readFloat(); 279dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 280dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 281dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 282dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 283dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void writeFloatArray(float[] val) { 2848f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen if (val == null) { 2858f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen writeInt(-1); 2868f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return; 2878f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 288dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel writeInt(val.length); 289064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (float f : val) 290064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeFloat(f); 291dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 292dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 293dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 294ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen public float[] createFloatArray() { 295064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 296064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 2978f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return null; 2988f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 299064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen float[] val = new float[N]; 300ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 301ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen val[i] = readFloat(); 302ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 303ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen return val; 304ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 305ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 306ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen @Implementation 307dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void writeDoubleArray(double[] val) { 3088f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen if (val == null) { 3098f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen writeInt(-1); 3108f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return; 3118f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 312dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel writeInt(val.length); 313064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (double f : val) 314064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeDouble(f); 315dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 316dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 317dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 318dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void readDoubleArray(double[] val) { 319064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 320064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (val.length != N) 321064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("bad array lengths"); 322ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 323ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen val[i] = readDouble(); 324ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 325ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 326ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 327ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen @Implementation 328ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen public double[] createDoubleArray() { 329064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 330064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 3318f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return null; 3328f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 333064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen double[] val = new double[N]; 334ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 335dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel val[i] = readDouble(); 336dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 337ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen return val; 338dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 339dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 340dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 341dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void writeIntArray(int[] val) { 3428f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen if (val == null) { 3438f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen writeInt(-1); 3448f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return; 3458f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 346dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel writeInt(val.length); 347064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (int f : val) 348064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(f); 349dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 350dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 351dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 352dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void readIntArray(int[] val) { 353064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 354064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (val.length != N) 355064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("bad array lengths"); 356ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 357ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen val[i] = readInt(); 358ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 359ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 360ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 361ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen @Implementation 362ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen public int[] createIntArray() { 363064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 364064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 3658f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return null; 3668f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 367064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int[] val = new int[N]; 368ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 369dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel val[i] = readInt(); 370dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 371ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen return val; 372dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 373dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 374dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 3757124c809f1a3a49cc0c6e2fb36972155fd00e796John Stuppy public void writeByteArray(byte[] val) { 3768f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen if (val == null) { 3778f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen writeInt(-1); 3788f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return; 3798f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 3807124c809f1a3a49cc0c6e2fb36972155fd00e796John Stuppy writeInt(val.length); 381064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (byte f : val) 382064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeByte(f); 3837124c809f1a3a49cc0c6e2fb36972155fd00e796John Stuppy } 3847124c809f1a3a49cc0c6e2fb36972155fd00e796John Stuppy 3857124c809f1a3a49cc0c6e2fb36972155fd00e796John Stuppy @Implementation 3867124c809f1a3a49cc0c6e2fb36972155fd00e796John Stuppy public void readByteArray(byte[] val) { 387064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 388064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (val.length != N) 389064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("bad array lengths"); 390ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 3917124c809f1a3a49cc0c6e2fb36972155fd00e796John Stuppy val[i] = readByte(); 3927124c809f1a3a49cc0c6e2fb36972155fd00e796John Stuppy } 3937124c809f1a3a49cc0c6e2fb36972155fd00e796John Stuppy } 3947124c809f1a3a49cc0c6e2fb36972155fd00e796John Stuppy 3957124c809f1a3a49cc0c6e2fb36972155fd00e796John Stuppy @Implementation 396ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen public byte[] createByteArray() { 397064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 398064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 3998f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return null; 4008f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 401064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen byte[] val = new byte[N]; 402ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 403ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen val[i] = readByte(); 404ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 405ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen return val; 406ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 407ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 408ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen @Implementation 409dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void writeLongArray(long[] val) { 4108f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen if (val == null) { 4118f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen writeInt(-1); 4128f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return; 4138f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 414dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel writeInt(val.length); 415064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (long f : val) 416064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeLong(f); 417dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 418dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 419dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 420dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void readLongArray(long[] val) { 421064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 422064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (val.length != N) 423064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("bad array lengths"); 424ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 425ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen val[i] = readLong(); 426ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 427ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen } 428ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen 429ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen @Implementation 430ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen public long[] createLongArray() { 431064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 432064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 4338f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return null; 4348f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 435064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen long[] val = new long[N]; 436ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen for (int i = 0; i < val.length; i++) { 437dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel val[i] = readLong(); 438dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 439ffc5bd1761833d4f89ef3c7a3849cf3e19c9c830Jon Boekenoogen return val; 440dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 441dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 442dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 443dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel public void writeStringArray(String[] val) { 4448f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen if (val == null) { 4458f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen writeInt(-1); 4468f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen return; 4478f9c1466f3d1d10bc50a57f13f19aded7c63c388Jon Boekenoogen } 448dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel writeInt(val.length); 449064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (String f : val) 450064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeString(f); 451dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 452dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 453dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel @Implementation 4540373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen public String[] createStringArray() { 4550373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen String[] array = null; 4560373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen 457064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 458064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N >= 0) { 459064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen array = new String[N]; 460064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (int i = 0; i < N; i++) { 4610373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen array[i] = readString(); 4620373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen } 4630373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen } 4640373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen return array; 4650373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen } 4660373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen 4670373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen @Implementation 4680bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala public void readStringArray(String[] dest) { 469064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 470064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (dest.length != N) 471064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("bad array lengths"); 4720bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala for (int i = 0; i < dest.length; i++) { 4730bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala dest[i] = readString(); 4740bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala } 4750bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala } 4760bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala 4770bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala @Implementation 4780bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala public void writeStringList(List<String> strings) { 4790bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala if (strings == null) { 4800bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala writeInt(-1); 4810bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala return; 4820bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala } 4830bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala int count = strings.size(); 484064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int i = 0; 4850bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala writeInt(count); 4860bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala while (i < count) { 4870bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala writeString(strings.get(i)); 4880bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala i++; 489dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 490dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel } 491dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 4920373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen @Implementation 4930bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala public void readStringList(List<String> list) { 4940bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala int listSizeBeforeChange = list.size(); 4950bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala int addCount = readInt(); 4960bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala int i = 0; 4970bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala for (; i < listSizeBeforeChange && i < addCount; i++) { 4980bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala list.set(i, readString()); 4990bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala } 500064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (; i < addCount; i++) { 5010bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala list.add(readString()); 5020bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala } 503064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (; i < listSizeBeforeChange; i++) { 5040bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala list.remove(addCount); 5050373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen } 5060373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen } 507dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 5080373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen @Implementation 5090373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen public ArrayList<String> createStringArrayList() { 510064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 511064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 5120373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen return null; 5130373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen } 514053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala 515064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen ArrayList<String> l = new ArrayList<String>(N); 516064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen while (N > 0) { 5170373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen l.add(readString()); 518064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen N--; 519064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 520064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return l; 521064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 522064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 523064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 524c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen public void writeCharSequenceArray(CharSequence[] val) { 525c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen if (val != null) { 526c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen int N = val.length; 527c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeInt(N); 528c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen for (int i=0; i<N; i++) { 529c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeCharSequence(val[i]); 530c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 531c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } else { 532c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeInt(-1); 533c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 534c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 535c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 536c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen @Implementation 537c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen public CharSequence[] readCharSequenceArray() { 538c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen CharSequence[] array = null; 539c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 540c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen int length = readInt(); 541c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen if (length >= 0) 542c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen { 543c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen array = new CharSequence[length]; 544c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 545c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen for (int i = 0 ; i < length ; i++) 546c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen { 547c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen array[i] = readCharSequence(); 548c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 549c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 550c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 551c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen return array; 552c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 553c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 554c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen @Implementation 555c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen public void writeList(List val) { 556c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen if (val == null) { 557c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeInt(-1); 558c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen return; 559c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 560c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen int N = val.size(); 561c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen int i = 0; 562c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeInt(N); 563c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen while (i < N) { 564c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeValue(val.get(i)); 565c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen i++; 566c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 567c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 568c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 569c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen @Implementation 570c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen public void readList(List outVal, ClassLoader loader) { 571c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen int N = readInt(); 572c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen readListInternal(outVal, N, loader); 573c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 574c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 575c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen @Implementation 576c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen public ArrayList readArrayList(ClassLoader loader) { 577c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen int N = readInt(); 578c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen if (N < 0) { 579c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen return null; 580c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 581c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen ArrayList l = new ArrayList(N); 582c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen readListInternal(l, N, loader); 583c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen return l; 584c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 585c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 586c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen @Implementation 587064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeArray(Object[] values) { 588064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (values == null) { 589064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(-1); 590064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return; 591064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 592064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = values.length; 593064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(N); 594064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (Object value : values) { 595064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeValue(value); 596064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 597064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 598064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 599064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 600064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public Object[] readArray(ClassLoader loader) { 601064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 602064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 603064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return null; 6040373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen } 605064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen Object[] l = new Object[N]; 606064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen readArrayInternal(l, N, loader); 6070373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen return l; 6080373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen } 609dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 6100373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen @Implementation 611064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeValue(Object v) { 612064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (v == null) { 613064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_NULL); 614064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof String) { 615064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_STRING); 616064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeString((String) v); 617064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof Integer) { 618064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_INTEGER); 619064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt((Integer) v); 620064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof Map) { 621064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_MAP); 622064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeMap((Map) v); 623064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof Bundle) { 624064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen // Must be before Parcelable 625064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_BUNDLE); 626064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeBundle((Bundle) v); 627064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof Parcelable) { 628064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_PARCELABLE); 629064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeParcelable((Parcelable) v, 0); 630064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof Short) { 631064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_SHORT); 632064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(((Short) v).intValue()); 633064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof Long) { 634064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_LONG); 635064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeLong((Long) v); 636064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof Float) { 637064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_FLOAT); 638064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeFloat((Float) v); 639064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof Double) { 640064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_DOUBLE); 641064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeDouble((Double) v); 642064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof Boolean) { 643064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_BOOLEAN); 644064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt((Boolean) v ? 1 : 0); 645064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof CharSequence) { 646064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen // Must be after String 647064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_CHARSEQUENCE); 648c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeCharSequence((CharSequence) v); 649c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } else if (v instanceof List) { 650c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeInt(VAL_LIST); 651c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeList((List) v); 652064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof boolean[]) { 653064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_BOOLEANARRAY); 654064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeBooleanArray((boolean[]) v); 655064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof byte[]) { 656064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_BYTEARRAY); 657064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeByteArray((byte[]) v); 658064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof String[]) { 659064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_STRINGARRAY); 660064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeStringArray((String[]) v); 661c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } else if (v instanceof CharSequence[]) { 662c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen // Must be after String[] and before Object[] 663c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeInt(VAL_CHARSEQUENCEARRAY); 664c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeCharSequenceArray((CharSequence[]) v); 665c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } else if (v instanceof Parcelable[]) { 666c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeInt(VAL_PARCELABLEARRAY); 667c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeParcelableArray((Parcelable[]) v, 0); 668064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof Object[]) { 669064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_OBJECTARRAY); 670064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeArray((Object[]) v); 671064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof int[]) { 672064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_INTARRAY); 673064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeIntArray((int[]) v); 674064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof long[]) { 675064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_LONGARRAY); 676064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeLongArray((long[]) v); 677064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else if (v instanceof Byte) { 678064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(VAL_BYTE); 679064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeByte((Byte) v); 680064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else { 681064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException( 682064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen "Parcel: unable to marshal value with type" + v.getClass().getName()); 683064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 684064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 685064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 686064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 687064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public Object readValue(ClassLoader loader) { 688064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int type = readInt(); 689064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 690064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen switch (type) { 691064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_NULL: 692064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return null; 693064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 694064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_STRING: 695064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readString(); 696064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 697064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_INTEGER: 698064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readInt(); 699064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 700064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_MAP: 701064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readHashMap(loader); 702064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 703064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_PARCELABLE: 704064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readParcelable(loader); 705064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 706064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_SHORT: 707064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return (short) readInt(); 708064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 709064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_LONG: 710064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readLong(); 711064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 712064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_FLOAT: 713064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readFloat(); 714064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 715064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_DOUBLE: 716064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readDouble(); 717064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 718064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_BOOLEAN: 719064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readInt() == 1; 720064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 721064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_CHARSEQUENCE: 722c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen return readCharSequence(); 723c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 724c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen case VAL_LIST: 725c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen return readArrayList(loader); 726064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 727064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_BOOLEANARRAY: 728064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return createBooleanArray(); 729064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 730064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_BYTEARRAY: 731064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return createByteArray(); 732064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 733064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_STRINGARRAY: 734064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return createStringArray(); 735064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 736c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen case VAL_CHARSEQUENCEARRAY: 737c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen return readCharSequenceArray(); 738c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 739064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_OBJECTARRAY: 740064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readArray(loader); 741064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 742064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_INTARRAY: 743064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return createIntArray(); 744064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 745064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_LONGARRAY: 746064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return createLongArray(); 747064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 748064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_BYTE: 749064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readByte(); 750064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 751c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen case VAL_PARCELABLEARRAY: 752c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen return readParcelableArray(loader); 753c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 754064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen case VAL_BUNDLE: 755064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readBundle(loader); // loading will be deferred 756064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 757064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen default: 758064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int off = dataPosition() - 4; 759064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException( 760064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen "Parcel " + this + ": Unmarshalling unknown type code " + type 761064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen + " at offset " + off); 762064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 763064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 764064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 765064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 766064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public Bundle readBundle() { 767064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return readBundle(null); 768064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 769064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 770064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 771064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public Bundle readBundle(ClassLoader loader) { 772064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int offset = dataPosition(); 773064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 774064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 775064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return null; 776064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 777064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int magic = readInt(); 778064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (magic != 0x4C444E42) { 779064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("Magic number missing from bundle stream"); 780064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 781064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 782064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen Bundle bundle = new Bundle(); 783064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 784064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen // Read map 785064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen HashMap m = new HashMap(); 786064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen readMap(m, null); 787064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 788064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen shadowOf(bundle).map.putAll(m); 789064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 790064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return bundle; 791064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 792064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 793064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 794064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeBundle(Bundle val) { 795064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (val == null) { 796064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(-1); 797064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return; 798064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 799064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 800064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(-1); // dummy, will hold length 801064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int oldPos = dataPosition(); 802064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(0x4C444E42); // 'B' 'N' 'D' 'L' 803064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 804064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeMapInternal(shadowOf(val).map); 805064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int newPos = dataPosition(); 806064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 807064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen // Backpatch length 808064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen setDataPosition(oldPos - 4); 809064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = newPos - oldPos; 810064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(N); 811064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen setDataPosition(newPos); 812064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 813064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 814064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 815064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeParcelable(Parcelable p, int flags) { 816064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (p == null) { 817064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeString(null); 818064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return; 819064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 820064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen String name = p.getClass().getName(); 821064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeString(name); 822064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen p.writeToParcel(realParcel, flags); 823064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 824064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 825064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 826064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public <T extends Parcelable> T readParcelable(ClassLoader loader) { 827064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen String name = readString(); 828064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (name == null) { 829064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return null; 830064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 831064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen Parcelable.Creator<T> creator; 832064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen try { 833064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen Class c = loader == null ? Class.forName(name) : Class.forName(name, true, loader); 834064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen Field f = c.getField("CREATOR"); 835064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen creator = (Parcelable.Creator) f.get(null); 836064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } catch (IllegalAccessException e) { 837064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen Log.e("Parcel", "Class not found when unmarshalling: " + name + ", e: " + e); 838064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("IllegalAccessException when unmarshalling: " + name); 839064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } catch (ClassNotFoundException e) { 840064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen Log.e("Parcel", "Class not found when unmarshalling: " + name + ", e: " + e); 841064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("ClassNotFoundException when unmarshalling: " + name); 842064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } catch (ClassCastException e) { 843064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("Parcelable protocol requires a " 844064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen + "Parcelable.Creator object called " + " CREATOR on class " + name); 845064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } catch (NoSuchFieldException e) { 846064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("Parcelable protocol requires a " 847064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen + "Parcelable.Creator object called " + " CREATOR on class " + name); 848064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 849064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (creator == null) { 850064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen throw new RuntimeException("Parcelable protocol requires a " 851064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen + "Parcelable.Creator object called " + " CREATOR on class " + name); 852064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 853064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 854064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return creator.createFromParcel(realParcel); 855064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 856064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 857064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 858053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala public ArrayList createTypedArrayList(Parcelable.Creator c) { 859064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 860064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 861053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala return null; 8620373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen } 863dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 864064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen ArrayList l = new ArrayList(N); 865dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 866064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen while (N > 0) { 867053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala if (readInt() != 0) { 868053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala l.add(c.createFromParcel(realParcel)); 869053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala } else { 870053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala l.add(null); 871053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala } 872064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen N--; 8730373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen } 874053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala return l; 875053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala } 876053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala 877053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala @Implementation 8780bf1d6a0ed6c10719f9390cbed31c64142c41ccfPhil Goodwin & Rick Kawala public void writeTypedList(List val) { 879053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala if (val == null) { 880053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala writeInt(-1); 881053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala return; 882053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala } 883053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala 884064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = val.size(); 885053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala int i = 0; 886064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(N); 887064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen while (i < N) { 888053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala Object item = val.get(i); 889053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala if (item != null) { 890053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala writeInt(1); 891053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala ((Parcelable) item).writeToParcel(realParcel, 0); 892053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala } else { 893053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala writeInt(0); 894053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala } 895053f4fe6cc16a60b7c96ad79472274b3c8604ad2Phil Goodwin & Rick Kawala i++; 8960373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen } 8970373fcde8d3df449d4db2d4cfd671fef219d85ddJon Boekenoogen } 898dab3a74f4697f04455668863c2c62cd14745c230Jan Berkel 899064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 900c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen public <T extends Parcelable> void writeParcelableArray(T[] value, 901c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen int parcelableFlags) { 902c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen if (value != null) { 903c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen int N = value.length; 904c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeInt(N); 905c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen for (int i=0; i<N; i++) { 906c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeParcelable(value[i], parcelableFlags); 907c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 908c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } else { 909c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen writeInt(-1); 910c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 911c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 912c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 913c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen @Implementation 914c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen public Parcelable[] readParcelableArray(ClassLoader loader) { 915c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen int N = readInt(); 916c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen if (N < 0) { 917c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen return null; 918c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 919c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen Parcelable[] p = new Parcelable[N]; 920c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen for (int i = 0; i < N; i++) { 9213d6057c072c4b828d93cc739116c5f966d52e49bJon Boekenoogen p[i] = readParcelable(loader); 922c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 923c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen return p; 924c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 925c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 926c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen @Implementation 927064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void writeMap(Map val) { 928064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeMapInternal(val); 929064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 930064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 931064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 932064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public void readMap(Map outVal, ClassLoader loader) { 933064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 934064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen readMapInternal(outVal, N, loader); 935064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 936064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 937064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen @Implementation 938064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen public HashMap readHashMap(ClassLoader loader) { 939064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen int N = readInt(); 940064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (N < 0) { 941064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return null; 942064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 943064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen HashMap m = new HashMap(N); 944064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen readMapInternal(m, N, loader); 945064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return m; 946064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 947064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 948064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private void writeMapInternal(Map<String, Object> val) { 949064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (val == null) { 950064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(-1); 951064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return; 952064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 953064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 954064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen Set<Map.Entry<String, Object>> entries = val.entrySet(); 955064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeInt(entries.size()); 956064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (Map.Entry<String, Object> e : entries) { 957064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeValue(e.getKey()); 958064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen writeValue(e.getValue()); 959064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 960064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 961064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 962064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private void readMapInternal(Map outVal, int N, ClassLoader loader) { 963064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (int i = 0; i < N; i++) { 964064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen Object key = readValue(loader); 965064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen Object value = readValue(loader); 966064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen outVal.put(key, value); 967064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 968064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 969064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 970c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen private void readListInternal(List outVal, int N, ClassLoader loader) { 971c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen while (N > 0) { 972c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen Object value = readValue(loader); 973c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen outVal.add(value); 974c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen N--; 975c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 976c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen } 977c442dd3f1599c6e4fc11f4d942ab3d4cd3fbb9f7Jon Boekenoogen 978064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private void readArrayInternal(Object[] outVal, int N, ClassLoader loader) { 979064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen for (int i = 0; i < N; i++) { 980064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen Object value = readValue(loader); 981064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen outVal[i] = value; 982064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 983064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 984064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 985064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private void addValueToList(Pair<Integer, ?> value) { 986064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (index < parcelData.size()) { 987064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen parcelData.set(index, value); 988064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else { 989064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen parcelData.add(value); 990064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 991064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen index++; 992064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 993064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 994064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen private <T extends Object> T readValueFromList(T defaultValue) { 995064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen if (index < parcelData.size()) { 996064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return (T) parcelData.get(index++).second; 997064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } else { 998064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen return defaultValue; 999064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 1000064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen } 1001064f86b8dad1300e99457c9672a9ebbb6694ae4eJon Boekenoogen 10027598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public int getIndex() { 10037598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz return index; 10047598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 10057598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz 10067598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz public List getParcelData() { 10077598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz return parcelData; 10087598f0c0b1cce3bf1902772ea09139ef98083864Ryan Richard & Tyler Schultz } 1009cb6dcc93e483e0537f8c93595bb6687b392a0d2eadriancowham} 1010