import java.util.*; import java.net.*; public class NameTable { class NameEntry { public String procName; public InetSocketAddress addr; public NameEntry(String pName, String host, int port){ procName = pName; addr = new InetSocketAddress(host, port); } } ArrayList<NameEntry> table = new ArrayList<NameEntry>(); public synchronized InetSocketAddress search(String s) { for (NameEntry entry: table) if (s.equals(entry.procName)) return entry.addr; return null; } // returns 0 if old value replaced, otherwise 1 public synchronized int insert(String s, String hostName, int portNumber) { int retValue = 1; for (NameEntry entry: table) if (s.equals(entry.procName)) { table.remove(entry); retValue = 0; } table.add(new NameEntry(s,hostName, portNumber)); notifyAll(); return retValue; } public synchronized InetSocketAddress blockingFind(String s) { InetSocketAddress addr = search(s); while (addr == null) { Util.myWait(this); addr = search(s); } return addr; } public synchronized void clear() { table.clear(); } }