1d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein/*
2d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Copyright (C) 2011 The Android Open Source Project
3d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein *
4d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Licensed under the Apache License, Version 2.0 (the "License");
5d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * you may not use this file except in compliance with the License.
6d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * You may obtain a copy of the License at
7d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein *
8d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein *      http://www.apache.org/licenses/LICENSE-2.0
9d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein *
10d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * Unless required by applicable law or agreed to in writing, software
11d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * distributed under the License is distributed on an "AS IS" BASIS,
12d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * See the License for the specific language governing permissions and
14d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * limitations under the License.
15d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein */
16d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
17537939ca06a47668f719ee06159303bcd3175c69Dan Bornsteinpackage com.android.dx.io.instructions;
18d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
19d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein/**
20d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * A decoded Dalvik instruction which contains the payload for
21d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein * a {@code packed-switch} instruction.
22d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein */
23d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornsteinpublic final class FillArrayDataPayloadDecodedInstruction
24d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        extends DecodedInstruction {
25d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    /** data array */
26d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    private final Object data;
27d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
28d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    /** number of elements */
29d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    private final int size;
30d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
31d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    /** element width */
32d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    private final int elementWidth;
33d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
34d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    /**
35d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein     * Constructs an instance. This private instance doesn't check the
36d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein     * type of the data array.
37d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein     */
38d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    private FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
39d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein            int opcode, Object data, int size, int elementWidth) {
40d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        super(format, opcode, 0, null, 0, 0L);
41d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
42d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        this.data = data;
43d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        this.size = size;
44d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        this.elementWidth = elementWidth;
45d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    }
46d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
47d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    /**
48d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein     * Constructs an instance.
49d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein     */
50d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    public FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
51d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein            int opcode, byte[] data) {
52d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        this(format, opcode, data, data.length, 1);
53d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    }
54d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
55d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    /**
56d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein     * Constructs an instance.
57d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein     */
58d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    public FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
59d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein            int opcode, short[] data) {
60d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        this(format, opcode, data, data.length, 2);
61d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    }
62d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
63d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    /**
64d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein     * Constructs an instance.
65d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein     */
66d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    public FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
67d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein            int opcode, int[] data) {
68d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        this(format, opcode, data, data.length, 4);
69d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    }
70d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
71d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    /**
72d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein     * Constructs an instance.
73d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein     */
74d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    public FillArrayDataPayloadDecodedInstruction(InstructionCodec format,
75d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein            int opcode, long[] data) {
76d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        this(format, opcode, data, data.length, 8);
77d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    }
78d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
79d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    /** @inheritDoc */
80d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    public int getRegisterCount() {
81d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        return 0;
82d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    }
83d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
84d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    public short getElementWidthUnit() {
85d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        return (short) elementWidth;
86d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    }
87d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
88d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    public int getSize() {
89d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        return size;
90d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    }
91d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
92d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    public Object getData() {
93d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        return data;
94d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    }
95d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein
96d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    /** @inheritDoc */
97d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    public DecodedInstruction withIndex(int newIndex) {
98d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein        throw new UnsupportedOperationException("no index in instruction");
99d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein    }
100d63837a6a16a19e3ae943cdfad52b6f6c8d04a22Dan Bornstein}
101