34 namespace Gecode {
namespace Int {
namespace Rel {
41 template<
class View0,
class View1>
46 template<
class View0,
class View1>
51 }
else if (x1.assigned()) {
53 }
else if (!
same(x0,x1)) {
59 template<
class View0,
class View1>
64 template<
class View0,
class View1>
71 template<
class View0,
class View1>
77 template<
class View0,
class View1>
83 template<
class View0,
class View1>
89 assert(
x1.assigned());
101 template<
class View0,
class View1>
106 template<
class View0,
class View1>
111 }
else if (x1.assigned()) {
113 }
else if (!
same(x0,x1)) {
123 template<
class View0,
class View1>
128 template<
class View0,
class View1>
135 template<
class View0,
class View1>
141 template<
class View0,
class View1>
146 }
else if (
x1.assigned()) {
152 }
while (
x0.min() !=
x1.min());
156 }
while (
x0.max() !=
x1.max());
160 assert(
x0.assigned() &&
x1.assigned());
169 template<
class View0,
class View1>
174 template<
class View0,
class View1>
179 }
else if (x1.assigned()) {
181 }
else if (!
same(x0,x1)) {
192 template<
class View0,
class View1>
197 template<
class View0,
class View1>
204 template<
class View0,
class View1>
210 template<
class View0,
class View1>
221 template<
class View0,
class View1>
236 }
while (
x0.min() !=
x1.min());
240 }
while (
x0.max() !=
x1.max());
243 if (
x0.range() &&
x1.range())
274 }
else if (x.
size() > 2) {
277 for (
int i=x.
size();
i-- > 1; ) {
281 for (
int i=x.
size();
i--; ) {
314 assert(
x.size() > 2);
319 for (
int i = 0; ;
i++)
323 for (
int j =
x.size(); j--; )
335 for (
int i =
x.size();
i--; ) {
337 if (mn <
x[
i].
min()) {
347 for (
int i =
x.size();
i--; ) {
349 if (mx >
x[
i].
max()) {
364 for (
int i = n;
i--; ) {
375 for (
int i = n;
i--; ) {
380 for (
int i = n;
i--; ) {
406 }
else if (x.
size() > 2) {
409 for (
int i=x.
size();
i-- > 1; ) {
413 for (
int i=x.
size();
i--; ) {
445 assert(
x.size() > 2);
448 for (
int i = 0; ;
i++)
452 for (
int j =
x.size(); j--; )
461 for (
int i =
x.size();
i--; ) {
463 if (mn <
x[
i].
min()) {
470 for (
int i =
x.size();
i--; ) {
472 if (mx >
x[
i].
max()) {
487 template<
class View,
class CtrlView, ReifyMode rm>
492 template<
class View,
class CtrlView, ReifyMode rm>
506 (void)
new (home)
ReEqDom(home,x0,x1,b);
507 }
else if (rm !=
RM_IMP) {
514 template<
class View,
class CtrlView, ReifyMode rm>
519 template<
class View,
class CtrlView, ReifyMode rm>
525 template<
class View,
class CtrlView, ReifyMode rm>
561 template<
class View,
class CtrlView, ReifyMode rm>
566 template<
class View,
class CtrlView, ReifyMode rm>
580 (void)
new (home)
ReEqBnd(home,x0,x1,b);
581 }
else if (rm !=
RM_IMP) {
588 template<
class View,
class CtrlView, ReifyMode rm>
593 template<
class View,
class CtrlView, ReifyMode rm>
599 template<
class View,
class CtrlView, ReifyMode rm>
636 template<
class View,
class CtrlView, ReifyMode rm>
642 template<
class View,
class CtrlView, ReifyMode rm>
648 }
else if (b.zero()) {
651 }
else if (x.assigned()) {
667 template<
class View,
class CtrlView, ReifyMode rm>
672 template<
class View,
class CtrlView, ReifyMode rm>
678 template<
class View,
class CtrlView, ReifyMode rm>
684 }
else if (b.zero()) {
713 template<
class View,
class CtrlView, ReifyMode rm>
716 (
Home home, View x,
int c0, CtrlView b)
719 template<
class View,
class CtrlView, ReifyMode rm>
725 }
else if (b.zero()) {
728 }
else if (x.assigned()) {
744 template<
class View,
class CtrlView, ReifyMode rm>
749 template<
class View,
class CtrlView, ReifyMode rm>
755 template<
class View,
class CtrlView, ReifyMode rm>
761 }
else if (b.zero()) {
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
Relation may hold or not.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
int c
Integer constant to check.
static ExecStatus post(Home home, V0 x0, V1 x1)
Post propagator .
Inverse implication for reification.
static ExecStatus post(Home home, ViewArray< View > &x)
Post bounds consistent propagator .
static PropCost linear(PropCost::Mod m, unsigned int n)
Linear complexity for modifier pcm and size measure n.
Binary domain consistent equality propagator.
ExecStatus ES_SUBSUMED(Propagator &p)
const FloatNum max
Largest allowed float value.
ReEqBndInt(Space &home, ReEqBndInt &p)
Constructor for cloning p.
View0 x0
View of type View0.
RelTest rtest_eq_dom(VX x, VY y)
Test whether views x and y are equal (use full domain information)
Binary value propagation equality propagator.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from region.
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Reified binary propagator.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
static ExecStatus post(Home home, View0 x0, View1 x1)
Post domain consistent propagator .
int ModEvent
Type for modification events.
EqDom(Space &home, EqDom< View0, View1 > &p)
Constructor for cloning p.
ViewArray< View > x
Array of views.
Base-class for propagators.
EqBnd(Space &home, EqBnd< View0, View1 > &p)
Constructor for cloning p.
n-ary domain consistent equality propagator
Propagation has computed fixpoint.
static PropCost unary(PropCost::Mod m)
Single variable for modifier pcm.
View1 x1
View of type View1.
static ExecStatus post(Home home, View x, int c, CtrlView b)
Post bounds consistent propagator .
static ExecStatus post(Home home, View x0, View x1, CtrlView b)
Post bounds consistent propagator .
CtrlView b
Boolean control view.
Base-class for both propagators and branchers.
Range iterator for integer views.
static ExecStatus post(Home home, View0 x0, View1 x1)
Post bounds consistent propagator .
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
int c
Integer constant to check.
int max(void) const
Return largest value of range.
bool same(const CachedView< View > &x, const CachedView< View > &y)
Gecode::FloatVal c(-8, 8)
int p
Number of positive literals for node type.
const FloatNum min
Smallest allowed float value.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
Gecode::IntArgs i(4, 1, 2, 3, 4)
int n
Number of negative literals for node type.
void reset(void)
Reset iterator to start.
Execution has resulted in failure.
NaryEqDom(Space &home, NaryEqDom< View > &p)
Constructor for cloning p.
EqVal(Space &home, EqVal< View0, View1 > &p)
Constructor for cloning p.
const Gecode::PropCond PC_INT_BND
Propagate when minimum or maximum of a view changes.
const Gecode::ModEvent ME_INT_VAL
Domain operation has resulted in a value (assigned variable)
Reified binary domain consistent equality propagator.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
ModEventDelta med
A set of modification events (used during propagation)
Binary bounds consistent equality propagator.
const Gecode::PropCond PC_INT_DOM
Propagate when domain changes.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
const Gecode::ModEvent ME_INT_BND
Domain operation has changed the minimum or maximum of the domain.
Reified binary bounds consistent equality propagator.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
union Gecode::@585::NNF::@62 u
Union depending on nodetype t.
static ExecStatus post(Home home, View x0, View x1, CtrlView b)
Post domain consistent propagator .
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
static ExecStatus post(Home home, View0 x0, View1 x1)
Post value propagation propagator .
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
int min(void) const
Return smallest value of range.
ExecStatus ES_FIX_PARTIAL(Propagator &p, const ModEventDelta &med)
Propagator p has computed partial fixpoint
RelTest rtest_eq_bnd(VX x, VY y)
Test whether views x and y are equal (use bounds information)
static ExecStatus post(Home home, View x, int c, CtrlView b)
Post domain consistent propagator .
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Post propagator for SetVar SetOpType SetVar SetRelType r
Reified bounds consistent equality with integer propagator.
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
struct Gecode::@585::NNF::@62::@63 b
For binary nodes (and, or, eqv)
ReEqDomInt(Space &home, ReEqDomInt &p)
Constructor for cloning p.
Range iterator for intersection of iterators.
const Gecode::ModEvent ME_INT_DOM
Domain operation has changed the domain.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
bool assigned(View x, int v)
Whether x is assigned to value v.
NaryEqBnd(Space &home, NaryEqBnd< View > &p)
Constructor for cloning p.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
ReEqDom(Space &home, ReEqDom &p)
Constructor for cloning p.
Binary disequality propagator.
Post propagator for SetVar x
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
void unique(void)
Remove all duplicate views from array (changes element order)
ReEqBnd(Space &home, ReEqBnd &p)
Constructor for cloning p.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
n-ary bounds consistent equality propagator
bool shared(const ConstView< ViewA > &, const ConstView< ViewB > &)
Test whether views share same variable.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function: low unary.
Gecode toplevel namespace
Implication for reification.
CtrlView b
Boolean control view.
static ExecStatus post(Home home, ViewArray< View > &x)
Post domain consistent propagator .
virtual Actor * copy(Space &home)
Copy propagator during cloning.
int size(void) const
Return size of array (number of elements)
int ModEventDelta
Modification event deltas.
Reified domain consistent equality with integer propagator.
Home class for posting propagators
virtual Actor * copy(Space &home)
Copy propagator during cloning.
static PropCost binary(PropCost::Mod m)
Two variables for modifier pcm.
#define GECODE_NEVER
Assert that this command is never executed.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
const Gecode::PropCond PC_INT_VAL
Propagate when a view becomes assigned (single value)