FileDocCategorySizeDatePackage
TABLESWITCH.javaAPI DocJava SE 6 API5439Tue Jun 10 00:22:22 BST 2008com.sun.org.apache.bcel.internal.generic

TABLESWITCH

public class TABLESWITCH extends Select
TABLESWITCH - Switch within given range of values, i.e., low..high
version
$Id: TABLESWITCH.java,v 1.1.2.1 2005/07/31 23:45:42 jeffsuttor Exp $
author
M. Dahm
see
SWITCH

Fields Summary
Constructors Summary
TABLESWITCH()
Empty constructor needed for the Class.newInstance() statement in Instruction.readInstruction(). Not to be used otherwise.

public TABLESWITCH(int[] match, InstructionHandle[] targets, InstructionHandle target)

param
match sorted array of match values, match[0] must be low value, match[match_length - 1] high value
param
targets where to branch for matched values
param
target default branch

    super(com.sun.org.apache.bcel.internal.Constants.TABLESWITCH, match, targets, target);
    
    length = (short)(13 + match_length * 4); /* Alignment remainder assumed
					      * 0 here, until dump time */
    fixed_length = length;
  
Methods Summary
public voidaccept(com.sun.org.apache.bcel.internal.generic.Visitor v)
Call corresponding visitor method(s). The order is: Call visitor methods of implemented interfaces first, then call methods according to the class hierarchy in descending order, i.e., the most specific visitXXX() call comes last.

param
v Visitor object

    v.visitVariableLengthInstruction(this);
    v.visitStackProducer(this);
    v.visitBranchInstruction(this);
    v.visitSelect(this);
    v.visitTABLESWITCH(this);
  
public voiddump(java.io.DataOutputStream out)
Dump instruction as byte code to stream out.

param
out Output stream

    super.dump(out);

    int low = (match_length > 0)? match[0] : 0;
    out.writeInt(low);

    int high = (match_length > 0)? match[match_length - 1] : 0;
    out.writeInt(high);

    for(int i=0; i < match_length; i++)     // jump offsets
      out.writeInt(indices[i] = getTargetOffset(targets[i]));
  
protected voidinitFromFile(com.sun.org.apache.bcel.internal.util.ByteSequence bytes, boolean wide)
Read needed data (e.g. index) from file.

    super.initFromFile(bytes, wide);

    int low    = bytes.readInt();
    int high   = bytes.readInt();

    match_length = high - low + 1;
    fixed_length = (short)(13 + match_length * 4);
    length       = (short)(fixed_length + padding);

    match   = new int[match_length];
    indices = new int[match_length];
    targets = new InstructionHandle[match_length];

    for(int i=low; i <= high; i++)
      match[i - low] = i;

    for(int i=0; i < match_length; i++) {
      indices[i] = bytes.readInt();
    }