예제 #1
0
 public PropIntersection(SetVar[] sets, SetVar intersection) {
   super(ArrayUtils.append(sets, new SetVar[] {intersection}), PropagatorPriority.LINEAR);
   k = sets.length;
   sdm = new SetDeltaMonitor[k + 1];
   for (int i = 0; i <= k; i++) {
     sdm[i] = this.vars[i].monitorDelta(this);
   }
   interRemToTreat = SetFactory.makeStoredSet(SetType.LINKED_LIST, 0, environment);
   setAddToTreat = SetFactory.makeStoredSet(SetType.LINKED_LIST, 0, environment);
   // PROCEDURES
   intersectionForced =
       new IntProcedure() {
         @Override
         public void execute(int element) throws ContradictionException {
           for (int i = 0; i < k; i++) {
             vars[i].addToKernel(element, aCause);
           }
         }
       };
   intersectionRemoved =
       new IntProcedure() {
         @Override
         public void execute(int element) throws ContradictionException {
           interRemToTreat.add(element);
         }
       };
   setForced =
       new IntProcedure() {
         @Override
         public void execute(int element) throws ContradictionException {
           if (!setAddToTreat.contain(element)) setAddToTreat.add(element);
         }
       };
   setRemoved =
       new IntProcedure() {
         @Override
         public void execute(int element) throws ContradictionException {
           vars[k].removeFromEnvelope(element, aCause);
         }
       };
 }