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'
     1 /*
     2  * To change this template, choose Tools | Templates
     3  * and open the template in the editor.
     4  */
     5 package org.apidesign.javap;
     6 
     7 /**
     8  *
     9  * @author Jaroslav Tulach <jtulach@netbeans.org>
    10  */
    11 public final class TrapDataIterator {
    12     private final java.util.Map<Short, TrapData> exStart = new java.util.HashMap<Short, TrapData>();
    13     private final java.util.Map<Short, TrapData> exStop = new java.util.HashMap<Short, TrapData>();
    14     private final java.util.Deque<TrapData> current = new java.util.ArrayDeque<TrapData>();
    15     
    16     TrapDataIterator(Vector exceptionTable) {
    17         for (int i=0 ; i < exceptionTable.size(); i++) {
    18             final TrapData td = (TrapData)exceptionTable.elementAt(i);
    19             exStart.put(td.start_pc, td);
    20             exStop.put(td.end_pc, td);
    21         }
    22     }
    23 
    24     public void advanceTo(int i) {
    25         TrapData e = exStart.get((short) i);
    26         if (e != null) {
    27             current.addFirst(e);
    28         }
    29         e = exStop.get((short) i);
    30         if (e != null) {
    31             current.remove(e);
    32         }
    33     }
    34 
    35     public boolean useTry() {
    36         return !current.isEmpty();
    37     }
    38 
    39     public TrapData[] current() {
    40         return current.toArray(new TrapData[0]);
    41     }
    42 }