Esempio n. 1
0
 ExecStatus
 ReLeFloat<View,CtrlView,rm>::post(Home home, View x, FloatVal c, CtrlView b) {
   if (b.one()) {
     if (rm != RM_PMI)
     {
       GECODE_ME_CHECK(x.lq(home,c.max()));
       if (x.assigned() && (x.max() >= c.min()))
         return ES_FAILED;
       (void) new (home) ReLeFloat<View,CtrlView,rm>(home,x,c,b);
     }
   } else if (b.zero()) {
     if (rm != RM_IMP)
       GECODE_ME_CHECK(x.gq(home,c.min()));
   } else {
     switch (rtest_le(x,c)) {
     case RT_TRUE:
       if (rm != RM_IMP)
         GECODE_ME_CHECK(b.one(home));
       break;
     case RT_FALSE:
       if (rm != RM_PMI)
         GECODE_ME_CHECK(b.zero(home));
       break;
     case RT_MAYBE:
       (void) new (home) ReLeFloat<View,CtrlView,rm>(home,x,c,b);
       break;
     default: GECODE_NEVER;
     }
   }
   return ES_OK;
 }
Esempio n. 2
0
File: eq.hpp Progetto: Gecode/gecode
 ExecStatus
 ReEqFloat<View,CtrlView,rm>::post(Home home, View x, FloatVal c, CtrlView b) {
   if (b.one()) {
     if (rm != RM_PMI)
       GECODE_ME_CHECK(x.eq(home,c));
   } else if (x.assigned()) {
     if (overlap(x.val(),c)) {
       if (rm != RM_IMP)
         GECODE_ME_CHECK(b.one(home));
     } else {
       if (rm != RM_PMI)
         GECODE_ME_CHECK(b.zero(home));
     }
   } else {
     (void) new (home) ReEqFloat(home,x,c,b);
   }
   return ES_OK;
 }
Esempio n. 3
0
File: eq.hpp Progetto: Gecode/gecode
 ExecStatus
 ReEq<View,CtrlView,rm>::post(Home home, View x0, View x1, CtrlView b){
   if (b.one()) {
     if (rm == RM_PMI)
       return ES_OK;
     return Eq<View,View>::post(home,x0,x1);
   }
   if (b.zero()) {
     if (rm == RM_IMP)
       return ES_OK;
     return Nq<View,View>::post(home,x0,x1);
   }
   if (!same(x0,x1)) {
     (void) new (home) ReEq(home,x0,x1,b);
   } else if (rm != RM_IMP) {
     GECODE_ME_CHECK(b.one(home));
   }
   return ES_OK;
 }
Esempio n. 4
0
 ExecStatus
 ReLq<View,CtrlView,rm>::post(Home home, View x0, View x1, CtrlView b) {
   if (b.one()) {
     if (rm == RM_PMI)
       return ES_OK;
     return Lq<View>::post(home,x0,x1);
   }
   if (b.zero()) {
     if (rm == RM_IMP)
       return ES_OK;
     return Le<View>::post(home,x1,x0);
   }
   if (!same(x0,x1)) {
     switch (rtest_lq(x0,x1)) {
     case RT_TRUE:
       if (rm != RM_IMP)
         GECODE_ME_CHECK(b.one_none(home)); 
       break;
     case RT_FALSE:
       if (rm != RM_PMI)
         GECODE_ME_CHECK(b.zero_none(home)); 
       break;
     case RT_MAYBE:
       if (!x0.assigned() || !x1.assigned())
         (void) new (home) ReLq<View,CtrlView,rm>(home,x0,x1,b);
       else {
         if (rm != RM_IMP)
           GECODE_ME_CHECK(b.one_none(home)); 
       }
       break;
     default: GECODE_NEVER;
     }
   } else if (rm != RM_IMP) {
     GECODE_ME_CHECK(b.one_none(home));
   }
   return ES_OK;
 }