40 namespace Gecode {
namespace Set {
namespace Int {
48 :
Advisor(home,p,c), idx(index) {
50 p.
y.subscribe(home,*
this);
52 p.
x[
idx].subscribe(home,*
this);
60 :
Advisor(home,share,a), idx(a.idx) {}
74 p.
y.cancel(home,*
this);
76 p.
x[idx].cancel(home,*
this);
93 }
else if (
x[
i].
one()) {
110 :
Super(home,share,p), running(false) {
111 co.update(home, share, p.
co);
133 (void) Super::dispose(home);
134 return sizeof(*this);
147 if (zeros.size() > 0) {
152 if (ones.size() > 0) {
159 if (delta.glbMin() != 1 || delta.glbMax() != 0) {
160 if (!delta.glbAny()) {
161 for (
int i=delta.glbMin();
i<=delta.glbMax();
i++)
170 if (delta.lubMin() != 1 || delta.lubMax() != 0) {
171 if (!delta.lubAny()) {
172 for (
int i=delta.lubMin();
i<=delta.lubMax();
i++)
177 for (; cur < lub.min(); cur++) {
182 for (; cur < x.size(); cur++) {
200 int index = a.
index();
201 if ( (running && index == -1 && me !=
ME_SET_VAL)
207 if (x[index].zero()) {
209 zeros.include(home, index, index, dummy);
211 assert(x[index].
one());
213 ones.include(home, index, index, dummy);
221 SetDelta(2,0, delta.lubMin(), delta.lubMax());
223 if (delta.glbMin() == 1 && delta.glbMax() == 0) {
226 delta.lubMin(), delta.lubMax());
228 if (delta.glbMin() != 2 || delta.glbMax() != 0) {
229 if ((delta.glbMin() <= d.
glbMin() && delta.glbMax() >= d.
glbMin())
231 (delta.glbMin() <= d.
glbMax() && delta.glbMax() >= d.
glbMax())
236 delta.lubMin(), delta.lubMax());
239 SetDelta(2, 0, delta.lubMin(), delta.lubMax());
248 SetDelta(delta.glbMin(), delta.glbMax(), 2,0);
250 if (delta.lubMin() == 1 && delta.lubMax() == 0) {
252 SetDelta(delta.glbMin(), delta.glbMax(),
255 if (delta.lubMin() != 2 || delta.lubMax() != 0) {
256 if ((delta.lubMin() <= d.
lubMin() && delta.lubMax() >= d.
lubMin())
258 (delta.lubMin() <= d.
lubMax() && delta.lubMax() >= d.
lubMax())
261 SetDelta(delta.lubMin(), delta.lubMax(),
267 SetDelta(delta.glbMin(), delta.glbMax(), 2, 0);