void member(Home home, const BoolVarArgs& x, BoolVar y, Reify r, IntConLevel) { using namespace Int; if (home.failed()) return; ViewArray<BoolView> xv(home,x); switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Member::ReProp<BoolView,RM_EQV> ::post(home,xv,y,r.var()))); break; case RM_IMP: GECODE_ES_FAIL((Member::ReProp<BoolView,RM_IMP> ::post(home,xv,y,r.var()))); break; case RM_PMI: GECODE_ES_FAIL((Member::ReProp<BoolView,RM_PMI> ::post(home,xv,y,r.var()))); break; default: throw UnknownReifyMode("Int::member"); } }
void max(Home home, SetVar s, IntVar x, Reify r){ GECODE_POST; switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Set::Int::ReMaxElement<Set::SetView,RM_EQV> ::post(home,s,x,r.var()))); break; case RM_IMP: GECODE_ES_FAIL((Set::Int::ReMaxElement<Set::SetView,RM_IMP> ::post(home,s,x,r.var()))); break; case RM_PMI: GECODE_ES_FAIL((Set::Int::ReMaxElement<Set::SetView,RM_PMI> ::post(home,s,x,r.var()))); break; default: throw Gecode::Int::UnknownReifyMode("Set::max"); } }
void dom(Home home, IntVar x, const IntSet& is, Reify r, IntConLevel) { using namespace Int; Limits::check(is.min(),"Int::dom"); Limits::check(is.max(),"Int::dom"); if (home.failed()) return; switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Dom::ReIntSet<IntView,RM_EQV>::post(home,x,is,r.var()))); break; case RM_IMP: GECODE_ES_FAIL((Dom::ReIntSet<IntView,RM_IMP>::post(home,x,is,r.var()))); break; case RM_PMI: GECODE_ES_FAIL((Dom::ReIntSet<IntView,RM_PMI>::post(home,x,is,r.var()))); break; default: throw UnknownReifyMode("Int::dom"); } }
void dom(Home home, IntVar x, int n, Reify r, IntConLevel) { using namespace Int; Limits::check(n,"Int::dom"); if (home.failed()) return; switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,BoolView,RM_EQV> ::post(home,x,n,r.var()))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,BoolView,RM_IMP> ::post(home,x,n,r.var()))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,BoolView,RM_PMI> ::post(home,x,n,r.var()))); break; default: throw UnknownReifyMode("Int::dom"); } }
void rel(Home home, IntVar x, IntRelType irt, int n, Reify r, IntConLevel icl) { Limits::check(n,"Int::rel"); if (home.failed()) return; switch (irt) { case IRT_EQ: if ((icl == ICL_DOM) || (icl == ICL_DEF)) { switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,BoolView,RM_EQV> ::post(home,x,n,r.var()))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,BoolView,RM_IMP> ::post(home,x,n,r.var()))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,BoolView,RM_PMI> ::post(home,x,n,r.var()))); break; default: throw UnknownReifyMode("Int::rel"); } } else { switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReEqBndInt<IntView,BoolView,RM_EQV> ::post(home,x,n,r.var()))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReEqBndInt<IntView,BoolView,RM_IMP> ::post(home,x,n,r.var()))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReEqBndInt<IntView,BoolView,RM_PMI> ::post(home,x,n,r.var()))); break; default: throw UnknownReifyMode("Int::rel"); } } break; case IRT_NQ: { NegBoolView nb(r.var()); if (icl == ICL_BND) { switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReEqBndInt<IntView,NegBoolView,RM_EQV> ::post(home,x,n,nb))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReEqBndInt<IntView,NegBoolView,RM_PMI> ::post(home,x,n,nb))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReEqBndInt<IntView,NegBoolView,RM_IMP> ::post(home,x,n,nb))); break; default: throw UnknownReifyMode("Int::rel"); } } else { switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,NegBoolView,RM_EQV> ::post(home,x,n,nb))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,NegBoolView,RM_PMI> ::post(home,x,n,nb))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReEqDomInt<IntView,NegBoolView,RM_IMP> ::post(home,x,n,nb))); break; default: throw UnknownReifyMode("Int::rel"); } } } break; case IRT_LE: n--; // Fall through case IRT_LQ: switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReLqInt<IntView,BoolView,RM_EQV> ::post(home,x,n,r.var()))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReLqInt<IntView,BoolView,RM_IMP> ::post(home,x,n,r.var()))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReLqInt<IntView,BoolView,RM_PMI> ::post(home,x,n,r.var()))); break; default: throw UnknownReifyMode("Int::rel"); } break; case IRT_GQ: n--; // Fall through case IRT_GR: { NegBoolView nb(r.var()); switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReLqInt<IntView,NegBoolView,RM_EQV> ::post(home,x,n,nb))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReLqInt<IntView,NegBoolView,RM_PMI> ::post(home,x,n,nb))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReLqInt<IntView,NegBoolView,RM_IMP> ::post(home,x,n,nb))); break; default: throw UnknownReifyMode("Int::rel"); } } break; default: throw UnknownRelation("Int::rel"); } }
void rel(Home home, IntVar x0, IntRelType irt, IntVar x1, Reify r, IntConLevel icl) { if (home.failed()) return; switch (irt) { case IRT_EQ: if ((icl == ICL_DOM) || (icl == ICL_DEF)) { switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReEqDom<IntView,BoolView,RM_EQV> ::post(home,x0,x1,r.var()))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReEqDom<IntView,BoolView,RM_IMP> ::post(home,x0,x1,r.var()))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReEqDom<IntView,BoolView,RM_PMI> ::post(home,x0,x1,r.var()))); break; default: throw UnknownReifyMode("Int::rel"); } } else { switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReEqBnd<IntView,BoolView,RM_EQV> ::post(home,x0,x1,r.var()))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReEqBnd<IntView,BoolView,RM_IMP> ::post(home,x0,x1,r.var()))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReEqBnd<IntView,BoolView,RM_PMI> ::post(home,x0,x1,r.var()))); break; default: throw UnknownReifyMode("Int::rel"); } } break; case IRT_NQ: { NegBoolView n(r.var()); if (icl == ICL_BND) { switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReEqBnd<IntView,NegBoolView,RM_EQV> ::post(home,x0,x1,n))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReEqBnd<IntView,NegBoolView,RM_PMI> ::post(home,x0,x1,n))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReEqBnd<IntView,NegBoolView,RM_IMP> ::post(home,x0,x1,n))); break; default: throw UnknownReifyMode("Int::rel"); } } else { switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReEqDom<IntView,NegBoolView,RM_EQV> ::post(home,x0,x1,n))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReEqDom<IntView,NegBoolView,RM_PMI> ::post(home,x0,x1,n))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReEqDom<IntView,NegBoolView,RM_IMP> ::post(home,x0,x1,n))); break; default: throw UnknownReifyMode("Int::rel"); } } } break; case IRT_GQ: std::swap(x0,x1); // Fall through case IRT_LQ: switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReLq<IntView,BoolView,RM_EQV> ::post(home,x0,x1,r.var()))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReLq<IntView,BoolView,RM_IMP> ::post(home,x0,x1,r.var()))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReLq<IntView,BoolView,RM_PMI> ::post(home,x0,x1,r.var()))); break; default: throw UnknownReifyMode("Int::rel"); } break; case IRT_LE: std::swap(x0,x1); // Fall through case IRT_GR: { NegBoolView n(r.var()); switch (r.mode()) { case RM_EQV: GECODE_ES_FAIL((Rel::ReLq<IntView,NegBoolView,RM_EQV> ::post(home,x0,x1,n))); break; case RM_IMP: GECODE_ES_FAIL((Rel::ReLq<IntView,NegBoolView,RM_PMI> ::post(home,x0,x1,n))); break; case RM_PMI: GECODE_ES_FAIL((Rel::ReLq<IntView,NegBoolView,RM_IMP> ::post(home,x0,x1,n))); break; default: throw UnknownReifyMode("Int::rel"); } } break; default: throw UnknownRelation("Int::rel"); } }