javap/src/main/java/org/apidesign/javap/TrapDataIterator.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 09 Dec 2012 16:16:19 +0100
branchexceptions
changeset 288 6d1e8eccdc98
child 289 a2ca83ddc521
permissions -rw-r--r--
Rather than exposing Vector, providing abstraction to encapsulate manipulation with TrapData via 'iterator'
jaroslav@288
     1
/*
jaroslav@288
     2
 * To change this template, choose Tools | Templates
jaroslav@288
     3
 * and open the template in the editor.
jaroslav@288
     4
 */
jaroslav@288
     5
package org.apidesign.javap;
jaroslav@288
     6
jaroslav@288
     7
/**
jaroslav@288
     8
 *
jaroslav@288
     9
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@288
    10
 */
jaroslav@288
    11
public final class TrapDataIterator {
jaroslav@288
    12
    private final java.util.Map<Short, TrapData> exStart = new java.util.HashMap<Short, TrapData>();
jaroslav@288
    13
    private final java.util.Map<Short, TrapData> exStop = new java.util.HashMap<Short, TrapData>();
jaroslav@288
    14
    private final java.util.Deque<TrapData> current = new java.util.ArrayDeque<TrapData>();
jaroslav@288
    15
    
jaroslav@288
    16
    TrapDataIterator(Vector exceptionTable) {
jaroslav@288
    17
        for (int i=0 ; i < exceptionTable.size(); i++) {
jaroslav@288
    18
            final TrapData td = (TrapData)exceptionTable.elementAt(i);
jaroslav@288
    19
            exStart.put(td.start_pc, td);
jaroslav@288
    20
            exStop.put(td.end_pc, td);
jaroslav@288
    21
        }
jaroslav@288
    22
    }
jaroslav@288
    23
jaroslav@288
    24
    public void advanceTo(int i) {
jaroslav@288
    25
        TrapData e = exStart.get((short) i);
jaroslav@288
    26
        if (e != null) {
jaroslav@288
    27
            current.addFirst(e);
jaroslav@288
    28
        }
jaroslav@288
    29
        e = exStop.get((short) i);
jaroslav@288
    30
        if (e != null) {
jaroslav@288
    31
            current.remove(e);
jaroslav@288
    32
        }
jaroslav@288
    33
    }
jaroslav@288
    34
jaroslav@288
    35
    public boolean useTry() {
jaroslav@288
    36
        return !current.isEmpty();
jaroslav@288
    37
    }
jaroslav@288
    38
jaroslav@288
    39
    public TrapData[] current() {
jaroslav@288
    40
        return current.toArray(new TrapData[0]);
jaroslav@288
    41
    }
jaroslav@288
    42
}