javap/src/main/java/org/apidesign/javap/TrapDataIterator.java
branchexceptions
changeset 288 6d1e8eccdc98
child 289 a2ca83ddc521
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/javap/src/main/java/org/apidesign/javap/TrapDataIterator.java	Sun Dec 09 16:16:19 2012 +0100
     1.3 @@ -0,0 +1,42 @@
     1.4 +/*
     1.5 + * To change this template, choose Tools | Templates
     1.6 + * and open the template in the editor.
     1.7 + */
     1.8 +package org.apidesign.javap;
     1.9 +
    1.10 +/**
    1.11 + *
    1.12 + * @author Jaroslav Tulach <jtulach@netbeans.org>
    1.13 + */
    1.14 +public final class TrapDataIterator {
    1.15 +    private final java.util.Map<Short, TrapData> exStart = new java.util.HashMap<Short, TrapData>();
    1.16 +    private final java.util.Map<Short, TrapData> exStop = new java.util.HashMap<Short, TrapData>();
    1.17 +    private final java.util.Deque<TrapData> current = new java.util.ArrayDeque<TrapData>();
    1.18 +    
    1.19 +    TrapDataIterator(Vector exceptionTable) {
    1.20 +        for (int i=0 ; i < exceptionTable.size(); i++) {
    1.21 +            final TrapData td = (TrapData)exceptionTable.elementAt(i);
    1.22 +            exStart.put(td.start_pc, td);
    1.23 +            exStop.put(td.end_pc, td);
    1.24 +        }
    1.25 +    }
    1.26 +
    1.27 +    public void advanceTo(int i) {
    1.28 +        TrapData e = exStart.get((short) i);
    1.29 +        if (e != null) {
    1.30 +            current.addFirst(e);
    1.31 +        }
    1.32 +        e = exStop.get((short) i);
    1.33 +        if (e != null) {
    1.34 +            current.remove(e);
    1.35 +        }
    1.36 +    }
    1.37 +
    1.38 +    public boolean useTry() {
    1.39 +        return !current.isEmpty();
    1.40 +    }
    1.41 +
    1.42 +    public TrapData[] current() {
    1.43 +        return current.toArray(new TrapData[0]);
    1.44 +    }
    1.45 +}