X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FGSS.java;h=9ab65870f9ef7ff883887e2bfa18dcc7a1ba6696;hp=2b8be3bfbba3442b97a3ab9167041c2a5ae079e1;hb=ceca07b4020b5dd051e0d01767a35842dec2ca74;hpb=dac355890ce94f5ec7204142aec9a33ad8f81214 diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index 2b8be3b..9ab6587 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -230,17 +230,28 @@ class GSS { return true; } + public void uninhibit(int p, Sequence s) { + if (s.hated!=null) + for(Sequence s2 : s.hated) + inhibited.remove(p, s2); + } + public void inhibit(Reduction r, int p) { if (r.position.owner().hated == null) return; // remember that dead states are still allowed to shift -- just not allowed to reduce + boolean reset = false; for(Sequence seq : r.position.owner().hated) { if (performed.contains(p,seq)) { - inhibited.clear(); - inhibited.add(p, seq); - resets++; - throw new Reset(); + uninhibit(p, seq); + //System.out.println("\nresetting due to " + r.position.owner() + " killing " + seq); + if (!reset) inhibited.add(p, seq); + reset = true; } - inhibited.add(p, seq); + if (!reset) inhibited.add(p, seq); + } + if (reset) { + resets++; + throw new Reset(); } } @@ -321,7 +332,7 @@ class GSS { this.reduction = reduction; } public void perform() { - System.out.println("performing: " + reduction.position); + //System.out.println("performing: " + reduction.position); newNode(parent, pending, state, fromEmptyReduction, reduction); } }