import java.util.Hashtable; import java.util.Vector; /** * SymbolTable implementation using two Hashtables, * one for forward lookup and one for reverse. */ public class SamSymbolTable implements SymbolTable, java.io.Serializable { protected Hashtable sym2adr = new Hashtable(); protected Hashtable adr2sym = new Hashtable(); public void add(String symbol, int address) { Integer adr = new Integer(address); sym2adr.put(symbol, adr); Vector v; if (adr2sym.containsKey(adr)) { v = (Vector) adr2sym.get(adr); if (v.contains(symbol) == false) v.add(symbol); } else { v = new Vector(); v.add(symbol); adr2sym.put(adr, v); } } public String[] resolveSymbols(int address) { Vector labels = (Vector) adr2sym.get(new Integer(address)); return (labels != null) ? ((String []) labels.toArray()) : null; } public String resolveSymbol(int address){ Vector labels = (Vector)adr2sym.get(new Integer(address)); return (labels != null)?(String)labels.get(0):null; } public int resolveAddress(String label) { Object addr = sym2adr.get(label); return (addr != null) ? ((Integer)addr).intValue() : -1; } public String toString() { return sym2adr.toString(); } }