1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage java.util; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.IOException; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.ObjectOutputStream; 2272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilsonimport java.io.ObjectStreamException; 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.io.Serializable; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.lang.reflect.Array; 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.apache.harmony.luni.internal.nls.Messages; 2709133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilsonimport org.apache.harmony.luni.util.Msg; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Collections} contains static methods which operate on 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Collection} classes. 323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 333819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @since 1.2 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class Collections { 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final class CopiesList<E> extends AbstractList<E> implements 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Serializable { 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 2739099268398711800L; 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final int n; 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final E element; 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CopiesList(int length, E object) { 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (length < 0) { 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IllegalArgumentException(); 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project n = length; 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project element = object; 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return element == null ? object == null : element.equals(object); 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return n; 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E get(int location) { 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (0 <= location && location < n) { 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return element; 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IndexOutOfBoundsException(); 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final class EmptyList extends AbstractList implements 743819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson RandomAccess, Serializable { 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 8842843931221139166L; 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 0; 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object get(int location) { 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IndexOutOfBoundsException(); 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Object readResolve() { 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Collections.EMPTY_LIST; 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final class EmptySet extends AbstractSet implements 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Serializable { 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 1582296315990362920L; 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 0; 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator iterator() { 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new Iterator() { 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object next() { 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NoSuchElementException(); 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Object readResolve() { 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Collections.EMPTY_SET; 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final class EmptyMap extends AbstractMap implements 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Serializable { 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 6428348081105594320L; 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsKey(Object key) { 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsValue(Object value) { 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set entrySet() { 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return EMPTY_SET; 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object get(Object key) { 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set keySet() { 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return EMPTY_SET; 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Collection values() { 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return EMPTY_LIST; 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Object readResolve() { 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Collections.EMPTY_MAP; 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * An empty immutable instance of {@link List}. 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final List EMPTY_LIST = new EmptyList(); 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * An empty immutable instance of {@link Set}. 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final Set EMPTY_SET = new EmptySet(); 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * An empty immutable instance of {@link Map}. 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final Map EMPTY_MAP = new EmptyMap(); 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 19272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson /** 19372e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson * This class is a singleton so that equals() and hashCode() work properly. 19472e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson */ 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final class ReverseComparator<T> implements Comparator<T>, 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Serializable { 19772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 19872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson private static final ReverseComparator<Object> INSTANCE 19972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson = new ReverseComparator<Object>(); 20072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 7207038068494060240L; 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int compare(T o1, T o2) { 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Comparable<T> c2 = (Comparable<T>) o2; 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c2.compareTo(o1); 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 20872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 20972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson private Object readResolve() throws ObjectStreamException { 21072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson return INSTANCE; 21172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final class ReverseComparatorWithComparator<T> implements 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Comparator<T>, Serializable { 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 4374092139857L; 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final Comparator<T> comparator; 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ReverseComparatorWithComparator(Comparator<T> comparator) { 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(); 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.comparator = comparator; 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int compare(T o1, T o2) { 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return comparator.compare(o2, o1); 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 22872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 22972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson @Override 23072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson public boolean equals(Object o) { 23172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson return o instanceof ReverseComparatorWithComparator 23272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson && ((ReverseComparatorWithComparator) o).comparator 23372e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson .equals(comparator); 23472e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 23572e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 23672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson @Override 23772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson public int hashCode() { 23872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson return ~comparator.hashCode(); 23972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final class SingletonSet<E> extends AbstractSet<E> implements 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Serializable { 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 3193687207550431679L; 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final E element; 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SingletonSet(E object) { 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project element = object; 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return element == null ? object == null : element.equals(object); 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 1; 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator<E> iterator() { 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new Iterator<E>() { 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean hasNext = true; 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return hasNext; 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E next() { 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (hasNext) { 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hasNext = false; 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return element; 275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NoSuchElementException(); 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final class SingletonList<E> extends AbstractList<E> 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements Serializable { 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 3093736618740652951L; 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final E element; 291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SingletonList(E object) { 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project element = object; 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return element == null ? object == null : element.equals(object); 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E get(int location) { 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (location == 0) { 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return element; 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new IndexOutOfBoundsException(); 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 1; 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final class SingletonMap<K, V> extends AbstractMap<K, V> 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements Serializable { 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = -6979724477215052911L; 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final K k; 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final V v; 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SingletonMap(K key, V value) { 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project k = key; 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project v = value; 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsKey(Object key) { 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return k == null ? key == null : k.equals(key); 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsValue(Object value) { 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return v == null ? value == null : v.equals(value); 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V get(Object key) { 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (containsKey(key)) { 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return v; 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return null; 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 1; 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set<Map.Entry<K, V>> entrySet() { 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new AbstractSet<Map.Entry<K, V>>() { 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (object instanceof Map.Entry) { 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<?, ?> entry = (Map.Entry<?, ?>) object; 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return containsKey(entry.getKey()) 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && containsValue(entry.getValue()); 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 1; 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator<Map.Entry<K, V>> iterator() { 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new Iterator<Map.Entry<K, V>>() { 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean hasNext = true; 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return hasNext; 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Map.Entry<K, V> next() { 37972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson if (!hasNext) { 38072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson throw new NoSuchElementException(); 381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 38272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 38372e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson hasNext = false; 38472e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson return new MapEntry<K, V>(k, v) { 38572e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson @Override 38672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson public V setValue(V value) { 38772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson throw new UnsupportedOperationException(); 38872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 38972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson }; 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class SynchronizedCollection<E> implements Collection<E>, 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Serializable { 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 3053995032091335093L; 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Collection<E> c; 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Object mutex; 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedCollection(Collection<E> collection) { 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = collection; 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mutex = this; 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedCollection(Collection<E> collection, Object mutex) { 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = collection; 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.mutex = mutex; 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean add(E object) { 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.add(object); 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean addAll(Collection<? extends E> collection) { 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.addAll(collection); 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void clear() { 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.clear(); 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.contains(object); 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsAll(Collection<?> collection) { 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.containsAll(collection); 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isEmpty() { 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.isEmpty(); 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator<E> iterator() { 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.iterator(); 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean remove(Object object) { 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.remove(object); 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean removeAll(Collection<?> collection) { 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.removeAll(collection); 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean retainAll(Collection<?> collection) { 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.retainAll(collection); 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.size(); 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public java.lang.Object[] toArray() { 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.toArray(); 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.toString(); 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public <T> T[] toArray(T[] array) { 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.toArray(array); 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void writeObject(ObjectOutputStream stream) throws IOException { 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stream.defaultWriteObject(); 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class SynchronizedRandomAccessList<E> extends SynchronizedList<E> 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements RandomAccess { 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 1530674583602358482L; 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedRandomAccessList(List<E> l) { 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(l); 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedRandomAccessList(List<E> l, Object mutex) { 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(l, mutex); 521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public List<E> subList(int start, int end) { 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedRandomAccessList<E>(list.subList(start, 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project end), mutex); 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Replaces this SynchronizedRandomAccessList with a SynchronizedList so 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * that JREs before 1.4 can deserialize this object without any 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * problems. This is necessary since RandomAccess API was introduced 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * only in 1.4. 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 5373819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return SynchronizedList 5393819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see SynchronizedList#readResolve() 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Object writeReplace() { 543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedList<E>(list); 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class SynchronizedList<E> extends SynchronizedCollection<E> 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements List<E> { 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = -7754090372962971524L; 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final List<E> list; 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedList(List<E> l) { 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(l); 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project list = l; 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedList(List<E> l, Object mutex) { 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(l, mutex); 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project list = l; 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void add(int location, E object) { 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project list.add(location, object); 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean addAll(int location, Collection<? extends E> collection) { 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.addAll(location, collection); 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object object) { 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.equals(object); 579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E get(int location) { 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.get(location); 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.hashCode(); 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int indexOf(Object object) { 5963819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson final int size; 5973819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson final Object[] array; 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 5993819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson size = list.size(); 6003819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson array = new Object[size]; 6013819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson list.toArray(array); 6023819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 6033819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (null != object) 6043819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson for (int i = 0; i < size; i++) { 6053819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (object.equals(array[i])) { 6063819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return i; 6073819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 6083819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 6093819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson else { 6103819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson for (int i = 0; i < size; i++) { 6113819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (null == array[i]) { 6123819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return i; 6133819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 6143819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 6163819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return -1; 617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int lastIndexOf(Object object) { 6203819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson final int size; 6213819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson final Object[] array; 622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 6233819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson size = list.size(); 6243819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson array = new Object[size]; 6253819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson list.toArray(array); 6263819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 6273819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (null != object) 6283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson for (int i = size - 1; i >= 0; i--) { 6293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (object.equals(array[i])) { 6303819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return i; 6313819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 6323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 6333819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson else { 6343819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson for (int i = size - 1; i >= 0; i--) { 6353819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (null == array[i]) { 6363819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return i; 6373819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 6383819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 6403819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson return -1; 641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public ListIterator<E> listIterator() { 644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.listIterator(); 646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public ListIterator<E> listIterator(int location) { 650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.listIterator(location); 652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E remove(int location) { 656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.remove(location); 658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E set(int location, E object) { 662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.set(location, object); 664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public List<E> subList(int start, int end) { 668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedList<E>(list.subList(start, end), mutex); 670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void writeObject(ObjectOutputStream stream) throws IOException { 674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stream.defaultWriteObject(); 676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolves SynchronizedList instances to SynchronizedRandomAccessList 681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instances if the underlying list is a Random Access list. 682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is necessary since SynchronizedRandomAccessList instances are 684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * replaced with SynchronizedList instances during serialization for 685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * compliance with JREs before 1.4. 686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 6873819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a SynchronizedList instance if the underlying list implements 689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * RandomAccess interface, or this same object if not. 6903819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see SynchronizedRandomAccessList#writeReplace() 692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Object readResolve() { 694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (list instanceof RandomAccess) { 695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedRandomAccessList<E>(list, mutex); 696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this; 698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class SynchronizedMap<K, V> implements Map<K, V>, Serializable { 702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 1978198479659022715L; 703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final Map<K, V> m; 705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Object mutex; 707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedMap(Map<K, V> map) { 709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project m = map; 710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mutex = this; 711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedMap(Map<K, V> map, Object mutex) { 714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project m = map; 715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.mutex = mutex; 716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void clear() { 719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project m.clear(); 721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsKey(Object key) { 725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.containsKey(key); 727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsValue(Object value) { 731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.containsValue(value); 733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set<Map.Entry<K, V>> entrySet() { 737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedSet<Map.Entry<K, V>>(m.entrySet(), mutex); 739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object object) { 744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.equals(object); 746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V get(Object key) { 750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.get(key); 752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.hashCode(); 759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isEmpty() { 763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.isEmpty(); 765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set<K> keySet() { 769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedSet<K>(m.keySet(), mutex); 771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V put(K key, V value) { 775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.put(key, value); 777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void putAll(Map<? extends K, ? extends V> map) { 781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project m.putAll(map); 783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V remove(Object key) { 787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.remove(key); 789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.size(); 795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Collection<V> values() { 799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedCollection<V>(m.values(), mutex); 801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.toString(); 808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void writeObject(ObjectOutputStream stream) throws IOException { 812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stream.defaultWriteObject(); 814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class SynchronizedSet<E> extends SynchronizedCollection<E> implements 819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Set<E> { 820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 487447009682186044L; 821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedSet(Set<E> set) { 823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(set); 824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedSet(Set<E> set, Object mutex) { 827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(set, mutex); 828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object object) { 832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.equals(object); 834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.hashCode(); 841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void writeObject(ObjectOutputStream stream) throws IOException { 845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stream.defaultWriteObject(); 847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class SynchronizedSortedMap<K, V> extends SynchronizedMap<K, V> 852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements SortedMap<K, V> { 853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = -8798146769416483793L; 854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final SortedMap<K, V> sm; 856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedSortedMap(SortedMap<K, V> map) { 858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(map); 859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sm = map; 860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedSortedMap(SortedMap<K, V> map, Object mutex) { 863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(map, mutex); 864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sm = map; 865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Comparator<? super K> comparator() { 868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return sm.comparator(); 870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public K firstKey() { 874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return sm.firstKey(); 876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedMap<K, V> headMap(K endKey) { 880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedSortedMap<K, V>(sm.headMap(endKey), 882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mutex); 883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public K lastKey() { 887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return sm.lastKey(); 889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedMap<K, V> subMap(K startKey, K endKey) { 893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedSortedMap<K, V>(sm.subMap(startKey, 895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project endKey), mutex); 896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedMap<K, V> tailMap(K startKey) { 900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedSortedMap<K, V>(sm.tailMap(startKey), 902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mutex); 903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void writeObject(ObjectOutputStream stream) throws IOException { 907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stream.defaultWriteObject(); 909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static class SynchronizedSortedSet<E> extends SynchronizedSet<E> implements 914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SortedSet<E> { 915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 8695801310862127406L; 916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final SortedSet<E> ss; 918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedSortedSet(SortedSet<E> set) { 920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(set); 921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ss = set; 922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SynchronizedSortedSet(SortedSet<E> set, Object mutex) { 925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(set, mutex); 926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ss = set; 927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Comparator<? super E> comparator() { 930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ss.comparator(); 932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E first() { 936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ss.first(); 938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedSet<E> headSet(E end) { 942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedSortedSet<E>(ss.headSet(end), mutex); 944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E last() { 948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ss.last(); 950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedSet<E> subSet(E start, E end) { 954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedSortedSet<E>(ss.subSet(start, end), 956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mutex); 957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedSet<E> tailSet(E start) { 961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedSortedSet<E>(ss.tailSet(start), mutex); 963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private void writeObject(ObjectOutputStream stream) throws IOException { 967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project synchronized (mutex) { 968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project stream.defaultWriteObject(); 969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class UnmodifiableCollection<E> implements Collection<E>, 974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Serializable { 975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 1820017752578914078L; 976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Collection<E> c; 978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UnmodifiableCollection(Collection<E> collection) { 980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c = collection; 981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean add(E object) { 984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean addAll(Collection<? extends E> collection) { 988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void clear() { 992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object object) { 996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.contains(object); 997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsAll(Collection<?> collection) { 1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.containsAll(collection); 1001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isEmpty() { 1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.isEmpty(); 1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator<E> iterator() { 1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new Iterator<E>() { 1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<E> iterator = c.iterator(); 1010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return iterator.hasNext(); 1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E next() { 1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return iterator.next(); 1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 1020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean remove(Object object) { 1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean removeAll(Collection<?> collection) { 1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean retainAll(Collection<?> collection) { 1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.size(); 1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object[] toArray() { 1042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.toArray(); 1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public <T> T[] toArray(T[] array) { 1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.toArray(array); 1047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.toString(); 1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class UnmodifiableRandomAccessList<E> extends 1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UnmodifiableList<E> implements RandomAccess { 1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = -2542308836966382001L; 1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UnmodifiableRandomAccessList(List<E> l) { 1060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(l); 1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public List<E> subList(int start, int end) { 1065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableRandomAccessList<E>(list.subList(start, end)); 1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Replaces this UnmodifiableRandomAccessList with an UnmodifiableList 1070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * so that JREs before 1.4 can deserialize this object without any 1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * problems. This is necessary since RandomAccess API was introduced 1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * only in 1.4. 1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 10743819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return UnmodifiableList 10763819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see UnmodifiableList#readResolve() 1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Object writeReplace() { 1080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableList<E>(list); 1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class UnmodifiableList<E> extends UnmodifiableCollection<E> 1085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements List<E> { 1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = -283967356065247728L; 1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final List<E> list; 1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UnmodifiableList(List<E> l) { 1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(l); 1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project list = l; 1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void add(int location, E object) { 1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean addAll(int location, Collection<? extends E> collection) { 1100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object object) { 1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.equals(object); 1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E get(int location) { 1109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.get(location); 1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 1114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.hashCode(); 1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int indexOf(Object object) { 1118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.indexOf(object); 1119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int lastIndexOf(Object object) { 1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list.lastIndexOf(object); 1123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public ListIterator<E> listIterator() { 1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return listIterator(0); 1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public ListIterator<E> listIterator(final int location) { 1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new ListIterator<E>() { 1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ListIterator<E> iterator = list.listIterator(location); 1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void add(E object) { 1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return iterator.hasNext(); 1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasPrevious() { 1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return iterator.hasPrevious(); 1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E next() { 1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return iterator.next(); 1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int nextIndex() { 1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return iterator.nextIndex(); 1151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E previous() { 1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return iterator.previous(); 1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int previousIndex() { 1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return iterator.previousIndex(); 1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void set(E object) { 1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 1169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E remove(int location) { 1172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E set(int location, E object) { 1176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public List<E> subList(int start, int end) { 1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableList<E>(list.subList(start, end)); 1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Resolves UnmodifiableList instances to UnmodifiableRandomAccessList 1185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * instances if the underlying list is a Random Access list. 1186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 1187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is necessary since UnmodifiableRandomAccessList instances are 1188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * replaced with UnmodifiableList instances during serialization for 1189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * compliance with JREs before 1.4. 1190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 11913819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return an UnmodifiableList instance if the underlying list 1193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * implements RandomAccess interface, or this same object if 1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * not. 11953819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see UnmodifiableRandomAccessList#writeReplace() 1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Object readResolve() { 1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (list instanceof RandomAccess) { 1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableRandomAccessList<E>(list); 1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return this; 1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class UnmodifiableMap<K, V> implements Map<K, V>, 1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Serializable { 1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = -1034234728574286014L; 1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final Map<K, V> m; 1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class UnmodifiableEntrySet<K, V> extends 1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UnmodifiableSet<Map.Entry<K, V>> { 1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 7854390611657943733L; 1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class UnmodifiableMapEntry<K, V> implements 1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> { 1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> mapEntry; 1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UnmodifiableMapEntry(Map.Entry<K, V> entry) { 1221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mapEntry = entry; 1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object object) { 1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return mapEntry.equals(object); 1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public K getKey() { 1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return mapEntry.getKey(); 1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V getValue() { 1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return mapEntry.getValue(); 1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return mapEntry.hashCode(); 1240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V setValue(V object) { 1243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return mapEntry.toString(); 1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UnmodifiableEntrySet(Set<Map.Entry<K, V>> set) { 1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(set); 1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator<Map.Entry<K, V>> iterator() { 1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new Iterator<Map.Entry<K, V>>() { 1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> iterator = c.iterator(); 1260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 1262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return iterator.hasNext(); 1263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Map.Entry<K, V> next() { 1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableMapEntry<K, V>(iterator.next()); 1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object[] toArray() { 1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int length = c.size(); 1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object[] result = new Object[length]; 1279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<?> it = iterator(); 1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = length; --i >= 0;) { 1281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result[i] = it.next(); 1282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public <T> T[] toArray(T[] contents) { 1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int size = c.size(), index = 0; 1290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> it = iterator(); 1291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (size > contents.length) { 1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<?> ct = contents.getClass().getComponentType(); 129372e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson contents = (T[]) java.lang.reflect.Array.newInstance(ct, size); 1294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (index < size) { 1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project contents[index++] = (T) it.next(); 1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index < contents.length) { 1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project contents[index] = null; 1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return contents; 1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UnmodifiableMap(Map<K, V> map) { 1306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project m = map; 1307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void clear() { 1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsKey(Object key) { 1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.containsKey(key); 1315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsValue(Object value) { 1318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.containsValue(value); 1319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set<Map.Entry<K, V>> entrySet() { 1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableEntrySet<K, V>(m.entrySet()); 1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object object) { 1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.equals(object); 1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V get(Object key) { 1331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.get(key); 1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.hashCode(); 1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isEmpty() { 1340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.isEmpty(); 1341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set<K> keySet() { 1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableSet<K>(m.keySet()); 1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V put(K key, V value) { 1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void putAll(Map<? extends K, ? extends V> map) { 1352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V remove(Object key) { 1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.size(); 1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Collection<V> values() { 1364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableCollection<V>(m.values()); 1365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.toString(); 1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class UnmodifiableSet<E> extends UnmodifiableCollection<E> 1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements Set<E> { 1375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = -9215047833775013803L; 1376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UnmodifiableSet(Set<E> set) { 1378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(set); 1379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object object) { 1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.equals(object); 1384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 1387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 1388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.hashCode(); 1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class UnmodifiableSortedMap<K, V> extends 1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UnmodifiableMap<K, V> implements SortedMap<K, V> { 1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = -8806743815996713206L; 1395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final SortedMap<K, V> sm; 1397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UnmodifiableSortedMap(SortedMap<K, V> map) { 1399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(map); 1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sm = map; 1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Comparator<? super K> comparator() { 1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return sm.comparator(); 1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public K firstKey() { 1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return sm.firstKey(); 1409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedMap<K, V> headMap(K before) { 1412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableSortedMap<K, V>(sm.headMap(before)); 1413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public K lastKey() { 1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return sm.lastKey(); 1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedMap<K, V> subMap(K start, K end) { 1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableSortedMap<K, V>(sm.subMap(start, end)); 1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedMap<K, V> tailMap(K after) { 1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableSortedMap<K, V>(sm.tailMap(after)); 1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class UnmodifiableSortedSet<E> extends UnmodifiableSet<E> 1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements SortedSet<E> { 1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = -4929149591599911165L; 1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final SortedSet<E> ss; 1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UnmodifiableSortedSet(SortedSet<E> set) { 1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(set); 1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ss = set; 1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Comparator<? super E> comparator() { 1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ss.comparator(); 1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E first() { 1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ss.first(); 1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedSet<E> headSet(E before) { 1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableSortedSet<E>(ss.headSet(before)); 1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E last() { 1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ss.last(); 1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedSet<E> subSet(E start, E end) { 1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableSortedSet<E>(ss.subSet(start, end)); 1457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedSet<E> tailSet(E after) { 1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableSortedSet<E>(ss.tailSet(after)); 1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Collections() { 1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* empty */ 1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Performs a binary search for the specified element in the specified 14703819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * sorted list. The list needs to be already sorted in natural sorting 1471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * order. Searching in an unsorted array has an undefined result. It's also 1472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * undefined which element is found if there are multiple occurrences of the 1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * same element. 14743819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 14763819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the sorted list to search. 1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the element to find. 1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the non-negative index of the element, or a negative index which 1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is the {@code -index - 1} where the element would be inserted 1481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ClassCastException 1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if an element in the List or the search element does not 1483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * implement Comparable, or cannot be compared to each other. 1484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> int binarySearch( 1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<? extends Comparable<? super T>> list, T object) { 1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (list == null) { 1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (list.isEmpty()) { 1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 14953819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson 1496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!(list instanceof RandomAccess)) { 14973819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson ListIterator<? extends Comparable<? super T>> it = list.listIterator(); 1498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int result; 15003819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if ((result = -it.next().compareTo(object)) <= 0) { 1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (result == 0) { 1502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return it.previousIndex(); 1503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -it.previousIndex() - 1; 1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -list.size() - 1; 1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int low = 0, mid = list.size(), high = mid - 1, result = -1; 1511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (low <= high) { 1512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mid = (low + high) >> 1; 15133819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if ((result = -list.get(mid).compareTo(object)) > 0) { 1514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project low = mid + 1; 1515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (result == 0) { 1516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return mid; 1517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project high = mid - 1; 1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -mid - (result < 0 ? 1 : 2); 1522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 1525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Performs a binary search for the specified element in the specified 15263819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * sorted list using the specified comparator. The list needs to be already 1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * sorted according to the comparator passed. Searching in an unsorted array 1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * has an undefined result. It's also undefined which element is found if 1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * there are multiple occurrences of the same element. 15303819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 1532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the sorted List to search. 1533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 1534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the element to find. 1535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param comparator 15363819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the comparator. If the comparator is {@code null} then the 1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * search uses the objects' natural ordering. 1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the non-negative index of the element, or a negative index which 1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is the {@code -index - 1} where the element would be inserted. 1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ClassCastException 1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when an element in the list and the searched element cannot 15423819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * be compared to each other using the comparator. 1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 15453819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson // BEGIN android-note 15463819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson // removed "@param <T> The element type", which is rejected by apicheck 15473819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson // END android-note 1548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> int binarySearch(List<? extends T> list, T object, 1549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Comparator<? super T> comparator) { 1550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (comparator == null) { 1551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return Collections.binarySearch( 1552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project (List<? extends Comparable<? super T>>) list, object); 1553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!(list instanceof RandomAccess)) { 1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ListIterator<? extends T> it = list.listIterator(); 1556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 1557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int result; 15583819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if ((result = -comparator.compare(it.next(), object)) <= 0) { 1559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (result == 0) { 1560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return it.previousIndex(); 1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -it.previousIndex() - 1; 1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -list.size() - 1; 1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int low = 0, mid = list.size(), high = mid - 1, result = -1; 1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (low <= high) { 1570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project mid = (low + high) >> 1; 15713819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if ((result = -comparator.compare(list.get(mid),object)) > 0) { 1572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project low = mid + 1; 1573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if (result == 0) { 1574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return mid; 1575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 1576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project high = mid - 1; 1577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -mid - (result < 0 ? 1 : 2); 1580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 1583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copies the elements from the source list to the destination list. At the 1584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * end both lists will have the same objects at the same index. If the 1585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * destination array is larger than the source list, the elements in the 1586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * destination list with {@code index >= source.size()} will be unchanged. 15873819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param destination 1589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the list whose elements are set from the source list. 1590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param source 1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the list with the elements to be copied into the destination. 1592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IndexOutOfBoundsException 15933819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * when the destination list is smaller than the source list. 1594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 1595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when replacing an element in the destination list is not 1596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * supported. 1597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> void copy(List<? super T> destination, 1599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<? extends T> source) { 1600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (destination.size() < source.size()) { 160109133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson // K0032=Source size {0} does not fit into destination 160209133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson throw new ArrayIndexOutOfBoundsException(Msg.getString("K0032", source.size())); //$NON-NLS-1$ 1603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<? extends T> srcIt = source.iterator(); 1605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ListIterator<? super T> destIt = destination.listIterator(); 1606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (srcIt.hasNext()) { 1607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project destIt.next(); 1609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (NoSuchElementException e) { 161009133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson // K0032=Source size {0} does not fit into destination 161109133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson throw new ArrayIndexOutOfBoundsException(Msg.getString("K0032", source.size())); //$NON-NLS-1$ 1612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project destIt.set(srcIt.next()); 1614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 1618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns an {@code Enumeration} on the specified collection. 16193819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param collection 1621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the collection to enumerate. 1622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return an Enumeration. 1623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> Enumeration<T> enumeration(Collection<T> collection) { 1625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final Collection<T> c = collection; 1626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new Enumeration<T>() { 1627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<T> it = c.iterator(); 1628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasMoreElements() { 1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return it.hasNext(); 1631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public T nextElement() { 1634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return it.next(); 1635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 1637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 16403819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Fills the specified list with the specified element. 16413819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 16433819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the list to fill. 1644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 1645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the element to fill the list with. 1646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 1647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when replacing an element in the List is not supported. 1648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> void fill(List<? super T> list, T object) { 1650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ListIterator<? super T> it = list.listIterator(); 1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 1652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.next(); 1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.set(object); 1654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 16583819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Searches the specified collection for the maximum element. 16593819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param collection 16613819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the collection to search. 1662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the maximum element in the Collection. 1663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ClassCastException 16643819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * when an element in the collection does not implement 1665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Comparable} or elements cannot be compared to each 1666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * other. 1667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T extends Object & Comparable<? super T>> T max( 1669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Collection<? extends T> collection) { 1670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<? extends T> it = collection.iterator(); 1671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project T max = it.next(); 1672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 1673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project T next = it.next(); 1674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (max.compareTo(next) < 0) { 1675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project max = next; 1676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return max; 1679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 16823819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Searches the specified collection for the maximum element using the 16833819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * specified comparator. 16843819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param collection 16863819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the collection to search. 1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param comparator 16883819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the comparator. 1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the maximum element in the Collection. 1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ClassCastException 16913819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * when elements in the collection cannot be compared to each 1692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * other using the {@code Comparator}. 1693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> T max(Collection<? extends T> collection, 1695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Comparator<? super T> comparator) { 169672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson if (comparator == null) { 169772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson @SuppressWarnings("unchecked") // null comparator? T is comparable 169872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson T result = (T) max((Collection<Comparable>) collection); 169972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson return result; 170072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 170172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 1702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<? extends T> it = collection.iterator(); 1703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project T max = it.next(); 1704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 1705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project T next = it.next(); 1706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (comparator.compare(max, next) < 0) { 1707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project max = next; 1708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return max; 1711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 17143819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Searches the specified collection for the minimum element. 17153819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param collection 17173819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the collection to search. 17183819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return the minimum element in the collection. 1719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ClassCastException 17203819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * when an element in the collection does not implement 1721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Comparable} or elements cannot be compared to each 1722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * other. 1723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T extends Object & Comparable<? super T>> T min( 1725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Collection<? extends T> collection) { 1726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<? extends T> it = collection.iterator(); 1727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project T min = it.next(); 1728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 1729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project T next = it.next(); 1730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (min.compareTo(next) > 0) { 1731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project min = next; 1732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return min; 1735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 17383819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Searches the specified collection for the minimum element using the 17393819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * specified comparator. 17403819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param collection 17423819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the collection to search. 1743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param comparator 17443819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the comparator. 17453819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return the minimum element in the collection. 1746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ClassCastException 17473819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * when elements in the collection cannot be compared to each 1748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * other using the {@code Comparator}. 1749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> T min(Collection<? extends T> collection, 1751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Comparator<? super T> comparator) { 175272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson if (comparator == null) { 175372e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson @SuppressWarnings("unchecked") // null comparator? T is comparable 175472e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson T result = (T) min((Collection<Comparable>) collection); 175572e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson return result; 175672e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 175772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson 1758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<? extends T> it = collection.iterator(); 1759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project T min = it.next(); 1760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 1761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project T next = it.next(); 1762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (comparator.compare(min, next) > 0) { 1763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project min = next; 1764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return min; 1767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 17703819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a list containing the specified number of the specified element. 1771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The list cannot be modified. The list is serializable. 17723819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param length 1774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the size of the returned list. 1775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 1776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the element to be added {@code length} times to a list. 17773819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return a list containing {@code length} copies of the element. 1778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 1779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when {@code length < 0}. 1780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> List<T> nCopies(final int length, T object) { 1782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CopiesList<T>(length, object); 1783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 1786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Modifies the specified {@code List} by reversing the order of the 1787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * elements. 17883819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 17903819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the list to reverse. 1791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 1792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when replacing an element in the List is not supported. 1793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 1795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static void reverse(List<?> list) { 1796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int size = list.size(); 1797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ListIterator<Object> front = (ListIterator<Object>) list.listIterator(); 1798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ListIterator<Object> back = (ListIterator<Object>) list 1799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .listIterator(size); 1800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < size / 2; i++) { 1801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object frontNext = front.next(); 1802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object backPrev = back.previous(); 1803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project front.set(backPrev); 1804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project back.set(frontNext); 1805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 18093819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * A comparator which reverses the natural order of the elements. The 1810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Comparator} that's returned is {@link Serializable}. 18113819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a {@code Comparator} instance. 1813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see Comparator 1814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see Comparable 1815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see Serializable 1816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 181772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson @SuppressWarnings("unchecked") 1818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> Comparator<T> reverseOrder() { 181972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson return (Comparator) ReverseComparator.INSTANCE; 1820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 1823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a {@link Comparator} that reverses the order of the 1824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Comparator} passed. If the {@code Comparator} passed is 1825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code null}, then this method is equivalent to {@link #reverseOrder()}. 1826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 1827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The {@code Comparator} that's returned is {@link Serializable} if the 1828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Comparator} passed is serializable or {@code null}. 18293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param c 1831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the {@code Comparator} to reverse or {@code null}. 1832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a {@code Comparator} instance. 1833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see Comparator 18343819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @since 1.5 1835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> Comparator<T> reverseOrder(Comparator<T> c) { 1837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (c == null) { 1838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return reverseOrder(); 1839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 184072e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson if (c instanceof ReverseComparatorWithComparator) { 184172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson return ((ReverseComparatorWithComparator<T>) c).comparator; 184272e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson } 1843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new ReverseComparatorWithComparator<T>(c); 1844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 18473819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Moves every element of the list to a random new position in the list. 18483819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 1850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the List to shuffle. 18513819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 1853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when replacing an element in the List is not supported. 1854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static void shuffle(List<?> list) { 1856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project shuffle(list, new Random()); 1857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 18603819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Moves every element of the list to a random new position in the list 1861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * using the specified random number generator. 18623819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 18643819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the list to shuffle. 1865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param random 1866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the random number generator. 1867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 18683819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * when replacing an element in the list is not supported. 1869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static void shuffle(List<?> list, Random random) { 187109133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson @SuppressWarnings("unchecked") // we won't put foreign objects in 187209133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson final List<Object> objectList = (List<Object>) list; 187309133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson 187409133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson if (list instanceof RandomAccess) { 187509133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson for (int i = objectList.size() - 1; i > 0; i--) { 187609133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson int index = random.nextInt(i + 1); 187709133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson objectList.set(index, objectList.set(i, objectList.get(index))); 187809133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson } 187909133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson } else { 188009133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson Object[] array = objectList.toArray(); 1881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = array.length - 1; i > 0; i--) { 18823819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson int index = random.nextInt(i + 1); 1883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object temp = array[i]; 1884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project array[i] = array[index]; 1885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project array[index] = temp; 1886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int i = 0; 188909133811f94298bf72a3bf6ee605f60e7b1b2c81Jesse Wilson ListIterator<Object> it = objectList.listIterator(); 1890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 1891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.next(); 1892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.set(array[i++]); 1893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 18983819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a set containing the specified element. The set cannot be 1899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * modified. The set is serializable. 19003819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 1902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the element. 19033819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return a set containing the element. 1904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <E> Set<E> singleton(E object) { 1906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SingletonSet<E>(object); 1907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 19103819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a list containing the specified element. The list cannot be 1911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * modified. The list is serializable. 19123819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param object 1914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the element. 19153819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return a list containing the element. 1916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <E> List<E> singletonList(E object) { 1918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SingletonList<E>(object); 1919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 1922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a Map containing the specified key and value. The map cannot be 1923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * modified. The map is serializable. 19243819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param key 1926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the key. 1927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param value 1928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the value. 1929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a Map containing the key and value. 1930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <K, V> Map<K, V> singletonMap(K key, V value) { 1932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SingletonMap<K, V>(key, value); 1933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 19363819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Sorts the specified list in ascending natural order. The algorithm is 1937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * stable which means equal elements don't get reordered. 19383819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 19403819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the list to be sorted. 1941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ClassCastException 1942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when an element in the List does not implement Comparable or 1943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * elements cannot be compared to each other. 1944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 1946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T extends Comparable<? super T>> void sort(List<T> list) { 1947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object[] array = list.toArray(); 1948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Arrays.sort(array); 1949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int i = 0; 1950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ListIterator<T> it = list.listIterator(); 1951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 1952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.next(); 1953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.set((T) array[i++]); 1954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 19583819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Sorts the specified list using the specified comparator. The algorithm is 1959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * stable which means equal elements don't get reordered. 19603819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 19623819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the list to be sorted. 1963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param comparator 19643819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the comparator. 1965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws ClassCastException 19663819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * when elements in the list cannot be compared to each other 19673819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * using the comparator. 1968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 1970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> void sort(List<T> list, Comparator<? super T> comparator) { 1971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project T[] array = list.toArray((T[]) new Object[list.size()]); 1972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Arrays.sort(array, comparator); 1973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int i = 0; 1974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ListIterator<T> it = list.listIterator(); 1975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 1976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.next(); 1977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project it.set(array[i++]); 1978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 1980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 1981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 19823819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Swaps the elements of list {@code list} at indices {@code index1} and 1983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code index2}. 19843819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 19863819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the list to manipulate. 1987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index1 1988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * position of the first element to swap with the element in 1989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * index2. 1990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param index2 1991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * position of the other element. 19923819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 1993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IndexOutOfBoundsException 1994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if index1 or index2 is out of range of this list. 19953819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @since 1.4 1996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 1997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 1998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static void swap(List<?> list, int index1, int index2) { 1999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (list == null) { 2000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 20023819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson final int size = list.size(); 20033819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson if (index1 < 0 || index1 >= size || index2 < 0 || index2 >= size) { 20043819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson throw new IndexOutOfBoundsException(); 20053819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson } 2006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index1 == index2) { 2007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 2008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<Object> rawList = (List<Object>) list; 2010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project rawList.set(index2, rawList.set(index1, rawList.get(index2))); 2011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Replaces all occurrences of Object {@code obj} in {@code list} with 2015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code newObj}. If the {@code obj} is {@code null}, then all 2016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * occurrences of {@code null} are replaced with {@code newObj}. 20173819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 20193819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the list to modify. 2020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param obj 20213819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the object to find and replace occurrences of. 2022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param obj2 20233819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the object to replace all occurrences of {@code obj} in 2024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code list}. 2025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return true, if at least one occurrence of {@code obj} has been found in 2026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code list}. 2027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 2028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the list does not support setting elements. 2029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> boolean replaceAll(List<T> list, T obj, T obj2) { 2031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int index; 2032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean found = false; 2033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while ((index = list.indexOf(obj)) > -1) { 2035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project found = true; 2036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project list.set(index, obj2); 2037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return found; 2039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 20423819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Rotates the elements in {@code list} by the distance {@code dist} 2043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 2044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * e.g. for a given list with elements [1, 2, 3, 4, 5, 6, 7, 8, 9, 0], 2045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * calling rotate(list, 3) or rotate(list, -7) would modify the list to look 2046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * like this: [8, 9, 0, 1, 2, 3, 4, 5, 6, 7] 20473819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param lst 2049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the list whose elements are to be rotated. 2050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param dist 2051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is the distance the list is rotated. This can be any valid 2052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * integer. Negative values rotate the list backwards. 2053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 2055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static void rotate(List<?> lst, int dist) { 2056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<Object> list = (List<Object>) lst; 2057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int size = list.size(); 2058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Can't sensibly rotate an empty collection 2060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (size == 0) { 2061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 2062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // normalize the distance 2065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int normdist; 2066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (dist > 0) { 2067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project normdist = dist % size; 2068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 2069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project normdist = size - ((dist % size) * (-1)); 2070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (normdist == 0 || normdist == size) { 2073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 2074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (list instanceof RandomAccess) { 2077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // make sure each element gets juggled 2078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // with the element in the position it is supposed to go to 2079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object temp = list.get(0); 2080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int index = 0, beginIndex = 0; 2081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < size; i++) { 2082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project index = (index + normdist) % size; 2083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project temp = list.set(index, temp); 2084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index == beginIndex) { 2085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project index = ++beginIndex; 2086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project temp = list.get(beginIndex); 2087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 2090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int divideIndex = (size - normdist) % size; 2091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<Object> sublist1 = list.subList(0, divideIndex); 2092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<Object> sublist2 = list.subList(divideIndex, size); 2093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reverse(sublist1); 2094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reverse(sublist2); 2095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project reverse(list); 2096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Searches the {@code list} for {@code sublist} and returns the beginning 2101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * index of the first occurrence. 2102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 2103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * -1 is returned if the {@code sublist} does not exist in {@code list}. 21043819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 2106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the List to search {@code sublist} in. 2107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param sublist 2108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the List to search in {@code list}. 2109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the beginning index of the first occurrence of {@code sublist} in 2110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code list}, or -1. 2111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static int indexOfSubList(List<?> list, List<?> sublist) { 2113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int size = list.size(); 2114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int sublistSize = sublist.size(); 2115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (sublistSize > size) { 2117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 2118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (sublistSize == 0) { 2121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 0; 2122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // find the first element of sublist in the list to get a head start 2125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object firstObj = sublist.get(0); 2126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int index = list.indexOf(firstObj); 2127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (index == -1) { 2128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 2129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (index < size && (size - index >= sublistSize)) { 2132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ListIterator<?> listIt = list.listIterator(index); 2133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((firstObj == null) ? listIt.next() == null : firstObj 2135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .equals(listIt.next())) { 2136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // iterate through the elements in sublist to see 2138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if they are included in the same order in the list 2139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ListIterator<?> sublistIt = sublist.listIterator(1); 2140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean difFound = false; 2141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (sublistIt.hasNext()) { 2142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object element = sublistIt.next(); 2143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!listIt.hasNext()) { 2144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 2145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((element == null) ? listIt.next() != null : !element 2147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .equals(listIt.next())) { 2148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project difFound = true; 2149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 2150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // All elements of sublist are found in main list 2153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // starting from index. 2154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!difFound) { 2155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return index; 2156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // This was not the sequence we were looking for, 2159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // continue search for the firstObj in main list 2160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // at the position after index. 2161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project index++; 2162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 2164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Searches the {@code list} for {@code sublist} and returns the beginning 2168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * index of the last occurrence. 2169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * <p> 2170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * -1 is returned if the {@code sublist} does not exist in {@code list}. 21713819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 21733819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the list to search {@code sublist} in. 2174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param sublist 21753819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the list to search in {@code list}. 2176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the beginning index of the last occurrence of {@code sublist} in 2177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code list}, or -1. 2178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static int lastIndexOfSubList(List<?> list, List<?> sublist) { 2180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int sublistSize = sublist.size(); 2181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int size = list.size(); 2182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (sublistSize > size) { 2184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 2185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (sublistSize == 0) { 2188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return size; 2189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // find the last element of sublist in the list to get a head start 2192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object lastObj = sublist.get(sublistSize - 1); 2193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int index = list.lastIndexOf(lastObj); 2194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while ((index > -1) && (index + 1 >= sublistSize)) { 2196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ListIterator<?> listIt = list.listIterator(index + 1); 2197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((lastObj == null) ? listIt.previous() == null : lastObj 2199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .equals(listIt.previous())) { 2200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // iterate through the elements in sublist to see 2201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // if they are included in the same order in the list 2202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ListIterator<?> sublistIt = sublist 2203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .listIterator(sublistSize - 1); 2204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean difFound = false; 2205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (sublistIt.hasPrevious()) { 2206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object element = sublistIt.previous(); 2207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!listIt.hasPrevious()) { 2208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 2209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((element == null) ? listIt.previous() != null 2211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project : !element.equals(listIt.previous())) { 2212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project difFound = true; 2213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project break; 2214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // All elements of sublist are found in main list 2217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // starting from listIt.nextIndex(). 2218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (!difFound) { 2219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return listIt.nextIndex(); 2220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // This was not the sequence we were looking for, 2223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // continue search for the lastObj in main list 2224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // at the position before index. 2225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project index--; 2226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return -1; 2228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 22313819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns an {@code ArrayList} with all the elements in the {@code 22323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * enumeration}. The elements in the returned {@code ArrayList} are in the 2233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * same order as in the {@code enumeration}. 22343819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param enumeration 2236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the source {@link Enumeration}. 2237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return an {@code ArrayList} from {@code enumeration}. 2238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> ArrayList<T> list(Enumeration<T> enumeration) { 2240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project ArrayList<T> list = new ArrayList<T>(); 2241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (enumeration.hasMoreElements()) { 2242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project list.add(enumeration.nextElement()); 2243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return list; 2245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 22483819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a wrapper on the specified collection which synchronizes all 22493819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * access to the collection. 22503819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param collection 2252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the Collection to wrap in a synchronized collection. 2253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a synchronized Collection. 2254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> Collection<T> synchronizedCollection( 2256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Collection<T> collection) { 2257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (collection == null) { 2258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedCollection<T>(collection); 2261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a wrapper on the specified List which synchronizes all access to 2265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the List. 22663819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 2268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the List to wrap in a synchronized list. 2269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a synchronized List. 2270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> List<T> synchronizedList(List<T> list) { 2272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (list == null) { 2273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (list instanceof RandomAccess) { 2276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedRandomAccessList<T>(list); 2277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedList<T>(list); 2279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 22823819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a wrapper on the specified map which synchronizes all access to 22833819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the map. 22843819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param map 22863819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the map to wrap in a synchronized map. 2287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a synchronized Map. 2288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <K, V> Map<K, V> synchronizedMap(Map<K, V> map) { 2290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (map == null) { 2291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedMap<K, V>(map); 2294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 22973819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a wrapper on the specified set which synchronizes all access to 22983819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the set. 22993819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param set 23013819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the set to wrap in a synchronized set. 23023819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return a synchronized set. 2303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <E> Set<E> synchronizedSet(Set<E> set) { 2305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (set == null) { 2306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedSet<E>(set); 2309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 23123819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a wrapper on the specified sorted map which synchronizes all 23133819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * access to the sorted map. 23143819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param map 23163819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the sorted map to wrap in a synchronized sorted map. 23173819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return a synchronized sorted map. 2318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <K, V> SortedMap<K, V> synchronizedSortedMap( 2320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SortedMap<K, V> map) { 2321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (map == null) { 2322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedSortedMap<K, V>(map); 2325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 23283819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a wrapper on the specified sorted set which synchronizes all 23293819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * access to the sorted set. 23303819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param set 23323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the sorted set to wrap in a synchronized sorted set. 23333819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return a synchronized sorted set. 2334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <E> SortedSet<E> synchronizedSortedSet(SortedSet<E> set) { 2336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (set == null) { 2337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new SynchronizedSortedSet<E>(set); 2340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 23433819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a wrapper on the specified collection which throws an 2344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code UnsupportedOperationException} whenever an attempt is made to 23453819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * modify the collection. 23463819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param collection 23483819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the collection to wrap in an unmodifiable collection. 23493819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return an unmodifiable collection. 2350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 2352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <E> Collection<E> unmodifiableCollection( 2353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Collection<? extends E> collection) { 2354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (collection == null) { 2355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableCollection<E>((Collection<E>) collection); 2358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 23613819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a wrapper on the specified list which throws an 2362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code UnsupportedOperationException} whenever an attempt is made to 23633819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * modify the list. 23643819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 23663819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the list to wrap in an unmodifiable list. 2367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return an unmodifiable List. 2368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 2370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <E> List<E> unmodifiableList(List<? extends E> list) { 2371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (list == null) { 2372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (list instanceof RandomAccess) { 2375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableRandomAccessList<E>((List<E>) list); 2376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableList<E>((List<E>) list); 2378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 23813819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a wrapper on the specified map which throws an 2382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code UnsupportedOperationException} whenever an attempt is made to 23833819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * modify the map. 23843819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param map 23863819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the map to wrap in an unmodifiable map. 23873819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return a unmodifiable map. 2388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 2390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <K, V> Map<K, V> unmodifiableMap( 2391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map<? extends K, ? extends V> map) { 2392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (map == null) { 2393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableMap<K, V>((Map<K, V>) map); 2396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 23993819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a wrapper on the specified set which throws an 2400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code UnsupportedOperationException} whenever an attempt is made to 24013819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * modify the set. 24023819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param set 24043819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the set to wrap in an unmodifiable set. 24053819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return a unmodifiable set 2406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 2408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <E> Set<E> unmodifiableSet(Set<? extends E> set) { 2409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (set == null) { 2410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableSet<E>((Set<E>) set); 2413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 24163819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a wrapper on the specified sorted map which throws an 2417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code UnsupportedOperationException} whenever an attempt is made to 24183819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * modify the sorted map. 24193819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param map 24213819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the sorted map to wrap in an unmodifiable sorted map. 24223819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return a unmodifiable sorted map 2423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 2425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <K, V> SortedMap<K, V> unmodifiableSortedMap( 2426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SortedMap<K, ? extends V> map) { 2427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (map == null) { 2428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableSortedMap<K, V>((SortedMap<K, V>) map); 2431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 24343819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * Returns a wrapper on the specified sorted set which throws an 2435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code UnsupportedOperationException} whenever an attempt is made to 24363819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * modify the sorted set. 24373819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param set 24393819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the sorted set to wrap in an unmodifiable sorted set. 24403819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @return a unmodifiable sorted set. 2441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <E> SortedSet<E> unmodifiableSortedSet(SortedSet<E> set) { 2443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (set == null) { 2444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new UnmodifiableSortedSet<E>(set); 2447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns the number of elements in the {@code Collection} that match the 2451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code Object} passed. If the {@code Object} is {@code null}, then the 2452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * number of {@code null} elements is returned. 24533819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param c 2455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the {@code Collection} to search. 2456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param o 2457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the {@code Object} to search for. 2458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return the number of matching elements. 2459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws NullPointerException 2460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if the {@code Collection} parameter is {@code null}. 24613819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @since 1.5 2462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static int frequency(Collection<?> c, Object o) { 2464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (c == null) { 2465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (c.isEmpty()) { 2468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return 0; 2469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int result = 0; 2471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<?> itr = c.iterator(); 2472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (itr.hasNext()) { 2473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object e = itr.next(); 2474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (o == null ? e == null : o.equals(e)) { 2475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result++; 2476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return result; 2479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a type-safe empty, immutable {@link List}. 24833819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return an empty {@link List}. 24853819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @since 1.5 2486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #EMPTY_LIST 2487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 2489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final <T> List<T> emptyList() { 2490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return EMPTY_LIST; 2491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a type-safe empty, immutable {@link Set}. 24953819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return an empty {@link Set}. 24973819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @since 1.5 2498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #EMPTY_SET 2499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 2501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final <T> Set<T> emptySet() { 2502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return EMPTY_SET; 2503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a type-safe empty, immutable {@link Map}. 25073819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return an empty {@link Map}. 25093819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @since 1.5 2510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see #EMPTY_MAP 2511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 2513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static final <K, V> Map<K, V> emptyMap() { 2514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return EMPTY_MAP; 2515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a dynamically typesafe view of the specified collection. Trying 2519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to insert an element of the wrong type into this collection throws a 2520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code ClassCastException}. At creation time the types in {@code c} are 2521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * not checked for correct type. 25223819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param c 2524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the collection to be wrapped in a typesafe collection. 2525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param type 2526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the type of the elements permitted to insert. 2527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a typesafe collection. 2528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <E> Collection<E> checkedCollection(Collection<E> c, 2530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<E> type) { 2531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedCollection<E>(c, type); 2532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a dynamically typesafe view of the specified map. Trying to 2536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * insert an element of the wrong type into this map throws a 2537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code ClassCastException}. At creation time the types in {@code m} are 2538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * not checked for correct type. 25393819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param m 2541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the map to be wrapped in a typesafe map. 2542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param keyType 2543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the type of the keys permitted to insert. 2544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param valueType 2545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the type of the values permitted to insert. 2546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a typesafe map. 2547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <K, V> Map<K, V> checkedMap(Map<K, V> m, Class<K> keyType, 2549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<V> valueType) { 2550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedMap<K, V>(m, keyType, valueType); 2551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a dynamically typesafe view of the specified list. Trying to 2555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * insert an element of the wrong type into this list throws a 2556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code ClassCastException}. At creation time the types in {@code list} 2557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * are not checked for correct type. 25583819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param list 2560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the list to be wrapped in a typesafe list. 2561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param type 2562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the type of the elements permitted to insert. 2563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a typesafe list. 2564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <E> List<E> checkedList(List<E> list, Class<E> type) { 2566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (list instanceof RandomAccess) { 2567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedRandomAccessList<E>(list, type); 2568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedList<E>(list, type); 2570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a dynamically typesafe view of the specified set. Trying to 2574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * insert an element of the wrong type into this set throws a 2575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code ClassCastException}. At creation time the types in {@code s} are 2576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * not checked for correct type. 25773819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param s 2579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the set to be wrapped in a typesafe set. 2580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param type 2581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the type of the elements permitted to insert. 2582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a typesafe set. 2583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <E> Set<E> checkedSet(Set<E> s, Class<E> type) { 2585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedSet<E>(s, type); 2586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a dynamically typesafe view of the specified sorted map. Trying 2590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to insert an element of the wrong type into this sorted map throws a 2591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code ClassCastException}. At creation time the types in {@code m} are 2592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * not checked for correct type. 25933819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param m 2595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the sorted map to be wrapped in a typesafe sorted map. 2596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param keyType 2597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the type of the keys permitted to insert. 2598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param valueType 2599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the type of the values permitted to insert. 2600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a typesafe sorted map. 2601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <K, V> SortedMap<K, V> checkedSortedMap(SortedMap<K, V> m, 2603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<K> keyType, Class<V> valueType) { 2604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedSortedMap<K, V>(m, keyType, valueType); 2605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns a dynamically typesafe view of the specified sorted set. Trying 2609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to insert an element of the wrong type into this sorted set throws a 2610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code ClassCastException}. At creation time the types in {@code s} are 2611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * not checked for correct type. 26123819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param s 2614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the sorted set to be wrapped in a typesafe sorted set. 2615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param type 2616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the type of the elements permitted to insert. 2617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return a typesafe sorted set. 2618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <E> SortedSet<E> checkedSortedSet(SortedSet<E> s, 2620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<E> type) { 2621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedSortedSet<E>(s, type); 2622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Adds all the specified elements to the specified collection. 26263819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param c 2628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the collection the elements are to be inserted into. 2629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param a 2630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the elements to insert. 2631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return true if the collection changed during insertion. 2632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws UnsupportedOperationException 2633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when the method is not supported. 2634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws NullPointerException 2635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * when {@code c} or {@code a} is {@code null}, or {@code a} 2636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contains one or more {@code null} elements and {@code c} 2637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * doesn't support {@code null} elements. 2638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws IllegalArgumentException 2639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if at least one of the elements can't be inserted into the 2640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * collection. 2641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static <T> boolean addAll(Collection<? super T> c, T... a) { 2643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean modified = false; 2644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < a.length; i++) { 2645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project modified |= c.add(a[i]); 2646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return modified; 2648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns whether the specified collections have no elements in common. 26523819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param c1 2654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the first collection. 2655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param c2 2656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the second collection. 2657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return {@code true} if the collections have no elements in common, 2658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * {@code false} otherwise. 2659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @throws NullPointerException 2660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * if one of the collections is {@code null}. 2661f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static boolean disjoint(Collection<?> c1, Collection<?> c2) { 2663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ((c1 instanceof Set) && !(c2 instanceof Set) 2664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project || (c2.size()) > c1.size()) { 2665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Collection<?> tmp = c1; 2666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c1 = c2; 2667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c2 = tmp; 2668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<?> it = c1.iterator(); 2670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project while (it.hasNext()) { 2671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (c2.contains(it.next())) { 2672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 2673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 2676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2678f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2679f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Checks if specified object is instance of specified class. Used for a 2680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * dynamically typesafe view of the collections. 26813819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param obj - 2683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * object is to be checked 2684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param type - 2685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * class of object that should be 2686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return specified object 2687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 268872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson static <E> E checkType(E obj, Class<? extends E> type) { 268972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson if (obj != null && !type.isInstance(obj)) { 2690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // luni.05=Attempt to insert {0} element into collection with 2691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // element type {1} 2692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new ClassCastException(Messages.getString( 2693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "luni.05", obj.getClass(), type)); //$NON-NLS-1$ 2694f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2695f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return obj; 2696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class represents a dynamically typesafe view of the specified collection. 2700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class CheckedCollection<E> implements Collection<E>, 2702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Serializable { 2703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 1578914078182001775L; 2705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Collection<E> c; 2707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<E> type; 2709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2710f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2711f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a dynamically typesafe view of the specified collection. 27123819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param c - 2714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the collection for which an unmodifiable view is to be 2715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * constructed. 2716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CheckedCollection(Collection<E> c, Class<E> type) { 2718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (c == null || type == null) { 2719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 2720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.c = c; 2722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.type = type; 2723f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#size() 2727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 2729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.size(); 2730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#isEmpty() 2734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isEmpty() { 2736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.isEmpty(); 2737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2739f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#contains(Object) 2741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object obj) { 2743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.contains(obj); 2744f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2745f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#iterator() 2748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator<E> iterator() { 2750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<E> i = c.iterator(); 2751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (i instanceof ListIterator) { 2752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project i = new CheckedListIterator<E>((ListIterator<E>) i, type); 2753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return i; 2755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#toArray() 2759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object[] toArray() { 2761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.toArray(); 2762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#toArray(Object[]) 2766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public <T> T[] toArray(T[] arr) { 2768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.toArray(arr); 2769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#add(Object) 2773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean add(E obj) { 2775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.add(checkType(obj, type)); 2776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#remove(Object) 2780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean remove(Object obj) { 2782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.remove(obj); 2783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#containsAll(Collection) 2787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsAll(Collection<?> c1) { 2789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.containsAll(c1); 2790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#addAll(Collection) 2794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 2796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean addAll(Collection<? extends E> c1) { 279772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson Object[] array = c1.toArray(); 279872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson for (Object o : array) { 279972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson checkType(o, type); 2800f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 280172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson return c.addAll((List<E>) Arrays.asList(array)); 2802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#removeAll(Collection) 2806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean removeAll(Collection<?> c1) { 2808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.removeAll(c1); 2809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#retainAll(Collection) 2813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean retainAll(Collection<?> c1) { 2815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.retainAll(c1); 2816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Collection#clear() 2820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void clear() { 2822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project c.clear(); 2823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2825f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2826f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.lang.Object#toString() 2827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 2829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 2830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.toString(); 2831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class represents a dynamically typesafe view of the specified 2836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * ListIterator. 2837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class CheckedListIterator<E> implements ListIterator<E> { 2839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private ListIterator<E> i; 2841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private Class<E> type; 2843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a dynamically typesafe view of the specified ListIterator. 28463819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param i - 2848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the listIterator for which a dynamically typesafe view to 2849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be constructed. 2850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CheckedListIterator(ListIterator<E> i, Class<E> type) { 2852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.i = i; 2853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.type = type; 2854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Iterator#hasNext() 2858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 2860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return i.hasNext(); 2861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Iterator#next() 2865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E next() { 2867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return i.next(); 2868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Iterator#remove() 2872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 2874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project i.remove(); 2875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.ListIterator#hasPrevious() 2879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasPrevious() { 2881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return i.hasPrevious(); 2882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.ListIterator#previous() 2886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2887f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E previous() { 2888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return i.previous(); 2889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.ListIterator#nextIndex() 2893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int nextIndex() { 2895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return i.nextIndex(); 2896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.ListIterator#previousIndex() 2900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int previousIndex() { 2902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return i.previousIndex(); 2903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.ListIterator#set(Object) 2907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2908f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void set(E obj) { 2909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project i.set(checkType(obj, type)); 2910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.ListIterator#add(Object) 2914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void add(E obj) { 2916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project i.add(checkType(obj, type)); 2917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class represents a dynamically typesafe view of the specified list. 2922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class CheckedList<E> extends CheckedCollection<E> implements 2924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<E> { 2925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 65247728283967356L; 2927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project List<E> l; 2929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a dynamically typesafe view of the specified list. 29323819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 2933f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param l - 2934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the list for which a dynamically typesafe view is to be 2935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * constructed. 2936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CheckedList(List<E> l, Class<E> type) { 2938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(l, type); 2939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.l = l; 2940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.List#addAll(int, Collection) 2944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 2946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean addAll(int index, Collection<? extends E> c1) { 294772e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson Object[] array = c1.toArray(); 294872e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson for (Object o : array) { 294972e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson checkType(o, type); 2950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 295172e7c5a8d32494c81206971d4c1077e3f2b88f00Jesse Wilson return l.addAll(index, (List<E>) Arrays.asList(array)); 2952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.List#get(int) 2956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2957f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E get(int index) { 2958f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return l.get(index); 2959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.List#set(int, Object) 2963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E set(int index, E obj) { 2965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return l.set(index, checkType(obj, type)); 2966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.List#add(int, Object) 2970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void add(int index, E obj) { 2972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project l.add(index, checkType(obj, type)); 2973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.List#remove(int) 2977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E remove(int index) { 2979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return l.remove(index); 2980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.List#indexOf(Object) 2984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int indexOf(Object obj) { 2986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return l.indexOf(obj); 2987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.List#lastIndexOf(Object) 2991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2992f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int lastIndexOf(Object obj) { 2993f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return l.lastIndexOf(obj); 2994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 2995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 2996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 2997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.List#listIterator() 2998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 2999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public ListIterator<E> listIterator() { 3000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedListIterator<E>(l.listIterator(), type); 3001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.List#listIterator(int) 3005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public ListIterator<E> listIterator(int index) { 3007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedListIterator<E>(l.listIterator(index), type); 3008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.List#subList(int, int) 3012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public List<E> subList(int fromIndex, int toIndex) { 3014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return checkedList(l.subList(fromIndex, toIndex), type); 3015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.List#equals(Object) 3019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3020f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 3021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object obj) { 3022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return l.equals(obj); 3023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.List#hashCode() 3027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 3029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 3030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return l.hashCode(); 3031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3032f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class represents a dynamically typesafe view of the specified 3036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * randomAccessList. 3037f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class CheckedRandomAccessList<E> extends CheckedList<E> 3039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements RandomAccess { 3040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 1638200125423088369L; 3042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a dynamically typesafe view of the specified 3045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * randomAccessList. 30463819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 3047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param l - 3048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the randomAccessList for which a dynamically typesafe view 3049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * is to be constructed. 3050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CheckedRandomAccessList(List<E> l, Class<E> type) { 3052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(l, type); 3053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class represents a dynamically typesafe view of the specified set. 3058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class CheckedSet<E> extends CheckedCollection<E> implements 3060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Set<E> { 3061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 4694047833775013803L; 3063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a dynamically typesafe view of the specified set. 30663819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 3067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param s - 3068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the set for which a dynamically typesafe view is to be 3069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * constructed. 3070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CheckedSet(Set<E> s, Class<E> type) { 3072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(s, type); 3073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#equals(Object) 3077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 3079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object obj) { 3080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.equals(obj); 3081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#hashCode() 3085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 3087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 3088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return c.hashCode(); 3089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class represents a dynamically typesafe view of the specified map. 3095f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class CheckedMap<K, V> implements Map<K, V>, Serializable { 3097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 5742860141034234728L; 3099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map<K, V> m; 3101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<K> keyType; 3103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<V> valueType; 3105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a dynamically typesafe view of the specified map. 31083819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 3109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param m - 3110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the map for which a dynamically typesafe view is to be 3111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * constructed. 3112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private CheckedMap(Map<K, V> m, Class<K> keyType, Class<V> valueType) { 3114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (m == null || keyType == null || valueType == null) { 3115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 3116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.m = m; 3118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.keyType = keyType; 3119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.valueType = valueType; 3120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#size() 3124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 3126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.size(); 3127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#isEmpty() 3131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isEmpty() { 3133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.isEmpty(); 3134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#containsKey(Object) 3138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsKey(Object key) { 3140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.containsKey(key); 3141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#containsValue(Object) 3145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsValue(Object value) { 3147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.containsValue(value); 3148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#get(Object) 3152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V get(Object key) { 3154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.get(key); 3155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#put(Object, Object) 3159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V put(K key, V value) { 3161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.put(checkType(key, keyType), checkType(value, valueType)); 3162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#remove(Object) 3166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V remove(Object key) { 3168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.remove(key); 3169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#putAll(Map) 3173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 3175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void putAll(Map<? extends K, ? extends V> map) { 3176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int size = map.size(); 3177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (size == 0) { 3178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return; 3179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<? extends K, ? extends V>[] entries = new Map.Entry[size]; 3181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<? extends Map.Entry<? extends K, ? extends V>> it = map 3182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project .entrySet().iterator(); 3183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < size; i++) { 3184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<? extends K, ? extends V> e = it.next(); 3185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project checkType(e.getKey(), keyType); 3186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project checkType(e.getValue(), valueType); 3187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project entries[i] = e; 3188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < size; i++) { 3190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project m.put(entries[i].getKey(), entries[i].getValue()); 3191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#clear() 3196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void clear() { 3198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project m.clear(); 3199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#keySet() 3203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set<K> keySet() { 3205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.keySet(); 3206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#values() 3210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Collection<V> values() { 3212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.values(); 3213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#entrySet() 3217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Set<Map.Entry<K, V>> entrySet() { 3219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedEntrySet<K, V>(m.entrySet(), valueType); 3220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#equals(Object) 3224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 3226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object obj) { 3227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.equals(obj); 3228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map#hashCode() 3232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 3234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 3235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.hashCode(); 3236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.lang.Object#toString() 3240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 3242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 3243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return m.toString(); 3244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class represents a dynamically typesafe view of the specified map 3248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * entry. 3249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class CheckedEntry<K, V> implements Map.Entry<K, V> { 3251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Map.Entry<K, V> e; 3253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<V> valueType; 3255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a dynamically typesafe view of the specified map 3258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * entry. 32593819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * 32603819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @param e 3261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the map entry for which a dynamically typesafe view is 3262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to be constructed. 32633819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * @param valueType 32643819a76e7c1f49253f0e077bd497f149340c02b8Jesse Wilson * the type of the value 3265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CheckedEntry(Map.Entry<K, V> e, Class<V> valueType) { 3267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (e == null) { 3268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new NullPointerException(); 3269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.e = e; 3271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.valueType = valueType; 3272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map.Entry#getKey() 3276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public K getKey() { 3278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return e.getKey(); 3279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map.Entry#getValue() 3283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V getValue() { 3285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return e.getValue(); 3286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map.Entry#setValue(Object) 3290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public V setValue(V obj) { 3292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return e.setValue(checkType(obj, valueType)); 3293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map.Entry#equals(Object) 3297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 3299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object obj) { 3300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return e.equals(obj); 3301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Map.Entry#hashCode() 3305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 3307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 3308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return e.hashCode(); 3309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class represents a dynamically typesafe view of the specified entry 3314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * set. 3315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class CheckedEntrySet<K, V> implements 3317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Set<Map.Entry<K, V>> { 3318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Set<Map.Entry<K, V>> s; 3320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<V> valueType; 3322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a dynamically typesafe view of the specified entry 3325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * set. 3326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param s - 3328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the entry set for which a dynamically typesafe view is 3329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to be constructed. 3330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CheckedEntrySet(Set<Map.Entry<K, V>> s, Class<V> valueType) { 3332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.s = s; 3333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.valueType = valueType; 3334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#iterator() 3338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Iterator<Map.Entry<K, V>> iterator() { 3340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedEntryIterator<K, V>(s.iterator(), valueType); 3341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#toArray() 3345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Object[] toArray() { 3347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int thisSize = size(); 3348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object[] array = new Object[thisSize]; 3349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<?> it = iterator(); 3350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < thisSize; i++) { 3351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project array[i] = it.next(); 3352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return array; 3354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#toArray(Object[]) 3358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @SuppressWarnings("unchecked") 3360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public <T> T[] toArray(T[] array) { 3361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int thisSize = size(); 3362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (array.length < thisSize) { 3363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<?> ct = array.getClass().getComponentType(); 3364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project array = (T[]) Array.newInstance(ct, thisSize); 3365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<?> it = iterator(); 3367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < thisSize; i++) { 3368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project array[i] = (T) it.next(); 3369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (thisSize < array.length) { 3371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project array[thisSize] = null; 3372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return array; 3374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#retainAll(Collection) 3378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean retainAll(Collection<?> c) { 3380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return s.retainAll(c); 3381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#removeAll(Collection) 3385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean removeAll(Collection<?> c) { 3387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return s.removeAll(c); 3388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#containsAll(Collection) 3392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean containsAll(Collection<?> c) { 3394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return s.containsAll(c); 3395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#addAll(Collection) 3399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean addAll(Collection<? extends Map.Entry<K, V>> c) { 3401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 3402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#remove(Object) 3406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean remove(Object o) { 3408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return s.remove(o); 3409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#contains(Object) 3413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean contains(Object o) { 3415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return s.contains(o); 3416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#add(Object) 3420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean add(Map.Entry<K, V> o) { 3422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project throw new UnsupportedOperationException(); 3423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#isEmpty() 3427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isEmpty() { 3429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return s.isEmpty(); 3430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#clear() 3434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void clear() { 3436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s.clear(); 3437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#size() 3441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int size() { 3443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return s.size(); 3444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#hashCode() 3448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 3450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int hashCode() { 3451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return s.hashCode(); 3452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Set#equals(Object) 3456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project @Override 3458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object object) { 3459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return s.equals(object); 3460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class represents a dynamically typesafe view of the specified 3464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * entry iterator. 3465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class CheckedEntryIterator<K, V> implements 3467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> { 3468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Iterator<Map.Entry<K, V>> i; 3470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<V> valueType; 3472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a dynamically typesafe view of the specified entry 3475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * iterator. 3476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param i - 3478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the entry iterator for which a dynamically 3479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * typesafe view is to be constructed. 3480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CheckedEntryIterator(Iterator<Map.Entry<K, V>> i, 3482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Class<V> valueType) { 3483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.i = i; 3484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.valueType = valueType; 3485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Iterator#hasNext() 3489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean hasNext() { 3491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return i.hasNext(); 3492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Iterator#remove() 3496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public void remove() { 3498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project i.remove(); 3499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.Iterator#next() 3503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Map.Entry<K, V> next() { 3505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedEntry<K, V>(i.next(), valueType); 3506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class represents a dynamically typesafe view of the specified sortedSet. 3515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class CheckedSortedSet<E> extends CheckedSet<E> implements 3517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SortedSet<E> { 3518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 1599911165492914959L; 3520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private SortedSet<E> ss; 3522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a dynamically typesafe view of the specified sortedSet. 3525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param s - 3527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the sortedSet for which a dynamically typesafe view is to 3528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be constructed. 3529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CheckedSortedSet(SortedSet<E> s, Class<E> type) { 3531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(s, type); 3532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.ss = s; 3533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.SortedSet#comparator() 3537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Comparator<? super E> comparator() { 3539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ss.comparator(); 3540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.SortedSet#subSet(Object, Object) 3544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedSet<E> subSet(E fromElement, E toElement) { 3546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedSortedSet<E>(ss.subSet(fromElement, toElement), 3547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project type); 3548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.SortedSet#headSet(Object) 3552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedSet<E> headSet(E toElement) { 3554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedSortedSet<E>(ss.headSet(toElement), type); 3555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.SortedSet#tailSet(Object) 3559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedSet<E> tailSet(E fromElement) { 3561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedSortedSet<E>(ss.tailSet(fromElement), type); 3562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.SortedSet#first() 3566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E first() { 3568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ss.first(); 3569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.SortedSet#last() 3573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public E last() { 3575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return ss.last(); 3576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Class represents a dynamically typesafe view of the specified sortedMap. 3581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static class CheckedSortedMap<K, V> extends CheckedMap<K, V> 3583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project implements SortedMap<K, V> { 3584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static final long serialVersionUID = 1599671320688067438L; 3586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project SortedMap<K, V> sm; 3588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Constructs a dynamically typesafe view of the specified sortedMap. 3591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 3592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param m - 3593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the sortedMap for which a dynamically typesafe view is to 3594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be constructed. 3595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CheckedSortedMap(SortedMap<K, V> m, Class<K> keyType, Class<V> valueType) { 3597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project super(m, keyType, valueType); 3598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.sm = m; 3599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.SortedMap#comparator() 3603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public Comparator<? super K> comparator() { 3605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return sm.comparator(); 3606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.SortedMap#subMap(Object, Object) 3610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedMap<K, V> subMap(K fromKey, K toKey) { 3612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedSortedMap<K, V>(sm.subMap(fromKey, toKey), 3613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keyType, valueType); 3614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.SortedMap#headMap(Object) 3618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedMap<K, V> headMap(K toKey) { 3620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedSortedMap<K, V>(sm.headMap(toKey), keyType, 3621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project valueType); 3622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.SortedMap#tailMap(Object) 3626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public SortedMap<K, V> tailMap(K fromKey) { 3628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CheckedSortedMap<K, V>(sm.tailMap(fromKey), keyType, 3629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project valueType); 3630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.SortedMap#firstKey() 3634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public K firstKey() { 3636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return sm.firstKey(); 3637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 3639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 3640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see java.util.SortedMap#lastKey() 3641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 3642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public K lastKey() { 3643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return sm.lastKey(); 3644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 3646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 3647