1 package polyglot.util; 2 3 import java.util.Collection ; 4 import java.util.Collections ; 5 import java.util.HashMap ; 6 import java.util.Iterator ; 7 import java.util.LinkedList ; 8 import java.util.ListIterator ; 9 import java.util.Map ; 10 11 19 public class WorkList { 20 21 24 public WorkList() { 25 pending = new LinkedList (); 26 results = new HashMap (); 27 size = 0; 28 } 29 30 34 public void addWork(Object o) { 35 if (! results.containsKey(o)) { 36 results.put(o, NOT_CALCULATED); 37 pending.addLast(o); 38 size++; 39 } 40 } 41 42 46 public void addWork(Collection c) { 47 for (Iterator i = c.iterator(); i.hasNext(); ) 48 addWork(i.next()); 49 } 50 51 54 public boolean finished() { 55 return size == 0; 56 } 57 58 62 public Object getWork() { 63 if (size>0) 64 return pending.getFirst(); 65 else 66 throw new java.util.NoSuchElementException ("WorkList.getWork"); 67 } 68 69 74 public void finishWork(Object work, Object result) { 75 if (results.get(work) == NOT_CALCULATED) { 76 for (ListIterator i = pending.listIterator(); i.hasNext(); ) { 77 if (i.next().equals(work)) 78 i.remove(); 79 } 80 } 81 results.put(work, result); 82 } 83 84 87 public void finishWork(Object work) { 88 finishWork(work, null); 89 } 90 91 94 public boolean isFinished(Object work) { 95 return results.containsKey(work) && results.get(work) != NOT_CALCULATED; 96 } 97 98 102 public Map getMap() { 103 return Collections.unmodifiableMap(results); 104 } 105 106 LinkedList pending; 109 HashMap results; 112 int size; 114 115 public static final Object NOT_CALCULATED = new Object (); 116 } 117 | Popular Tags |