public int resets = 0;
public int waits = 0;
- HashMapBag<Integer,Sequence> inhibited = new HashMapBag<Integer,Sequence>();
- HashMapBag<Sequence,Phase.Waiting> waiting = new HashMapBag<Sequence,Phase.Waiting>();
- HashMapBag<Integer,Sequence> performed = new HashMapBag<Integer,Sequence>();
+ HashMapBag<Integer,Sequence> inhibited = new HashMapBag<Integer,Sequence>();
+ HashMapBag<Integer,Sequence> expectedInhibit = new HashMapBag<Integer,Sequence>();
+ HashMapBag<Sequence,Phase.Waiting> waiting = new HashMapBag<Sequence,Phase.Waiting>();
+ HashMapBag<Integer,Sequence> performed = new HashMapBag<Integer,Sequence>();
/** FIXME */
public Forest.Ref finalResult;
performed.clear();
hash = new IntPairMap<Phase.Node>();
singularReductions = new IntPairMap<Forest>();
+ expectedInhibit.clear();
+ expectedInhibit.addAll(inhibited);
good = false;
closed = false;
reducing = false;
throw new Reset();
}
inhibited.add(p, seq);
+ expectedInhibit.remove(p, seq);
}
}
reducing_list[i] = null;
n.performReductions();
}
+ if (expectedInhibit.size() > 0) {
+ inhibited.removeAll(expectedInhibit);
+ System.out.println("\n!!!!\n");
+ throw new Reset();
+ }
} catch (Reset r) {
reset();
reduce();
public void add(K k, V v) {
HashSet<V> hs = hm.get(k);
if (hs==null) hm.put(k, hs = new HashSet<V>());
+ size -= hs.size();
hs.add(v);
+ size += hs.size();
}
public void addAll(K k, Iterable<V> iv) {
public void remove(K k, V v) {
if (hm.get(k)==null) return;
- hm.get(k).remove(v);
+ HashSet<V> hs = hm.get(k);
+ if (hs==null) return;
+ size -= hs.size();
+ hs.remove(v);
+ size += hs.size();
+ }
+
+ public void removeAll(K k, Iterable<V> iv) {
+ for(V v : iv) remove(k, v);
}
public void clear() { hm.clear(); }
return hm.get(k)!=null && hm.get(k).contains(v);
}
+ public void addAll(HashMapBag<K,V> hmb) {
+ for(K k : hmb) addAll(k, hmb.getAll(k));
+ }
+ public void removeAll(HashMapBag<K,V> hmb) {
+ for(K k : hmb) removeAll(k, hmb.getAll(k));
+ }
+
public Iterator<K> iterator() { return hm.keySet().iterator(); }
+ public int size() { return size; }
+ private int size = 0;
}