projects
/
sbp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
intermediate checkpoint
[sbp.git]
/
src
/
edu
/
berkeley
/
sbp
/
GSS.java
diff --git
a/src/edu/berkeley/sbp/GSS.java
b/src/edu/berkeley/sbp/GSS.java
index
2b8be3b
..
9ab6587
100644
(file)
--- a/
src/edu/berkeley/sbp/GSS.java
+++ b/
src/edu/berkeley/sbp/GSS.java
@@
-230,17
+230,28
@@
class GSS {
return true;
}
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
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)) {
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() {
this.reduction = reduction;
}
public void perform() {
- System.out.println("performing: " + reduction.position);
+ //System.out.println("performing: " + reduction.position);
newNode(parent, pending, state, fromEmptyReduction, reduction);
}
}
newNode(parent, pending, state, fromEmptyReduction, reduction);
}
}