package jscl.math.polynomial.groebner;
import jscl.math.Debug;
import jscl.math.polynomial.Basis;
import jscl.math.polynomial.DegreeOrdering;
import jscl.math.polynomial.Ordering;
import jscl.math.polynomial.Polynomial;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
class Block extends Standard {
boolean degree;
Block(Ordering ordering, int flags) {
super(flags);
degree = ordering instanceof DegreeOrdering;
}
void compute() {
Debug.println("evaluate");
int degree = 0;
while (!pairs.isEmpty()) {
List list = new ArrayList();
Iterator it = pairs.keySet().iterator();
while (it.hasNext()) {
Pair pa = (Pair) it.next();
int d = (flags & Basis.SUGAR) > 0 ? pa.sugar : pa.scm.degree();
if (degree == 0) degree = d;
else if (d > degree || !this.degree) break;
list.add(pa);
}
process(list);
remove(list);
degree = 0;
}
}
void add(List list) {
super.add(ReducedRowEchelonForm.compute(list));
}
void process(List pairs) {
List list = new ArrayList();
Iterator it = pairs.iterator();
while (it.hasNext()) {
Pair pa = (Pair) it.next();
if (criterion(pa)) continue;
Polynomial p = reduce(pa, polys);
if (p.signum() != 0) list.add(p);
npairs++;
}
add(list);
}
void remove(List pairs) {
Iterator it = pairs.iterator();
while (it.hasNext()) remove((Pair) it.next());
}
}