Go to the documentation of this file.
36 namespace Gecode {
namespace Int {
namespace Rel {
43 template<
class V0,
class V1>
48 template<
class V0,
class V1>
53 if ((x0 != x1) && (x0.max() > x1.min()))
58 template<
class V0,
class V1>
63 template<
class V0,
class V1>
69 template<
class V0,
class V1>
84 template<
class V0,
class V1>
89 template<
class V0,
class V1>
96 if (x0.max() >= x1.min())
101 template<
class V0,
class V1>
106 template<
class V0,
class V1>
112 template<
class V0,
class V1>
127 template<
class View,
int o>
133 template<
class View,
int o>
140 template<
class View,
int o>
145 template<
class View,
int o>
151 template<
class View,
int o>
155 template<
class View,
int o>
161 template<
class View,
int o>
164 return home.fl_alloc<
sizeof(
Pos)>();
167 template<
class View,
int o>
174 template<
class View,
int o>
179 template<
class View,
int o>
187 template<
class View,
int o>
197 template<
class View,
int o>
202 for (
int i=0;
i<
x.size();
i++)
206 template<
class View,
int o>
209 assert((o == 0) || (o == 1));
219 for (
int i=0;
i<
n;
i++)
220 for (
int j=
n-1; j>
i; j--)
225 for (
int k=j-
i; k--; )
229 for (
int k=0; k<
n-1-j-1+1; k++)
238 for (
int i=1;
i<
x.size();
i++)
240 for (
int i=
x.size()-1;
i--;)
247 while ((
i+1 <
x.size()) && (
x[
i].max()+o <=
x[
i+1].min()))
261 for (
int i=1;
i+1<
x.size();
i++)
265 x[j++]=
x[
x.size()-1];
274 }
else if (
x.size() >= 2) {
280 template<
class View,
int o>
284 pos(NULL), run(false), n_subsumed(
p.n_subsumed) {
285 assert(
p.pos == NULL);
289 template<
class View,
int o>
292 if (n_subsumed > n_threshold) {
297 a.set(
static_cast<unsigned int>(as.advisor().i));
299 int* m =
r.alloc<
int>(
x.size());
301 for (
int i=0;
i<
x.size();
i++)
302 if (
a.get(
static_cast<unsigned int>(
i))) {
303 m[
i] = j;
x[j++] =
x[
i];
308 as.advisor().i = m[as.advisor().i];
315 template<
class View,
int o>
321 template<
class View,
int o>
325 x[as.advisor().i].cancel(home,as.advisor());
330 return sizeof(*this);
334 template<
class View,
int o>
339 switch (View::modevent(
d)) {
345 if (((
i == 0) || (
x[
i-1].
max()+o <=
x[
i].
min())) &&
346 ((
i ==
x.size()-1) || (
x[
i].
max()+o <=
x[
i+1].min()))) {
358 if (((
i <
x.size()-1) && (
x[
i+1].
min() <
x[
i].min()+o)) ||
359 ((
i > 0) && (
x[
i-1].
max() >
x[
i].max()-o))) {
366 template<
class View,
int o>
372 template<
class View,
int o>
379 for (
int i=
p;
i<
n-1;
i++) {
386 for (
int i=
p;
i>0;
i--) {
395 for (
int i=0;
i<
n-1;
i++)
397 for (
int i=
n-1;
i>0;
i--)
400 if (n_subsumed+1 >=
n)
413 template<
class View,
class CtrlView, ReifyMode rm>
418 template<
class View,
class CtrlView, ReifyMode rm>
446 }
else if (rm !=
RM_IMP) {
452 template<
class View,
class CtrlView, ReifyMode rm>
457 template<
class View,
class CtrlView, ReifyMode rm>
463 template<
class View,
class CtrlView, ReifyMode rm>
469 }
else if (
b.zero()) {
495 template<
class View,
class CtrlView, ReifyMode rm>
500 template<
class View,
class CtrlView, ReifyMode rm>
506 }
else if (
b.zero()) {
529 template<
class View,
class CtrlView, ReifyMode rm>
534 template<
class View,
class CtrlView, ReifyMode rm>
540 template<
class View,
class CtrlView, ReifyMode rm>
546 }
else if (
b.zero()) {
Post propagator for SetVar x
Post propagator for SetVar SetOpType SetVar y
n-ary less and less or equal propagator
Less or equal propagator.
ReLqInt(Space &home, ReLqInt &p)
Constructor for cloning p.
bool me_failed(ModEvent me)
Check whether modification event me is failed.
@ RM_PMI
Inverse implication for reification.
static ExecStatus post(Home home, View x0, View x1, CtrlView b)
Post propagator for .
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Reified less or equal with integer propagator.
ExecStatus ES_SUBSUMED(Propagator &p)
bool empty(void) const
Whether no more positions must be propagated.
static PropCost binary(PropCost::Mod m)
Two variables for modifier pcm.
static ExecStatus post(Home home, ViewArray< View > &x)
Post propagator for .
Pos * next(void) const
Return next position.
Class to iterate over advisors of a council.
RelTest rtest_lq(VX x, VY y)
Test whether view x is less or equal than view y.
int n_subsumed
Number of already subsumed advisors (or views)
@ RM_IMP
Implication for reification.
void dispose(Space &home)
Free memory for this position.
void push(Space &home, int p)
Push a new position p to be propagated.
Base-class for both propagators and branchers.
@ RT_TRUE
Relation does hold.
static ExecStatus post(Home home, V0 x0, V1 x1)
Post propagator .
ViewArray< View > x
Array of views.
Reified unary propagator.
Index(Space &home, Propagator &p, Council< Index > &c, int i)
Create index advisor.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
const Gecode::ModEvent ME_INT_VAL
Domain operation has resulted in a value (assigned variable)
void fl_dispose(FreeList *f, FreeList *l)
Return freelist-managed memory to freelist.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Gecode toplevel namespace
Base-class for propagators.
@ RT_MAYBE
Relation may hold or not.
Advisors for views (by position in array)
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
@ RT_FALSE
Relation does not hold.
#define GECODE_ES_CHECK(es)
Check whether execution status es is failed or subsumed, and forward failure or subsumption.
bool run
Whether the propagator is currently running.
Generic domain change information to be supplied to advisors.
FreeList * next(void) const
Return next freelist object.
Home class for posting propagators
const Gecode::ModEvent ME_INT_BND
Domain operation has changed the minimum or maximum of the domain.
Lq(Space &home, Lq &p)
Constructor for cloning p.
Reified less or equal propagator.
Reified binary propagator.
Post propagator for SetVar SetOpType SetVar SetRelType r
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.
int p
Position of view in view array.
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
virtual Actor * copy(Space &home)
Copy propagator during cloning.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
#define GECODE_NEVER
Assert that this command is never executed.
const Gecode::PropCond PC_INT_BND
Propagate when minimum or maximum of a view changes.
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
NaryLqLe(Space &home, NaryLqLe< View, o > &p)
Constructor for cloning p.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
ReLq(Space &home, ReLq &p)
Constructor for cloning p.
virtual void reschedule(Space &home)
Schedule function.
int ModEvent
Type for modification events.
Council< Index > c
The advisor council.
Base-class for freelist-managed objects.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
int pop(Space &home)
Pop a position to be propagated and return it.
static ExecStatus post(Home home, V0 x0, V1 x1)
Post propagator .
Pos * pos
Stack of positions.
virtual ExecStatus advise(Space &home, Advisor &a, const Delta &d)
Give advice to propagator.
Positions in view array that have to be propagated.
static ExecStatus post(Home home, View x, int c, CtrlView b)
Post propagator for .
@ ES_FIX
Propagation has computed fixpoint.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
const Gecode::PropCond PC_INT_NONE
Propagation condition to be ignored (convenience)
Pos(int p, Pos *n)
Initialize with position p and next position n.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
Le(Space &home, Le &p)
Constructor for cloning p.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
bool me_modified(ModEvent me)
Check whether modification event me describes variable modification.
n-ary bounds consistent equality propagator
Gecode::FloatVal c(-8, 8)
void subscribe(Space &home, Propagator &p, IntSet &y)
int n
Number of negative literals for node type.
@ ES_FAILED
Execution has resulted in failure.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
int ModEventDelta
Modification event deltas.
@ ES_NOFIX
Propagation has not computed fixpoint.
Gecode::IntArgs i({1, 2, 3, 4})
bool pos(const View &x)
Test whether x is postive.
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
@ ES_OK
Execution is okay.
int p
Number of positive literals for node type.