void extensional(Home home, const BoolVarArgs& x, const TupleSet& t, IntPropLevel ipl) { using namespace Int; if (!t.finalized()) throw NotYetFinalized("Int::extensional"); if (t.arity() != x.size()) throw ArgumentSizeMismatch("Int::extensional"); GECODE_POST; if (t.tuples()==0) { if (x.size()!=0) { home.fail(); } return; } // Construct view array ViewArray<BoolView> xv(home,x); if (ipl & IPL_MEMORY) { if (x.same(home)) { GECODE_ES_FAIL((Extensional::Basic<BoolView,true> ::post(home,xv,t))); } else { GECODE_ES_FAIL((Extensional::Basic<BoolView,false> ::post(home,xv,t))); } } else { GECODE_ES_FAIL((Extensional::Incremental<BoolView> ::post(home,xv,t))); } }
void extensional(Home home, const BoolVarArgs& x, const TupleSet& t, ExtensionalPropKind epk, IntConLevel) { using namespace Int; if (!t.finalized()) throw NotYetFinalized("Int::extensional"); if (t.arity() != x.size()) throw ArgumentSizeMismatch("Int::extensional"); if (home.failed()) return; // Construct view array ViewArray<BoolView> xv(home,x); switch (epk) { case EPK_SPEED: GECODE_ES_FAIL((Extensional::Incremental<BoolView> ::post(home,xv,t))); break; default: if (x.same(home)) { GECODE_ES_FAIL((Extensional::Basic<BoolView,true> ::post(home,xv,t))); } else { GECODE_ES_FAIL((Extensional::Basic<BoolView,false> ::post(home,xv,t))); } break; } }