1579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson/*
2579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Copyright (C) 2011 The Android Open Source Project
3579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson *
4579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Licensed under the Apache License, Version 2.0 (the "License");
5579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * you may not use this file except in compliance with the License.
6579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * You may obtain a copy of the License at
7579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson *
8579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson *      http://www.apache.org/licenses/LICENSE-2.0
9579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson *
10579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * Unless required by applicable law or agreed to in writing, software
11579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
12579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * See the License for the specific language governing permissions and
14579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * limitations under the License.
15579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */
16579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
17579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonpackage com.android.dx.io.instructions;
18579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
19579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson/**
20579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * A decoded Dalvik instruction which contains the payload for
21579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson * a {@code packed-switch} instruction.
22579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson */
23579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilsonpublic final class FillArrayDataPayloadDecodedInstruction
24579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        extends DecodedInstruction {
25579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    /** data array */
26579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    private final Object data;
27579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
28579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    /** number of elements */
29579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    private final int size;
30579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
31579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    /** element width */
32579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    private final int elementWidth;
33579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
34579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    /**
35579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson     * Constructs an instance. This private instance doesn't check the
36579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson     * type of the data array.
37579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson     */
38579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    private FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
39579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson            int opcode, Object data, int size, int elementWidth) {
40579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        super(format, opcode, 0, null, 0, 0L);
41579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
42579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        this.data = data;
43579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        this.size = size;
44579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        this.elementWidth = elementWidth;
45579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    }
46579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
47579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    /**
48579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson     * Constructs an instance.
49579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson     */
50579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    public FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
51579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson            int opcode, byte[] data) {
52579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        this(format, opcode, data, data.length, 1);
53579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    }
54579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
55579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    /**
56579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson     * Constructs an instance.
57579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson     */
58579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    public FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
59579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson            int opcode, short[] data) {
60579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        this(format, opcode, data, data.length, 2);
61579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    }
62579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
63579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    /**
64579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson     * Constructs an instance.
65579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson     */
66579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    public FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
67579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson            int opcode, int[] data) {
68579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        this(format, opcode, data, data.length, 4);
69579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    }
70579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
71579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    /**
72579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson     * Constructs an instance.
73579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson     */
74579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    public FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
75579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson            int opcode, long[] data) {
76579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        this(format, opcode, data, data.length, 8);
77579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    }
78579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
79579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    /** @inheritDoc */
80579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    public int getRegisterCount() {
81579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        return 0;
82579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    }
83579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
84579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    public short getElementWidthUnit() {
85579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        return (short) elementWidth;
86579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    }
87579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
88579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    public int getSize() {
89579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        return size;
90579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    }
91579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
92579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    public Object getData() {
93579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        return data;
94579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    }
95579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson
96579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    /** @inheritDoc */
97579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    public DecodedInstruction withIndex(int newIndex) {
98579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson        throw new UnsupportedOperationException("no index in instruction");
99579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson    }
100579d7739c53a2707ad711a2d2cae46d7d782f06Jesse Wilson}
101