javap/src/main/java/org/apidesign/javap/TrapDataIterator.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sat, 29 Dec 2012 19:44:20 +0100
changeset 395 69db488a2bc6
parent 290 57dff70280c7
child 398 945c799a6812
permissions -rw-r--r--
JavaScriptBody does not honor Object.equals. Keeping original Java code only
     1 /**
     2  * Back 2 Browser Bytecode Translator
     3  * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
     4  *
     5  * This program is free software: you can redistribute it and/or modify
     6  * it under the terms of the GNU General Public License as published by
     7  * the Free Software Foundation, version 2 of the License.
     8  *
     9  * This program is distributed in the hope that it will be useful,
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    12  * GNU General Public License for more details.
    13  *
    14  * You should have received a copy of the GNU General Public License
    15  * along with this program. Look for COPYING file in the top folder.
    16  * If not, see http://opensource.org/licenses/GPL-2.0.
    17  */
    18 package org.apidesign.javap;
    19 
    20 /**
    21  *
    22  * @author Jaroslav Tulach <jtulach@netbeans.org>
    23  */
    24 public final class TrapDataIterator {
    25     private final Hashtable exStart = new Hashtable();
    26     private final Hashtable exStop = new Hashtable();
    27     private TrapData[] current = new TrapData[10];
    28     private int currentCount;
    29     
    30     TrapDataIterator(Vector exceptionTable) {
    31         for (int i=0 ; i < exceptionTable.size(); i++) {
    32             final TrapData td = (TrapData)exceptionTable.elementAt(i);
    33             exStart.put(td.start_pc, td);
    34             exStop.put(td.end_pc, td);
    35         }
    36     }
    37 
    38     public void advanceTo(int i) {
    39         Short s = Short.valueOf((short)i);
    40         TrapData e = (TrapData) exStart.get(s);
    41         if (e != null) {
    42             add(e);
    43         }
    44         e = (TrapData) exStop.get(s);
    45         if (e != null) {
    46             remove(e);
    47         }
    48     }
    49 
    50     public boolean useTry() {
    51         return currentCount > 0;
    52     }
    53 
    54     public TrapData[] current() {
    55         return current;
    56     }
    57 
    58     private void add(TrapData e) {
    59         if (currentCount == current.length) {
    60             TrapData[] data = new TrapData[currentCount * 2];
    61             for (int i = 0; i < currentCount; i++) {
    62                 data[i] = current[i];
    63             }
    64             current = data;
    65         }
    66         current[currentCount++] = e;
    67     }
    68 
    69     private void remove(TrapData e) {
    70         int from = 0;
    71         while (from < currentCount) {
    72             if (e == current[from++]) {
    73                 break;
    74             }
    75         }
    76         while (from < currentCount) {
    77             current[from - 1] = current[from];
    78             current[from] = null;
    79             from++;
    80         }
    81         currentCount--;
    82     }
    83 }