38 namespace Gecode {
namespace Int {
namespace Bool {
45 template<
class VX,
class VY>
50 (home,x0[x0.
size()-1],y0[y0.
size()-1]), x(x0), y(y0) {
55 template<
class VX,
class VY>
61 template<
class VX,
class VY>
69 template<
class VX,
class VY>
79 x[0]=x[
i]; n=1;
break;
80 }
else if (x[
i].zero()) {
94 y[0]=y[
i]; n=1;
break;
95 }
else if (y[
i].zero()) {
102 if ((x.size() == 0) && (y.size() == 0))
108 template<
class VX,
class VY>
111 for (
int i=x.
size();
i--; )
114 else if (x[
i].zero())
118 for (
int i=y.
size();
i--; )
121 else if (y[
i].zero())
125 if ((x.
size() == 1) && (y.
size() == 1)) {
127 }
else if (!x.
shared(home,y)) {
133 template<
class VX,
class VY>
137 return sizeof(*this);
140 template<
class VX,
class VY>
151 }
else if (x[
i].zero()) {
155 if ((
i == 0) && (y.
size() == 0)) {
156 VX z = x[0]; x.
size(0);
160 x0=x[
i]; x[
i]=x[--n];
167 for (
int i=y.
size();
i--; )
175 template<
class VX,
class VY>
178 if (x0.one() || x1.one())
195 template<
class VX,
class VY>
201 template<
class VX,
class VY>
206 template<
class VX,
class VY>
216 template<
class VX,
class VY>
219 :
Propagator(home,share,p), n_zero(p.n_zero) {
222 z.update(home,share,p.
z);
234 x[
i]=x[--n]; n_zero--;
240 template<
class VX,
class VY>
248 template<
class VX,
class VY>
255 for (
int i=x.
size();
i--; )
257 for (
int i=y.
size();
i--; )
261 for (
int i=x.
size();
i--; )
265 }
else if (x[
i].zero()) {
270 for (
int i=y.
size();
i--; )
274 }
else if (y[
i].zero()) {
279 if ((x.
size() == 1) && (y.
size() == 1)) {
281 }
else if (x.
shared(home,y)) {
289 template<
class VX,
class VY>
295 template<
class VX,
class VY>
300 x.cancel(home,as.advisor());
302 y.cancel(home,as.advisor());
303 as.advisor().dispose(home,
c);
309 template<
class VX,
class VY>
314 return sizeof(*this);
318 template<
class VX,
class VY>
323 if ((a.
x && VX::zero(d)) || (!a.
x && VY::zero(d)))
324 if (++n_zero < x.size() + y.size())
329 template<
class VX,
class VY>
335 for (
int i = x.
size();
i--; )
337 for (
int i = y.
size();
i--; )
340 }
else if (n_zero == x.size() + y.size()) {