| 75 | |
| 76 | template<class A, class B, class C> |
| 77 | ExecStatus |
| 78 | Min<A,B,C>::propagate(Space& home, const ModEventDelta&) { |
| 79 | GECODE_ME_CHECK(x2.eq(home,min(x0.domain(),x1.domain()))); |
| 80 | GECODE_ME_CHECK(x0.gq(home,x2.min())); |
| 81 | GECODE_ME_CHECK(x1.gq(home,x2.min())); |
| 82 | if (x0 == x1) { |
| 83 | GECODE_ME_CHECK(x0.lq(home,x2.max())); |
| 84 | } else { |
| 85 | if (!overlap(x1.val(),x2.val())) GECODE_ME_CHECK(x0.lq(home,x2.max())); |
| 86 | if (!overlap(x0.val(),x2.val())) GECODE_ME_CHECK(x1.lq(home,x2.max())); |
| 87 | } |
| 88 | return (x0.assigned() && x1.assigned()) ? home.ES_SUBSUMED(*this) : ES_FIX; |
| 89 | } |
| 90 | |
| 91 | /* |
| 92 | * Bounds consistent max propagator |