From: adam Date: Sun, 15 Jan 2006 08:17:34 +0000 (-0500) Subject: checkpoint X-Git-Tag: tag_for_25-Mar~381 X-Git-Url: http://git.megacz.com/?p=sbp.git;a=commitdiff_plain;h=3473141880127c6aa52d094d51739e5eb67f1703 checkpoint darcs-hash:20060115081734-5007d-e7bd04061d146867bae11768a3bc6d23b8f40830.gz --- diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index 7408eba..d25593f 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -16,9 +16,10 @@ class GSS { public int resets = 0; public int waits = 0; - HashMapBag inhibited = new HashMapBag(); - HashMapBag waiting = new HashMapBag(); - HashMapBag performed = new HashMapBag(); + HashMapBag inhibited = new HashMapBag(); + HashMapBag expectedInhibit = new HashMapBag(); + HashMapBag waiting = new HashMapBag(); + HashMapBag performed = new HashMapBag(); /** FIXME */ public Forest.Ref finalResult; @@ -63,6 +64,8 @@ class GSS { performed.clear(); hash = new IntPairMap(); singularReductions = new IntPairMap(); + expectedInhibit.clear(); + expectedInhibit.addAll(inhibited); good = false; closed = false; reducing = false; @@ -175,6 +178,7 @@ class GSS { throw new Reset(); } inhibited.add(p, seq); + expectedInhibit.remove(p, seq); } } @@ -196,6 +200,11 @@ class GSS { 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(); diff --git a/src/edu/berkeley/sbp/util/HashMapBag.java b/src/edu/berkeley/sbp/util/HashMapBag.java index 6f5585d..73e2cce 100644 --- a/src/edu/berkeley/sbp/util/HashMapBag.java +++ b/src/edu/berkeley/sbp/util/HashMapBag.java @@ -9,7 +9,9 @@ public final class HashMapBag implements MapBag { public void add(K k, V v) { HashSet hs = hm.get(k); if (hs==null) hm.put(k, hs = new HashSet()); + size -= hs.size(); hs.add(v); + size += hs.size(); } public void addAll(K k, Iterable iv) { @@ -24,7 +26,15 @@ public final class HashMapBag implements MapBag { public void remove(K k, V v) { if (hm.get(k)==null) return; - hm.get(k).remove(v); + HashSet hs = hm.get(k); + if (hs==null) return; + size -= hs.size(); + hs.remove(v); + size += hs.size(); + } + + public void removeAll(K k, Iterable iv) { + for(V v : iv) remove(k, v); } public void clear() { hm.clear(); } @@ -33,5 +43,14 @@ public final class HashMapBag implements MapBag { return hm.get(k)!=null && hm.get(k).contains(v); } + public void addAll(HashMapBag hmb) { + for(K k : hmb) addAll(k, hmb.getAll(k)); + } + public void removeAll(HashMapBag hmb) { + for(K k : hmb) removeAll(k, hmb.getAll(k)); + } + public Iterator iterator() { return hm.keySet().iterator(); } + public int size() { return size; } + private int size = 0; }