package splar.core.constraints;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class CNFFormula {
private Set<CNFClause> clauses;
public CNFFormula() {
clauses = new LinkedHashSet<CNFClause>();
}
public void addClause(CNFClause clause) {
clauses.add(clause);
}
public void addClauses(Collection<CNFClause> clauses) {
this.clauses.addAll(clauses);
}
public Set<CNFClause> getClauses() {
return clauses;
}
public double getClauseDensity() {
if ( getVariables().size() == 0 ) {
return 0;
}
return (1.0*clauses.size())/getVariables().size();
}
public int countClauses() {
return clauses.size();
}
public Set<CNFLiteral> getLiterals() {
Set<CNFLiteral> set = new HashSet<CNFLiteral>();
for( Iterator<CNFClause> it = clauses.iterator() ; it.hasNext() ; ) {
for( Iterator<CNFLiteral> it2 = it.next().getLiterals().iterator() ; it2.hasNext() ; ) {
set.add(it2.next());
}
}
return set;
}
public int countLiterals() {
return getLiterals().size();
}
public Set<BooleanVariableInterface> getVariables() {
Set<BooleanVariableInterface> set = new HashSet<BooleanVariableInterface>();
for( Iterator<CNFClause> it = clauses.iterator() ; it.hasNext() ; ) {
for( Iterator<CNFLiteral> it2 = it.next().getLiterals().iterator() ; it2.hasNext() ; ) {
set.add(it2.next().getVariable());
}
}
return set;
}
public int countVariables() {
return getVariables().size();
}
public int calculateClauseSpan(Map<String,Integer> variable2indexMap) {
int span = 0;
for( Iterator<CNFClause> it = clauses.iterator() ; it.hasNext() ; ) {
span += it.next().calculateSpan(variable2indexMap);
}
return span;
}
public String toString() {
StringBuffer toString = new StringBuffer(100);
for( Iterator<CNFClause> it = clauses.iterator() ; it.hasNext() ; ) {
toString.append(it.next());
}
return toString.toString();
}
}