Example #1
0
  void
  member(Home home, const BoolVarArgs& x, BoolVar y, Reify r,
         IntConLevel) {
    using namespace Int;
    if (home.failed()) return;

    ViewArray<BoolView> xv(home,x);

    switch (r.mode()) {
    case RM_EQV:
      GECODE_ES_FAIL((Member::ReProp<BoolView,RM_EQV>
                      ::post(home,xv,y,r.var()))); 
      break;
    case RM_IMP:
      GECODE_ES_FAIL((Member::ReProp<BoolView,RM_IMP>
                      ::post(home,xv,y,r.var())));
      break;
    case RM_PMI:
      GECODE_ES_FAIL((Member::ReProp<BoolView,RM_PMI>
                      ::post(home,xv,y,r.var())));
      break;
    default: throw UnknownReifyMode("Int::member");
    }

  }
Example #2
0
 void
 max(Home home, SetVar s, IntVar x, Reify r){
   GECODE_POST;
   switch (r.mode()) {
   case RM_EQV:
     GECODE_ES_FAIL((Set::Int::ReMaxElement<Set::SetView,RM_EQV>
                    ::post(home,s,x,r.var())));
     break;
   case RM_IMP:
     GECODE_ES_FAIL((Set::Int::ReMaxElement<Set::SetView,RM_IMP>
                    ::post(home,s,x,r.var())));
     break;
   case RM_PMI:
     GECODE_ES_FAIL((Set::Int::ReMaxElement<Set::SetView,RM_PMI>
                    ::post(home,s,x,r.var())));
     break;
   default: throw Gecode::Int::UnknownReifyMode("Set::max");
   }
 }
Example #3
0
 void
 dom(Home home, IntVar x, const IntSet& is, Reify r, IntConLevel) {
   using namespace Int;
   Limits::check(is.min(),"Int::dom");
   Limits::check(is.max(),"Int::dom");
   if (home.failed()) return;
   switch (r.mode()) {
   case RM_EQV:
     GECODE_ES_FAIL((Dom::ReIntSet<IntView,RM_EQV>::post(home,x,is,r.var())));
     break;
   case RM_IMP:
     GECODE_ES_FAIL((Dom::ReIntSet<IntView,RM_IMP>::post(home,x,is,r.var())));
     break;
   case RM_PMI:
     GECODE_ES_FAIL((Dom::ReIntSet<IntView,RM_PMI>::post(home,x,is,r.var())));
     break;
   default: throw UnknownReifyMode("Int::dom");
   }
 }
Example #4
0
 void
 dom(Home home, IntVar x, int n, Reify r, IntConLevel) {
   using namespace Int;
   Limits::check(n,"Int::dom");
   if (home.failed()) return;
   switch (r.mode()) {
   case RM_EQV:
     GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,BoolView,RM_EQV>
                     ::post(home,x,n,r.var())));
     break;
   case RM_IMP:
     GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,BoolView,RM_IMP>
                     ::post(home,x,n,r.var())));
     break;
   case RM_PMI:
     GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,BoolView,RM_PMI>
                     ::post(home,x,n,r.var())));
     break;
   default: throw UnknownReifyMode("Int::dom");
   }
 }
Example #5
0
 void
 rel(Home home, IntVar x, IntRelType irt, int n, Reify r,
     IntConLevel icl) {
   Limits::check(n,"Int::rel");
   if (home.failed()) return;
   switch (irt) {
   case IRT_EQ:
     if ((icl == ICL_DOM) || (icl == ICL_DEF)) {
       switch (r.mode()) {
       case RM_EQV:
         GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,BoolView,RM_EQV>
                         ::post(home,x,n,r.var())));
         break;
       case RM_IMP:
         GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,BoolView,RM_IMP>
                         ::post(home,x,n,r.var())));
         break;
       case RM_PMI:
         GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,BoolView,RM_PMI>
                         ::post(home,x,n,r.var())));
         break;
       default: throw UnknownReifyMode("Int::rel");
       }
     } else {
       switch (r.mode()) {
       case RM_EQV:
         GECODE_ES_FAIL((Rel::ReEqBndInt<IntView,BoolView,RM_EQV>
                         ::post(home,x,n,r.var())));
         break;
       case RM_IMP:
         GECODE_ES_FAIL((Rel::ReEqBndInt<IntView,BoolView,RM_IMP>
                         ::post(home,x,n,r.var())));
         break;
       case RM_PMI:
         GECODE_ES_FAIL((Rel::ReEqBndInt<IntView,BoolView,RM_PMI>
                         ::post(home,x,n,r.var())));
         break;
       default: throw UnknownReifyMode("Int::rel");
       }
     }
     break;
   case IRT_NQ:
     {
       NegBoolView nb(r.var());
       if (icl == ICL_BND) {
         switch (r.mode()) {
         case RM_EQV:
           GECODE_ES_FAIL((Rel::ReEqBndInt<IntView,NegBoolView,RM_EQV>
                           ::post(home,x,n,nb)));
           break;
         case RM_IMP:
           GECODE_ES_FAIL((Rel::ReEqBndInt<IntView,NegBoolView,RM_PMI>
                           ::post(home,x,n,nb)));
           break;
         case RM_PMI:
           GECODE_ES_FAIL((Rel::ReEqBndInt<IntView,NegBoolView,RM_IMP>
                           ::post(home,x,n,nb)));
           break;
         default: throw UnknownReifyMode("Int::rel");
         }
       } else {
         switch (r.mode()) {
         case RM_EQV:
           GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,NegBoolView,RM_EQV>
                           ::post(home,x,n,nb)));
           break;
         case RM_IMP:
           GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,NegBoolView,RM_PMI>
                           ::post(home,x,n,nb)));
           break;
         case RM_PMI:
           GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,NegBoolView,RM_IMP>
                           ::post(home,x,n,nb)));
           break;
         default: throw UnknownReifyMode("Int::rel");
         }
       }
     }
     break;
   case IRT_LE:
     n--; // Fall through
   case IRT_LQ:
     switch (r.mode()) {
     case RM_EQV:
       GECODE_ES_FAIL((Rel::ReLqInt<IntView,BoolView,RM_EQV>
                       ::post(home,x,n,r.var())));
       break;
     case RM_IMP:
       GECODE_ES_FAIL((Rel::ReLqInt<IntView,BoolView,RM_IMP>
                       ::post(home,x,n,r.var())));
       break;
     case RM_PMI:
       GECODE_ES_FAIL((Rel::ReLqInt<IntView,BoolView,RM_PMI>
                       ::post(home,x,n,r.var())));
       break;
     default: throw UnknownReifyMode("Int::rel");
     }
     break;
   case IRT_GQ:
     n--; // Fall through
   case IRT_GR:
     {
       NegBoolView nb(r.var());
       switch (r.mode()) {
       case RM_EQV:
         GECODE_ES_FAIL((Rel::ReLqInt<IntView,NegBoolView,RM_EQV>
                         ::post(home,x,n,nb)));
         break;
       case RM_IMP:
         GECODE_ES_FAIL((Rel::ReLqInt<IntView,NegBoolView,RM_PMI>
                         ::post(home,x,n,nb)));
         break;
       case RM_PMI:
         GECODE_ES_FAIL((Rel::ReLqInt<IntView,NegBoolView,RM_IMP>
                         ::post(home,x,n,nb)));
         break;
       default: throw UnknownReifyMode("Int::rel");
       }
     }
     break;
   default:
     throw UnknownRelation("Int::rel");
   }
 }
Example #6
0
 void
 rel(Home home, IntVar x0, IntRelType irt, IntVar x1, Reify r,
     IntConLevel icl) {
   if (home.failed()) return;
   switch (irt) {
   case IRT_EQ:
     if ((icl == ICL_DOM) || (icl == ICL_DEF)) {
       switch (r.mode()) {
       case RM_EQV:
         GECODE_ES_FAIL((Rel::ReEqDom<IntView,BoolView,RM_EQV>
                         ::post(home,x0,x1,r.var())));
         break;
       case RM_IMP:
         GECODE_ES_FAIL((Rel::ReEqDom<IntView,BoolView,RM_IMP>
                         ::post(home,x0,x1,r.var())));
         break;
       case RM_PMI:
         GECODE_ES_FAIL((Rel::ReEqDom<IntView,BoolView,RM_PMI>
                         ::post(home,x0,x1,r.var())));
         break;
       default: throw UnknownReifyMode("Int::rel");
       }
     } else {
       switch (r.mode()) {
       case RM_EQV:
         GECODE_ES_FAIL((Rel::ReEqBnd<IntView,BoolView,RM_EQV>
                         ::post(home,x0,x1,r.var())));
         break;
       case RM_IMP:
         GECODE_ES_FAIL((Rel::ReEqBnd<IntView,BoolView,RM_IMP>
                         ::post(home,x0,x1,r.var())));
         break;
       case RM_PMI:
         GECODE_ES_FAIL((Rel::ReEqBnd<IntView,BoolView,RM_PMI>
                         ::post(home,x0,x1,r.var())));
         break;
       default: throw UnknownReifyMode("Int::rel");
       }
     }
     break;
   case IRT_NQ:
     {
       NegBoolView n(r.var());
       if (icl == ICL_BND) {
         switch (r.mode()) {
         case RM_EQV:
           GECODE_ES_FAIL((Rel::ReEqBnd<IntView,NegBoolView,RM_EQV>
                           ::post(home,x0,x1,n)));
           break;
         case RM_IMP:
           GECODE_ES_FAIL((Rel::ReEqBnd<IntView,NegBoolView,RM_PMI>
                           ::post(home,x0,x1,n)));
           break;
         case RM_PMI:
           GECODE_ES_FAIL((Rel::ReEqBnd<IntView,NegBoolView,RM_IMP>
                           ::post(home,x0,x1,n)));
           break;
         default: throw UnknownReifyMode("Int::rel");
         }
       } else {
         switch (r.mode()) {
         case RM_EQV:
           GECODE_ES_FAIL((Rel::ReEqDom<IntView,NegBoolView,RM_EQV>
                           ::post(home,x0,x1,n)));
           break;
         case RM_IMP:
           GECODE_ES_FAIL((Rel::ReEqDom<IntView,NegBoolView,RM_PMI>
                           ::post(home,x0,x1,n)));
           break;
         case RM_PMI:
           GECODE_ES_FAIL((Rel::ReEqDom<IntView,NegBoolView,RM_IMP>
                           ::post(home,x0,x1,n)));
           break;
         default: throw UnknownReifyMode("Int::rel");
         }
       }
     }
     break;
   case IRT_GQ:
     std::swap(x0,x1); // Fall through
   case IRT_LQ:
     switch (r.mode()) {
     case RM_EQV:
       GECODE_ES_FAIL((Rel::ReLq<IntView,BoolView,RM_EQV>
                       ::post(home,x0,x1,r.var())));
       break;
     case RM_IMP:
       GECODE_ES_FAIL((Rel::ReLq<IntView,BoolView,RM_IMP>
                       ::post(home,x0,x1,r.var())));
       break;
     case RM_PMI:
       GECODE_ES_FAIL((Rel::ReLq<IntView,BoolView,RM_PMI>
                       ::post(home,x0,x1,r.var())));
       break;
     default: throw UnknownReifyMode("Int::rel");
     }
     break;
   case IRT_LE:
     std::swap(x0,x1); // Fall through
   case IRT_GR:
     {
       NegBoolView n(r.var());
       switch (r.mode()) {
       case RM_EQV:
         GECODE_ES_FAIL((Rel::ReLq<IntView,NegBoolView,RM_EQV>
                         ::post(home,x0,x1,n)));
         break;
       case RM_IMP:
         GECODE_ES_FAIL((Rel::ReLq<IntView,NegBoolView,RM_PMI>
                         ::post(home,x0,x1,n)));
         break;
       case RM_PMI:
         GECODE_ES_FAIL((Rel::ReLq<IntView,NegBoolView,RM_IMP>
                         ::post(home,x0,x1,n)));
         break;
       default: throw UnknownReifyMode("Int::rel");
       }
     }
     break;
   default:
     throw UnknownRelation("Int::rel");
   }
 }