X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FGSS.java;h=1432402f0ac79b656a71f908bff6bab963d6dcaa;hb=cd979dfc5968a185c12d6eedc2aa688ef4b0f8b8;hp=86c93b2170b0f37544741e8d91a051c31441da05;hpb=8af721961520fe30057c3e0a0c7b68ded356e5c2;p=sbp.git diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index 86c93b2..1432402 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -285,8 +285,8 @@ class GSS { } if (n==null) return; Forest[] holder = new Forest[r.position.pos]; - if (r.position.pos==0) r.finish(n, r.zero(), n.phase(), holder); - else r.reduce(n, r.position.pos-1, n.phase(), holder); + if (r.position.pos==0) n.finish(r, r.zero(), n.phase(), holder); + else n.reduce(r, r.position.pos-1, n.phase(), holder); } else { Forest[] holder = new Forest[r.position.pos]; if (r.position.pos<=0) throw new Error("called wrong form of reduce()"); @@ -296,13 +296,35 @@ class GSS { if (pos==0) { System.arraycopy(holder, 0, r.position.holder, 0, holder.length); Forest rex = r.position.rewrite(n.phase().getLocation()); - r.finish(n2, rex, n.phase(), holder); + n2.finish(r, rex, n.phase(), holder); } else { - r.reduce(n2, pos-1, n.phase(), holder); + n2.reduce(r, pos-1, n.phase(), holder); } holder[pos] = old; } } + + public void reduce(Reduction r, int pos, GSS.Phase target, Forest[] holder) { + Forest old = holder[pos]; + holder[pos] = this.pending(); + if (pos==0) { + System.arraycopy(holder, 0, r.position.holder, 0, holder.length); + for(int i=0; i