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