MCPcopy Create free account
hub / github.com/Gecode/gecode / postrecompact

Function postrecompact

gecode/int/extensional/compact.hpp:1191–1243  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 8

disjointFunction · 0.85
u_typeFunction · 0.85
tuplesMethod · 0.80
postFunction · 0.50
sizeMethod · 0.45
zeroMethod · 0.45
oneMethod · 0.45
wordsMethod · 0.45

Tested by

no test coverage detected