40 namespace Gecode {
namespace Set {
namespace Element {
42 template<
class View,
class View0,
class View1>
47 :
Propagator(home), universe(theUniverse), iv(iv0), x0(y0), x1(y1) {
54 template<
class View,
class View0,
class View1>
60 x0.update(home,share,p.
x0);
61 x1.update(home,share,p.
x1);
66 template<
class View,
class View0,
class View1>
73 template<
class View,
class View0,
class View1>
87 template<
class View,
class View0,
class View1>
102 template<
class View,
class View0,
class View1>
108 template<
class View,
class View0,
class View1>
134 LUBndSet sofarBefore(home,universe);
142 if (iv[i].idx < vx0ub.
val()) {
147 assert(iv[i].idx == vx0ub.
val());
150 View candidate = iv[j].view;
151 int candidateInd = iv[j].idx;
164 if (candidate.cardMax() < x1.cardMin() ||
166 ModEvent me = (x0.exclude(home,candidateInd));
177 if (vx0() && vx0.
val()==candidateInd) {
180 ModEvent me = candidate.includeI(home,x1lb);
185 me = x1.intersectI(home,candub);
191 before[j].
update(home,sofarBefore);
202 for (
int k=i; k<
n; k++) {
208 if (x0.cardMax()==0) {
219 before[i].dispose(home);
226 ModEvent me = x1.includeI(home,sfB);
233 LUBndSet sofarAfter(home, universe);
237 for (
int i=n; i--;) {
238 if (sofarAfter.
size() == 0)
break;
248 ModEvent me = (x0.include(home,iv[i].idx));
253 me = iv[
i].view.excludeI(home,diff);
267 if (x0.assigned() && !x1.assigned()) {
268 int ubsize =
static_cast<int>(x0.lubSize());
275 ::
post(home(*
this),is,x1)));
276 }
else if (ubsize == 2) {
281 ::
post(home(*
this),a,b,x1)));
282 }
else if (ubsize == 1) {
292 bool allAssigned =
true;
293 for (
int i=iv.
size();
i--;) {
294 if (!iv[
i].view.assigned()) {
299 if (x1.assigned() && x0.assigned() && allAssigned) {