author | Jaroslav Tulach <jaroslav.tulach@apidesign.org> |
Sun, 09 Dec 2012 16:32:29 +0100 | |
branch | exceptions |
changeset 290 | 57dff70280c7 |
parent 289 | a2ca83ddc521 |
child 378 | ccb1544a88bc |
permissions | -rw-r--r-- |
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@290 | 12 |
private final Hashtable exStart = new Hashtable(); |
jaroslav@290 | 13 |
private final Hashtable exStop = new Hashtable(); |
jaroslav@289 | 14 |
private TrapData[] current = new TrapData[10]; |
jaroslav@289 | 15 |
private int currentCount; |
jaroslav@288 | 16 |
|
jaroslav@288 | 17 |
TrapDataIterator(Vector exceptionTable) { |
jaroslav@288 | 18 |
for (int i=0 ; i < exceptionTable.size(); i++) { |
jaroslav@288 | 19 |
final TrapData td = (TrapData)exceptionTable.elementAt(i); |
jaroslav@288 | 20 |
exStart.put(td.start_pc, td); |
jaroslav@288 | 21 |
exStop.put(td.end_pc, td); |
jaroslav@288 | 22 |
} |
jaroslav@288 | 23 |
} |
jaroslav@288 | 24 |
|
jaroslav@288 | 25 |
public void advanceTo(int i) { |
jaroslav@290 | 26 |
Short s = Short.valueOf((short)i); |
jaroslav@290 | 27 |
TrapData e = (TrapData) exStart.get(s); |
jaroslav@288 | 28 |
if (e != null) { |
jaroslav@289 | 29 |
add(e); |
jaroslav@288 | 30 |
} |
jaroslav@290 | 31 |
e = (TrapData) exStop.get(s); |
jaroslav@288 | 32 |
if (e != null) { |
jaroslav@289 | 33 |
remove(e); |
jaroslav@288 | 34 |
} |
jaroslav@288 | 35 |
} |
jaroslav@288 | 36 |
|
jaroslav@288 | 37 |
public boolean useTry() { |
jaroslav@289 | 38 |
return currentCount > 0; |
jaroslav@288 | 39 |
} |
jaroslav@288 | 40 |
|
jaroslav@288 | 41 |
public TrapData[] current() { |
jaroslav@289 | 42 |
return current; |
jaroslav@289 | 43 |
} |
jaroslav@289 | 44 |
|
jaroslav@289 | 45 |
private void add(TrapData e) { |
jaroslav@289 | 46 |
if (currentCount == current.length) { |
jaroslav@289 | 47 |
TrapData[] data = new TrapData[currentCount * 2]; |
jaroslav@289 | 48 |
for (int i = 0; i < currentCount; i++) { |
jaroslav@289 | 49 |
data[i] = current[i]; |
jaroslav@289 | 50 |
} |
jaroslav@289 | 51 |
current = data; |
jaroslav@289 | 52 |
} |
jaroslav@289 | 53 |
current[currentCount++] = e; |
jaroslav@289 | 54 |
} |
jaroslav@289 | 55 |
|
jaroslav@289 | 56 |
private void remove(TrapData e) { |
jaroslav@289 | 57 |
int from = 0; |
jaroslav@289 | 58 |
while (from < currentCount) { |
jaroslav@289 | 59 |
if (e == current[from++]) { |
jaroslav@289 | 60 |
break; |
jaroslav@289 | 61 |
} |
jaroslav@289 | 62 |
} |
jaroslav@289 | 63 |
while (from < currentCount) { |
jaroslav@289 | 64 |
current[from - 1] = current[from]; |
jaroslav@289 | 65 |
current[from] = null; |
jaroslav@289 | 66 |
from++; |
jaroslav@289 | 67 |
} |
jaroslav@289 | 68 |
currentCount--; |
jaroslav@288 | 69 |
} |
jaroslav@288 | 70 |
} |