void rel(Home home, SetVar s, IntRelType r, IntVar x) { if (home.failed()) return; switch (r) { case IRT_EQ: { Gecode::Int::IntView xv(x); Set::SingletonView xsingle(xv); GECODE_ES_FAIL( (Set::Rel::Eq<Set::SetView,Set::SingletonView> ::post(home,s,xsingle))); } break; case IRT_NQ: { Gecode::Set::SetView sv(s); GECODE_ME_FAIL( sv.cardMin(home, 1)); Gecode::Int::IntView xv(x); Set::SingletonView xsingle(xv); GECODE_ES_FAIL( (Set::Rel::NoSubset<Set::SingletonView,Set::SetView> ::post(home,xsingle,sv))); } break; case IRT_LQ: { IntVar tmp(home, Int::Limits::min, Int::Limits::max); rel(home, tmp, IRT_LQ, x); GECODE_ES_FAIL(Set::Int::MaxElement<Set::SetView>::post(home,s,tmp)); } break; case IRT_LE: { IntVar tmp(home, Int::Limits::min, Int::Limits::max); rel(home, tmp, IRT_LE, x); GECODE_ES_FAIL(Set::Int::MaxElement<Set::SetView>::post(home,s,tmp)); } break; case IRT_GQ: { IntVar tmp(home, Int::Limits::min, Int::Limits::max); rel(home, tmp, IRT_GQ, x); GECODE_ES_FAIL(Set::Int::MinElement<Set::SetView>::post(home,s,tmp)); } break; case IRT_GR: { IntVar tmp(home, Int::Limits::min, Int::Limits::max); rel(home, tmp, IRT_GR, x); GECODE_ES_FAIL(Set::Int::MinElement<Set::SetView>::post(home,s,tmp)); } break; default: throw UnknownRelation("Set::rel"); } }
void post(Home home, Term* t, int n, FloatRelType frt, FloatVal c) { Region re(home); switch (frt) { case FRT_EQ: case FRT_LQ: case FRT_GQ: break; case FRT_NQ: case FRT_LE: case FRT_GR: rel(home, extend(home,re,t,n), frt, c); frt=FRT_EQ; c=0.0; break; default: throw UnknownRelation("Float::linear"); } dopost(home, t, n, frt, c); }