| 65 | |
| 66 | template<class View0, class View1> |
| 67 | ExecStatus |
| 68 | Eq<View0,View1>::propagate(Space& home, const ModEventDelta& med) { |
| 69 | |
| 70 | ModEvent me0 = View0::me(med); |
| 71 | ModEvent me1 = View1::me(med); |
| 72 | |
| 73 | Region r; |
| 74 | |
| 75 | if (testSetEventLB(me0,me1)) { |
| 76 | GlbRanges<View0> x0lb(x0); |
| 77 | GlbRanges<View1> x1lb(x1); |
| 78 | Iter::Ranges::Union<GlbRanges<View0>,GlbRanges<View1> > lbu(x0lb,x1lb); |
| 79 | Iter::Ranges::Cache lbuc(r,lbu); |
| 80 | GECODE_ME_CHECK(x0.includeI(home,lbuc)); |
| 81 | lbuc.reset(); |
| 82 | GECODE_ME_CHECK(x1.includeI(home,lbuc)); |
| 83 | } |
| 84 | |
| 85 | if (testSetEventUB(me0,me1)) { |
| 86 | LubRanges<View0> x0ub(x0); |
| 87 | LubRanges<View1> x1ub(x1); |
| 88 | Iter::Ranges::Inter<LubRanges<View0>,LubRanges<View1> > ubi(x0ub,x1ub); |
| 89 | Iter::Ranges::Cache ubic(r,ubi); |
| 90 | GECODE_ME_CHECK(x0.intersectI(home,ubic)); |
| 91 | ubic.reset(); |
| 92 | GECODE_ME_CHECK(x1.intersectI(home,ubic)); |
| 93 | } |
| 94 | |
| 95 | if (testSetEventCard(me0,me1)) { |
| 96 | unsigned int max = std::min(x0.cardMax(),x1.cardMax()); |
| 97 | unsigned int min = std::max(x0.cardMin(),x1.cardMin()); |
| 98 | GECODE_ME_CHECK(x0.cardMax(home,max)); |
| 99 | GECODE_ME_CHECK(x1.cardMax(home,max)); |
| 100 | GECODE_ME_CHECK(x0.cardMin(home,min)); |
| 101 | GECODE_ME_CHECK(x1.cardMin(home,min)); |
| 102 | } |
| 103 | |
| 104 | if (x0.assigned()) { |
| 105 | assert (x1.assigned()); |
| 106 | return home.ES_SUBSUMED(*this); |
| 107 | } |
| 108 | return shared(x0,x1) ? ES_NOFIX : ES_FIX; |
| 109 | } |
| 110 | |
| 111 | }}} |
| 112 |
nothing calls this directly
no test coverage detected