40 namespace Gecode {
namespace Int {
namespace Rel {
57 if (!
same(x0,x1) && (x0.max() > x1.min()))
58 (void)
new (home)
Lq<View>(home,x0,x1);
70 return new (home)
Lq<View>(home,share,*
this);
100 if (x0.max() >= x1.min())
101 (
void)
new (home)
Le<View>(home,x0,x1);
113 return new (home)
Le<View>(home,share,*
this);
131 template<
class View,
int o>
137 template<
class View,
int o>
144 template<
class View,
int o>
149 template<
class View,
int o>
155 template<
class View,
int o>
159 template<
class View,
int o>
165 template<
class View,
int o>
168 return home.fl_alloc<
sizeof(
Pos)>();
171 template<
class View,
int o>
178 template<
class View,
int o>
183 template<
class View,
int o>
187 if ((
pos != NULL) && (
pos->
p == p))
191 template<
class View,
int o>
201 template<
class View,
int o>
206 for (
int i=x.
size();
i--; )
210 template<
class View,
int o>
213 assert((o == 0) || (o == 1));
223 for (
int i=0;
i<n;
i++)
224 for (
int j=n-1; j>
i; j--)
225 if (
same(x[i],x[j])) {
229 for (
int k=j-i; k--; )
233 for (
int k=0; k<n-1-j-1+1; k++)
243 for (
int i=x.
size()-1;
i--;)
250 while ((i+1 < x.
size()) && (x[i].
max()+o <= x[i+1].min()))
257 while ((i > 0) && (x[i-1].
max()+o <= x[i].
min()))
264 for (
int i=1;
i+1<x.
size();
i++)
265 if ((x[j-1].
max()+o > x[
i].
min()) ||
266 (x[
i].max()+o > x[
i+1].min()))
268 x[j++]=x[x.
size()-1];
277 }
else if (x.
size() >= 2) {
283 template<
class View,
int o>
287 pos(NULL), run(false), n_subsumed(p.n_subsumed) {
288 assert(p.
pos == NULL);
289 c.update(home, share, p.
c);
292 template<
class View,
int o>
295 if (n_subsumed > n_threshold) {
300 a.
set(static_cast<unsigned int>(as.advisor().i));
302 int*
m = r.
alloc<
int>(x.size());
305 if (a.
get(static_cast<unsigned int>(
i))) {
306 m[
i] = j; x[j++] = x[
i];
311 as.advisor().i = m[as.advisor().i];
318 template<
class View,
int o>
324 template<
class View,
int o>
328 x[as.advisor().i].cancel(home,as.advisor());
333 return sizeof(*this);
337 template<
class View,
int o>
342 switch (View::modevent(d)) {
348 if (((i == 0) || (x[i-1].
max()+o <= x[i].
min())) &&
349 ((i == x.size()-1) || (x[i].
max()+o <= x[i+1].min()))) {
361 if (((i < x.size()-1) && (x[i+1].
min() < x[
i].min()+o)) ||
362 ((i > 0) && (x[i-1].
max() > x[
i].max()-o))) {
369 template<
class View,
int o>
376 for (
int i=p;
i<n-1;
i++) {
383 for (
int i=p;
i>0;
i--) {
392 for (
int i=0;
i<n-1;
i++)
394 for (
int i=n-1;
i>0;
i--)
397 if (n_subsumed+1 >= n)
410 template<
class View,
class CtrlView>
415 template<
class View,
class CtrlView>
438 template<
class View,
class CtrlView>
443 template<
class View,
class CtrlView>
449 template<
class View,
class CtrlView>
473 template<
class View,
class CtrlView>
478 template<
class View,
class CtrlView>
483 }
else if (b.zero()) {
500 template<
class View,
class CtrlView>
505 template<
class View,
class CtrlView>
511 template<
class View,
class CtrlView>