diff -r 000000000000 -r 6d1e8eccdc98 javap/src/main/java/org/apidesign/javap/TrapDataIterator.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javap/src/main/java/org/apidesign/javap/TrapDataIterator.java Sun Dec 09 16:16:19 2012 +0100 @@ -0,0 +1,42 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.apidesign.javap; + +/** + * + * @author Jaroslav Tulach + */ +public final class TrapDataIterator { + private final java.util.Map exStart = new java.util.HashMap(); + private final java.util.Map exStop = new java.util.HashMap(); + private final java.util.Deque current = new java.util.ArrayDeque(); + + TrapDataIterator(Vector exceptionTable) { + for (int i=0 ; i < exceptionTable.size(); i++) { + final TrapData td = (TrapData)exceptionTable.elementAt(i); + exStart.put(td.start_pc, td); + exStop.put(td.end_pc, td); + } + } + + public void advanceTo(int i) { + TrapData e = exStart.get((short) i); + if (e != null) { + current.addFirst(e); + } + e = exStop.get((short) i); + if (e != null) { + current.remove(e); + } + } + + public boolean useTry() { + return !current.isEmpty(); + } + + public TrapData[] current() { + return current.toArray(new TrapData[0]); + } +}