| 52 | |
| 53 | template<class View, ReifyMode rm> |
| 54 | ExecStatus |
| 55 | ReIntSet<View,rm>::post(Home home, View x, const IntSet& s, BoolView b) { |
| 56 | if (s.ranges() == 0) { |
| 57 | if (rm == RM_PMI) |
| 58 | return ES_OK; |
| 59 | GECODE_ME_CHECK(b.zero(home)); |
| 60 | } else if (s.ranges() == 1) { |
| 61 | return ReRange<View,rm>::post(home,x,s.min(),s.max(),b); |
| 62 | } else if (b.one()) { |
| 63 | if (rm == RM_PMI) |
| 64 | return ES_OK; |
| 65 | IntSetRanges i_is(s); |
| 66 | GECODE_ME_CHECK(x.inter_r(home,i_is,false)); |
| 67 | } else if (b.zero()) { |
| 68 | if (rm == RM_IMP) |
| 69 | return ES_OK; |
| 70 | IntSetRanges i_is(s); |
| 71 | GECODE_ME_CHECK(x.minus_r(home,i_is,false)); |
| 72 | } else { |
| 73 | (void) new (home) ReIntSet<View,rm>(home,x,s,b); |
| 74 | } |
| 75 | return ES_OK; |
| 76 | } |
| 77 | |
| 78 | |
| 79 | template<class View, ReifyMode rm> |