jaroslav@288: /* jaroslav@288: * To change this template, choose Tools | Templates jaroslav@288: * and open the template in the editor. jaroslav@288: */ jaroslav@288: package org.apidesign.javap; jaroslav@288: jaroslav@288: /** jaroslav@288: * jaroslav@288: * @author Jaroslav Tulach jaroslav@288: */ jaroslav@288: public final class TrapDataIterator { jaroslav@288: private final java.util.Map exStart = new java.util.HashMap(); jaroslav@288: private final java.util.Map exStop = new java.util.HashMap(); jaroslav@289: private TrapData[] current = new TrapData[10]; jaroslav@289: private int currentCount; jaroslav@288: jaroslav@288: TrapDataIterator(Vector exceptionTable) { jaroslav@288: for (int i=0 ; i < exceptionTable.size(); i++) { jaroslav@288: final TrapData td = (TrapData)exceptionTable.elementAt(i); jaroslav@288: exStart.put(td.start_pc, td); jaroslav@288: exStop.put(td.end_pc, td); jaroslav@288: } jaroslav@288: } jaroslav@288: jaroslav@288: public void advanceTo(int i) { jaroslav@288: TrapData e = exStart.get((short) i); jaroslav@288: if (e != null) { jaroslav@289: add(e); jaroslav@288: } jaroslav@288: e = exStop.get((short) i); jaroslav@288: if (e != null) { jaroslav@289: remove(e); jaroslav@288: } jaroslav@288: } jaroslav@288: jaroslav@288: public boolean useTry() { jaroslav@289: return currentCount > 0; jaroslav@288: } jaroslav@288: jaroslav@288: public TrapData[] current() { jaroslav@289: return current; jaroslav@289: } jaroslav@289: jaroslav@289: private void add(TrapData e) { jaroslav@289: if (currentCount == current.length) { jaroslav@289: TrapData[] data = new TrapData[currentCount * 2]; jaroslav@289: for (int i = 0; i < currentCount; i++) { jaroslav@289: data[i] = current[i]; jaroslav@289: } jaroslav@289: current = data; jaroslav@289: } jaroslav@289: current[currentCount++] = e; jaroslav@289: } jaroslav@289: jaroslav@289: private void remove(TrapData e) { jaroslav@289: int from = 0; jaroslav@289: while (from < currentCount) { jaroslav@289: if (e == current[from++]) { jaroslav@289: break; jaroslav@289: } jaroslav@289: } jaroslav@289: while (from < currentCount) { jaroslav@289: current[from - 1] = current[from]; jaroslav@289: current[from] = null; jaroslav@289: from++; jaroslav@289: } jaroslav@289: currentCount--; jaroslav@288: } jaroslav@288: }