sort(0, match_length - 1); if(matchIsOrdered(max_gap)) { fillup(max_gap, target);
/** * 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. * * @param match array of match values (case 2: ... case 7: ..., etc.) * @param targets the instructions to be branched to for each case * @param target the default target * @param max_gap maximum gap that may between case branches */ public SWITCH(final int[] match, final InstructionHandle[] targets, final InstructionHandle target, final int max_gap) { this.match = match.clone(); this.targets = targets.clone(); if ((match_length = match.length) < 2) { instruction = new TABLESWITCH(match, targets, target); } else { sort(0, match_length - 1); if (matchIsOrdered(max_gap)) { fillup(max_gap, target); instruction = new TABLESWITCH(this.match, this.targets, target); } else { instruction = new LOOKUPSWITCH(this.match, this.targets, target); } } }