001package org.clafer.choco.constraint.propagator; 002 003import org.clafer.common.Util; 004import solver.constraints.Propagator; 005import solver.constraints.PropagatorPriority; 006import solver.exception.ContradictionException; 007import solver.variables.BoolVar; 008import solver.variables.EventType; 009import util.ESat; 010 011/** 012 * 013 * @author jimmy 014 */ 015public class PropAnd extends Propagator<BoolVar> { 016 017 public PropAnd(BoolVar[] vars) { 018 super(vars, PropagatorPriority.UNARY, true); 019 } 020 021 @Override 022 public int getPropagationConditions(int vIdx) { 023 return EventType.INSTANTIATE.mask; 024 } 025 026 @Override 027 public void propagate(int evtmask) throws ContradictionException { 028 for (BoolVar var : vars) { 029 var.setToTrue(aCause); 030 } 031 } 032 033 @Override 034 public void propagate(int idxVarInProp, int mask) throws ContradictionException { 035 propagate(mask); 036 } 037 038 @Override 039 public ESat isEntailed() { 040 boolean allInstantiated = true; 041 for (BoolVar var : vars) { 042 if (var.instantiated()) { 043 if (var.getValue() == 0) { 044 return ESat.FALSE; 045 } 046 } else { 047 allInstantiated = false; 048 } 049 } 050 return allInstantiated ? ESat.TRUE : ESat.UNDEFINED; 051 } 052 053 @Override 054 public String toString() { 055 return Util.intercalate(" && ", vars); 056 } 057}