38 namespace Gecode {
namespace Int {
namespace Circuit {
40 template<
class View,
class Offset>
47 template<
class View,
class Offset>
52 y.update(home,share,p.
y);
70 template<
class View,
class Offset>
78 start = o(x[start]).val();
79 if (start == 0)
break;
86 unsigned int n_edges = 0;
87 for (
int i=n;
i--; ) {
88 n_edges += x[
i].size();
139 si[
i].
v.init(o(x[i]));
141 if (si[si[i].
v.val()].
pre < 0) {
145 }
else if ((subtree_min <= si[si[i].
v.val()].
pre) &&
146 (si[si[i].
v.val()].
pre <= subtree_max)) {
148 eq[n_eq].
x = o(x[i]);
149 eq[n_eq].
n = si[
i].
v.val();
150 }
else if (si[si[i].
v.val()].
pre < subtree_min) {
151 nq[n_nq].
x = o(x[i]);
152 nq[n_nq].
n = si[
i].
v.val();
156 if (si[si[i].
v.val()].
low < si[
i].
min)
157 si[i].
min = si[si[i].
v.val()].
low;
160 if (si[i].
min < si[i].low) {
162 }
else if (i != start) {
176 subtree_min = subtree_max+1;
187 ModEvent me = eq[n_eq].
x.eq(home,eq[n_eq].n);
195 ModEvent me = nq[n_nq].
x.nq(home,nq[n_nq].n);
205 template<
class View,
class Offset>
216 int* end = r.
alloc<
int>(n);
224 for (
int i=y.
size();
i--; ) {
232 if (x[j0].
assigned() && (end[j0] < 0)) {
244 end[j0]=j; tell.
push(j0);
251 while (!tell.
empty()) {
259 template<
class View,
class Offset>
264 return sizeof(*this);