Class SWITCH

java.lang.Object
org.apache.bcel.generic.SWITCH
All Implemented Interfaces:
CompoundInstruction

public final class SWITCH extends Object implements CompoundInstruction
SWITCH - Branch depending on int value, generates either LOOKUPSWITCH or TABLESWITCH instruction, depending on whether the match values (int[]) can be sorted with no gaps between the numbers.
  • Field Details

    • match

      private int[] match
    • targets

      private InstructionHandle[] targets
    • instruction

      private Select instruction
    • matchLength

      private int matchLength
  • Constructor Details

    • SWITCH

      public SWITCH(int[] match, InstructionHandle[] targets, InstructionHandle target, int max_gap)
      Template for switch() constructs. If the match array can be sorted in ascending order with gaps no larger than max_gap between the numbers, a TABLESWITCH instruction is generated, and a LOOKUPSWITCH otherwise. The former may be more efficient, but needs more space. Note, that the key array always will be sorted, though we leave the original arrays unaltered.
      Parameters:
      match - array of match values (case 2: ... case 7: ..., etc.)
      targets - the instructions to be branched to for each case
      target - the default target
      max_gap - maximum gap that may between case branches
    • SWITCH

      public SWITCH(int[] match, InstructionHandle[] targets, InstructionHandle target)
  • Method Details

    • fillup

      private void fillup(int max_gap, InstructionHandle target)
    • sort

      private void sort(int l, int r)
      Sort match and targets array with QuickSort.
    • matchIsOrdered

      private boolean matchIsOrdered(int max_gap)
      Returns:
      match is sorted in ascending order with no gap bigger than max_gap?
    • getInstructionList

      public InstructionList getInstructionList()
      Specified by:
      getInstructionList in interface CompoundInstruction
    • getInstruction

      public Instruction getInstruction()