| 1189 | */ |
| 1190 | template<class View, class CtrlView, ReifyMode rm> |
| 1191 | ExecStatus |
| 1192 | postrecompact(Home home, ViewArray<View>& x, const TupleSet& ts, |
| 1193 | CtrlView b) { |
| 1194 | // Enforce invariant that there is at least one tuple... |
| 1195 | if (ts.tuples() == 0) { |
| 1196 | if (x.size() != 0) { |
| 1197 | if (rm != RM_PMI) |
| 1198 | GECODE_ME_CHECK(b.zero(home)); |
| 1199 | } else { |
| 1200 | if (rm != RM_IMP) |
| 1201 | GECODE_ME_CHECK(b.one(home)); |
| 1202 | } |
| 1203 | return ES_OK; |
| 1204 | } |
| 1205 | // Check whether a variable does not overlap with supported values |
| 1206 | for (int i=0; i<x.size(); i++) { |
| 1207 | TupleSet::Ranges rs(ts,i); |
| 1208 | ViewRanges<View> rx(x[i]); |
| 1209 | if (Iter::Ranges::disjoint(rs,rx)) { |
| 1210 | if (rm != RM_PMI) |
| 1211 | GECODE_ME_CHECK(b.zero(home)); |
| 1212 | return ES_OK; |
| 1213 | } |
| 1214 | } |
| 1215 | // Choose the right bit set implementation |
| 1216 | switch (ts.words()) { |
| 1217 | case 0U: |
| 1218 | GECODE_NEVER; return ES_OK; |
| 1219 | case 1U: |
| 1220 | return ReCompact<View,TinyBitSet<1U>,CtrlView,rm>::post(home,x,ts,b); |
| 1221 | case 2U: |
| 1222 | return ReCompact<View,TinyBitSet<2U>,CtrlView,rm>::post(home,x,ts,b); |
| 1223 | case 3U: |
| 1224 | return ReCompact<View,TinyBitSet<3U>,CtrlView,rm>::post(home,x,ts,b); |
| 1225 | case 4U: |
| 1226 | return ReCompact<View,TinyBitSet<4U>,CtrlView,rm>::post(home,x,ts,b); |
| 1227 | default: |
| 1228 | switch (Gecode::Support::u_type(ts.words())) { |
| 1229 | case Gecode::Support::IT_CHAR: |
| 1230 | return ReCompact<View,BitSet<unsigned char>,CtrlView,rm> |
| 1231 | ::post(home,x,ts,b); |
| 1232 | case Gecode::Support::IT_SHRT: |
| 1233 | return ReCompact<View,BitSet<unsigned short int>,CtrlView,rm> |
| 1234 | ::post(home,x,ts,b); |
| 1235 | case Gecode::Support::IT_INT: |
| 1236 | return ReCompact<View,BitSet<unsigned int>,CtrlView,rm> |
| 1237 | ::post(home,x,ts,b); |
| 1238 | default: GECODE_NEVER; |
| 1239 | } |
| 1240 | } |
| 1241 | GECODE_NEVER; |
| 1242 | return ES_OK; |
| 1243 | } |
| 1244 | |
| 1245 | }}} |
| 1246 | |