X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=src%2Fedu%2Fberkeley%2Fsbp%2FGSS.java;fp=src%2Fedu%2Fberkeley%2Fsbp%2FGSS.java;h=c418f4e724c9c9d76feba440811825d4f3e8c95b;hp=a726297a7346cb06849949b1bce06531864fa32c;hb=4692c8e9ba0c4b44ac5222f5bf5168703c478cbd;hpb=b3b610d65969bcd5325bdba70f9e9c9e03cc83b3 diff --git a/src/edu/berkeley/sbp/GSS.java b/src/edu/berkeley/sbp/GSS.java index a726297..c418f4e 100644 --- a/src/edu/berkeley/sbp/GSS.java +++ b/src/edu/berkeley/sbp/GSS.java @@ -5,6 +5,7 @@ import edu.berkeley.sbp.*; import edu.berkeley.sbp.util.*; import edu.berkeley.sbp.Parser.Table.*; import edu.berkeley.sbp.Sequence.Position; +import edu.berkeley.sbp.Sequence.Pos; import java.io.*; import java.util.*; import java.lang.reflect.*; @@ -26,7 +27,7 @@ class GSS { class Phase implements Invokable, IntegerMappable, GraphViz.ToGraphViz, Iterable { // FIXME: right now, these are the performance bottleneck - private HashMapBag performed = new HashMapBag(); + private HashMapBag performed = new HashMapBag(); public Forest.Many finalResult; private PriorityQueue reductionQueue = new PriorityQueue(); @@ -71,7 +72,6 @@ class GSS { numReductions = 0; int minPhasePos = Integer.MAX_VALUE; - int maxOrd = -1; Reduction best = null; //System.out.println("=============================================================================="); while(!reductionQueue.isEmpty()) { @@ -84,7 +84,6 @@ class GSS { if (r.parentPhase() != null) { if (r.parentPhase().pos < minPhasePos) { minPhasePos = r.parentPhase().pos; - maxOrd = r.reduction().ord; best = r; } else if (r.parentPhase().pos == minPhasePos) { /* @@ -93,7 +92,6 @@ class GSS { Parser.mastercache.comparePositions(r.reduction(), best.reduction())+"\n"+r.compareTo(best)+ "\n"+(r.reduction().ord-best.reduction().ord)); */ - maxOrd = r.reduction().ord; best = r; } } @@ -160,19 +158,18 @@ class GSS { return getLocation().createRegion(getNextLocation()); } - void newNodeFromReduction(Result result, State state, Position reduction) { + void newNodeFromReduction(Result result, State state, Pos reduction) { int pos = result.phase().pos; - Sequence owner = reduction.owner(); - for(Sequence s : owner.hates()) + for(int s : reduction.hates()) if (performed.contains(pos, s)) return; - for(Sequence s : owner.needs()) + for(int s : reduction.needs()) if (!performed.contains(pos, s)) return; - if (owner.needed_or_hated && !performed.contains(pos, owner)) - performed.add(pos, owner); + if (reduction.owner_needed_or_hated() && !performed.contains(pos, reduction.provides())) + performed.add(pos, reduction.provides()); if (state!=null) - newNode(result, state, reduction.pos<=0); + newNode(result, state, reduction.numPops()<=0); } /** add a new node (merging with existing nodes if possible)