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