12bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson/*
22bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson * Copyright (C) 2011 The Android Open Source Project
32bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson *
42bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson * Licensed under the Apache License, Version 2.0 (the "License");
52bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson * you may not use this file except in compliance with the License.
62bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson * You may obtain a copy of the License at
72bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson *
82bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson *      http://www.apache.org/licenses/LICENSE-2.0
92bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson *
102bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson * Unless required by applicable law or agreed to in writing, software
112bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
122bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson * See the License for the specific language governing permissions and
142bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson * limitations under the License.
152bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson */
162bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson
172bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilsonpackage com.android.dex;
182bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson
192bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilsonimport com.android.dex.util.ByteArrayByteInput;
202bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilsonimport com.android.dex.util.ByteInput;
212bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson
222bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson/**
232bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson * An encoded value or array.
242bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson */
252bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilsonpublic final class EncodedValue implements Comparable<EncodedValue> {
262bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    private final byte[] data;
272bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson
282bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    public EncodedValue(byte[] data) {
292bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson        this.data = data;
302bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    }
312bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson
322bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    public ByteInput asByteInput() {
332bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson        return new ByteArrayByteInput(data);
342bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    }
352bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson
362bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    public byte[] getBytes() {
372bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson        return data;
382bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    }
392bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson
402bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    public void writeTo(Dex.Section out) {
412bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson        out.write(data);
422bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    }
432bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson
442bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    @Override public int compareTo(EncodedValue other) {
452bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson        int size = Math.min(data.length, other.data.length);
462bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson        for (int i = 0; i < size; i++) {
472bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson            if (data[i] != other.data[i]) {
482bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson                return (data[i] & 0xff) - (other.data[i] & 0xff);
492bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson            }
502bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson        }
512bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson        return data.length - other.data.length;
522bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    }
532bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson
542bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    @Override public String toString() {
552bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson        return Integer.toHexString(data[0] & 0xff) + "...(" + data.length + ")";
562bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson    }
572bea5ee615b0f4add658d5660bd81c5145a0d05eJesse Wilson}
58