1cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson/* 2cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * Copyright (C) 2011 The Android Open Source Project 3cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * 4cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License"); 5cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * you may not use this file except in compliance with the License. 6cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * You may obtain a copy of the License at 7cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * 8cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 9cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * 10cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * Unless required by applicable law or agreed to in writing, software 11cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 12cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * See the License for the specific language governing permissions and 14cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson * limitations under the License. 15cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson */ 16cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson 17cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilsonpackage com.android.dx.merge; 18cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson 19cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilsonimport com.android.dx.io.DexBuffer; 20cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilsonimport com.android.dx.util.Unsigned; 21cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilsonimport java.util.Arrays; 22cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson 23cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilsonpublic final class TypeList implements Comparable<TypeList> { 24cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson 25cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson public static final TypeList EMPTY = new TypeList(null, new short[0]); 26cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson 27cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson private final DexBuffer buffer; 28cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson private final short[] types; 29cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson 30cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson public TypeList(DexBuffer buffer, short[] types) { 31cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson this.buffer = buffer; 32cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson this.types = types; 33cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson } 34cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson 35cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson public short[] getTypes() { 36cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson return types; 37cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson } 38cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson 39cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson public int compareTo(TypeList other) { 40cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson for (int i = 0; i < types.length && i < other.types.length; i++) { 41cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson if (types[i] != other.types[i]) { 42cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson return Unsigned.compare(types[i], other.types[i]); 43cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson } 44cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson } 45cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson return Unsigned.compare(types.length, other.types.length); 46cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson } 47cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson 48cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson @Override public String toString() { 49cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson StringBuilder result = new StringBuilder(); 501c7c32e2ff5d9f6a3c0319e9d0088261f2cccb2bElliott Hughes result.append("("); 51cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson for (int i = 0, typesLength = types.length; i < typesLength; i++) { 521c7c32e2ff5d9f6a3c0319e9d0088261f2cccb2bElliott Hughes result.append(buffer != null ? buffer.typeNames().get(types[i]) : types[i]); 53cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson } 541c7c32e2ff5d9f6a3c0319e9d0088261f2cccb2bElliott Hughes result.append(")"); 55cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson return result.toString(); 56cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson } 57cdef3ed061e2a045d956ea613556a67f9ac6e9d0Jesse Wilson} 58