Exemple #1
0
 @Override
 public void propagate(int varIdx, int mask) throws ContradictionException {
   if (bothEnumerated) {
     idms[varIdx].freeze();
     idms[varIdx].forEach(rem_proc.set(varIdx), EventType.REMOVE);
     idms[varIdx].unfreeze();
   } else {
     setBounds();
   }
 }
Exemple #2
0
 @Override
 public void propagate(int varIdx, int mask) throws ContradictionException {
   int idx2 = varIdx == 0 ? 1 : 0;
   switch (operator) {
     case EQ:
       if (IntEventType.isInstantiate(mask)) {
         filterOnInst(vars[idx2], vars[varIdx].getValue());
       } else {
         if (IntEventType.isRemove(mask) && vars[varIdx].hasEnumeratedDomain()) {
           idms[varIdx].freeze();
           idms[varIdx].forEachRemVal(remproc.set(varIdx));
           idms[varIdx].unfreeze();
         }
         if (IntEventType.isInclow(mask)) {
           filterOnInf(vars[varIdx], vars[idx2]);
         }
         if (IntEventType.isDecupp(mask)) {
           filterOnSup(vars[varIdx], vars[idx2]);
         }
       }
       break;
     case NQ:
       filterNeq();
       break;
     case GT:
       if (IntEventType.isInstantiate(mask)) {
         filterGTonVar(vars[varIdx], vars[idx2]);
       } else if (IntEventType.isBound(mask)) {
         filterGTonVar(vars[varIdx], vars[idx2]);
       }
       break;
     case LT:
       if (IntEventType.isInstantiate(mask)) {
         filterLTonVar(vars[varIdx], vars[idx2]);
       } else if (IntEventType.isBound(mask)) {
         filterLTonVar(vars[varIdx], vars[idx2]);
       }
       break;
     default:
       throw new SolverException("Invalid PropDistanceXYC operator " + operator);
   }
 }