| 81 | |
| 82 | template<class BVA, class BVB> |
| 83 | ExecStatus |
| 84 | Eq<BVA,BVB>::propagate(Space& home, const ModEventDelta&) { |
| 85 | #define GECODE_INT_STATUS(S0,S1) \ |
| 86 | ((BVA::S0<<(1*BVA::BITS))|(BVB::S1<<(0*BVB::BITS))) |
| 87 | switch ((x0.status() << (1*BVA::BITS)) | (x1.status() << (0*BVB::BITS))) { |
| 88 | case GECODE_INT_STATUS(NONE,NONE): |
| 89 | GECODE_NEVER; |
| 90 | case GECODE_INT_STATUS(NONE,ZERO): |
| 91 | GECODE_ME_CHECK(x0.zero_none(home)); break; |
| 92 | case GECODE_INT_STATUS(NONE,ONE): |
| 93 | GECODE_ME_CHECK(x0.one_none(home)); break; |
| 94 | case GECODE_INT_STATUS(ZERO,NONE): |
| 95 | GECODE_ME_CHECK(x1.zero_none(home)); break; |
| 96 | case GECODE_INT_STATUS(ZERO,ZERO): |
| 97 | break; |
| 98 | case GECODE_INT_STATUS(ZERO,ONE): |
| 99 | return ES_FAILED; |
| 100 | case GECODE_INT_STATUS(ONE,NONE): |
| 101 | GECODE_ME_CHECK(x1.one_none(home)); break; |
| 102 | case GECODE_INT_STATUS(ONE,ZERO): |
| 103 | return ES_FAILED; |
| 104 | case GECODE_INT_STATUS(ONE,ONE): |
| 105 | break; |
| 106 | default: |
| 107 | GECODE_NEVER; |
| 108 | } |
| 109 | return home.ES_SUBSUMED(*this); |
| 110 | #undef GECODE_INT_STATUS |
| 111 | } |
| 112 | |
| 113 | template<class BV> |
| 114 | forceinline |