package splar.plugins.reasoners.bdd.javabdd;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import splar.core.constraints.Assignment;
import splar.core.constraints.BooleanVariable;
import splar.core.constraints.BooleanVariableInterface;
import net.sf.javabdd.BDD;
public class BDDSolutionsIterator2<T> implements Iterator<T> {
// private BDD.BDDIterator bit;
private Iterator bit;
private String[] index2varMap;
private List<Assignment> assignments;
private Assignment assignmentDC; // variable dontcares (-1) are skipped
int j = 0;
public BDDSolutionsIterator2(BDD bdd, String[] index2varMap) {
// this.bit = bdd.allsat();
this.bit = new BDD.BDDIterator(bdd,bdd.support());
this.index2varMap = index2varMap;
this.assignments = new ArrayList<Assignment>();
assignmentDC = new Assignment();
}
public boolean hasNext() {
if ( assignments.size() == 0 && !bit.hasNext() ){
return false;
}
if (assignments.size() == 0) {
BDD sol = (BDD)bit.next();
System.out.println(sol);
assignments.clear();
assignments.add(new Assignment());
}
return true;
}
public T next() {
Assignment next = null;
if (hasNext()) {
next = assignments.get(0);
assignments.remove(0);
}
return (T)next;
}
public void remove() {
}
}