4 public class DNFConstraint {
7 public DNFConstraint(Predicate p) {
8 conjunctions=new Vector();
9 conjunctions.add(new Conjunction(new DNFPredicate(false,p)));
12 public DNFConstraint(DNFPredicate dp) {
13 conjunctions=new Vector();
14 conjunctions.add(new Conjunction(dp));
17 public DNFConstraint(Conjunction conj) {
18 conjunctions=new Vector();
19 conjunctions.add(conj);
22 public DNFConstraint(Vector conj) {
27 conjunctions=new Vector();
31 return conjunctions.size();
34 Conjunction get(int i) {
35 return (Conjunction)conjunctions.get(i);
38 void add(Conjunction c) {
42 public DNFConstraint copy() {
43 Vector vector=new Vector();
44 for (int i=0;i<size();i++) {
45 vector.add(get(i).copy());
47 return new DNFConstraint(vector);
50 public DNFConstraint copyminus(Conjunction c) {
51 Vector vector=new Vector();
52 for (int i=0;i<size();i++) {
53 Conjunction cur_conj=get(i);
55 vector.add(cur_conj.copy());
57 return new DNFConstraint(vector);
60 public DNFConstraint and(DNFConstraint c) {
61 DNFConstraint newdnf=new DNFConstraint();
62 for(int i=0;i<size();i++) {
63 for(int j=0;j<c.size();j++) {
64 newdnf.add(get(i).append(c.get(j))); //Cross product
70 public DNFConstraint or(DNFConstraint c) {
71 DNFConstraint copy=copy();
72 for(int i=0;i<c.size();i++) {
73 copy.add(c.get(i).copy()); //Add in other conjunctions
78 public DNFConstraint not() {
79 DNFConstraint copy=copy();
80 DNFConstraint notconst=null;
81 for (int i=0;i<size();i++) {
82 Conjunction conj=copy.get(i);
83 DNFConstraint newconst=null;
84 for (int j=0;j<conj.size();j++) {
85 DNFPredicate dp=conj.get(j);
88 newconst=new DNFConstraint(dp);
90 newconst=newconst.or(new DNFConstraint(dp));
95 notconst=notconst.and(newconst);