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); } }; }