34 namespace Gecode {
namespace Int {
namespace Bool {
101 template<
class BVA,
class BVB>
106 template<
class BVA,
class BVB>
111 template<
class BVA,
class BVB>
117 template<
class BVA,
class BVB>
123 template<
class BVA,
class BVB>
135 }
else if (b1.zero()) {
137 }
else if (!b0.one() && !b1.one()) {
146 template<
class BVA,
class BVB>
149 #define GECODE_INT_STATUS(S0,S1) \ 150 ((BVA::S0<<(1*BVA::BITS))|(BVB::S1<<(0*BVB::BITS))) 151 switch ((
x0.status() << (1*BVA::BITS)) | (
x1.status() << (0*BVB::BITS))) {
171 #undef GECODE_INT_STATUS 188 return sizeof(*this);
195 x2.update(home,p.
x2);
209 assert(
x0.none() &&
x1.none());
228 #define GECODE_INT_STATUS(S0,S1,S2) \ 229 ((BV::S0<<(2*BV::BITS))|(BV::S1<<(1*BV::BITS))|(BV::S2<<(0*BV::BITS))) 230 switch ((
x0.status() << (2*BV::BITS)) | (
x1.status() << (1*BV::BITS)) |
231 (
x2.status() << (0*BV::BITS))) {
275 #undef GECODE_INT_STATUS 292 return sizeof(*this);
299 x2.update(home,p.
x2);
300 x3.update(home,p.
x3);
306 BV b0, BV b1, BV
b2, BV b3)
315 assert(
x0.none() &&
x1.none());
316 if (
x2.one() ||
x3.one())
318 else if (
x2.zero() &&
x3.zero())
338 #define GECODE_INT_STATUS(S0,S1,S2,S3) \ 339 ((BV::S0 << (3*BV::BITS)) | (BV::S1 << (2*BV::BITS)) | \ 340 (BV::S2 << (1*BV::BITS)) | (BV::S3 << (0*BV::BITS))) 341 switch ((
x0.status() << (3*BV::BITS)) | (
x1.status() << (2*BV::BITS)) |
342 (
x2.status() << (1*BV::BITS)) | (
x3.status() << (0*BV::BITS))) {
451 #undef GECODE_INT_STATUS 459 template<
class BVA,
class BVB,
class BVC>
464 template<
class BVA,
class BVB,
class BVC>
469 template<
class BVA,
class BVB,
class BVC>
472 BVA b0, BVB b1, BVC
b2)
475 template<
class BVA,
class BVB,
class BVC>
479 assert(
x0.none() &&
x1.none());
481 }
else if (
x0.zero()) {
482 assert(
x1.none() &&
x2.none());
484 }
else if (
x1.zero()) {
485 assert(
x0.none() &&
x2.none());
492 template<
class BVA,
class BVB,
class BVC>
498 }
else if (b2.one()) {
508 if (b0.one() || b1.one()) {
510 }
else if (b0.zero()) {
512 }
else if (b1.zero()) {
524 template<
class BVA,
class BVB,
class BVC>
527 #define GECODE_INT_STATUS(S0,S1,S2) \ 528 ((BVA::S0<<(2*BVA::BITS))|(BVB::S1<<(1*BVB::BITS))|(BVC::S2<<(0*BVC::BITS))) 529 switch ((
x0.status() << (2*BVA::BITS)) | (
x1.status() << (1*BVB::BITS)) |
530 (
x2.status() << (0*BVC::BITS))) {
603 #undef GECODE_INT_STATUS 615 assert(
x.
size() > 2);
643 }
else if (
x[
i].zero()) {
664 for (
int i=b.
size();
i--; )
667 else if (b[
i].zero())
673 }
else if (b.
size() == 2) {
675 }
else if (b.
size() == 3) {
677 }
else if (b.
size() == 4) {
689 return sizeof(*this);
700 }
else if (
x[
i].zero()) {
734 template<
class VX,
class VY>
742 template<
class VX,
class VY>
750 template<
class VX,
class VY>
767 template<
class VX,
class VY>
778 for (
int i=x.
size();
i--; )
782 }
else if (x[
i].zero()) {
787 }
else if (x.
size() == 1) {
789 }
else if (x.
size() == 2) {
792 (void)
new (home)
NaryOr(home,x,y);
797 template<
class VX,
class VY>
803 template<
class VX,
class VY>
813 template<
class VX,
class VY>
826 template<
class VX,
class VY>
834 return sizeof(*this);
837 template<
class VX,
class VY>
int n_zero
The number of views assigned to zero in x.
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
BVC x2
Boolean view Constructor for posting.
void update(Space &home, ViewArray< View > &a)
Update array to be a clone of array a.
TerOrTrue(Home home, BV b0, BV b1, BV b2)
Constructor for posting.
static ExecStatus post(Home home, BV b0, BV b1)
Post propagator.
ExecStatus ES_SUBSUMED(Propagator &p)
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual ExecStatus advise(Space &home, Advisor &a, const Delta &d)
Give advice to propagator.
bool one(const Gecode::FloatValArgs &a)
Check whether has only one coefficients.
BV x2
Boolean view without subscription.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
Mixed (n+1)-ary propagator.
ExecStatus resubscribe(Space &home, BV &x0, BV x1)
Update subscription.
Base-class for propagators.
void subscribe(Space &home, Propagator &p, PropCond pc, bool schedule=true)
Subscribe propagator p with propagation condition pc to variable.
static ExecStatus post(Home home, BVA b0, BVB b1, BVC b2)
Post propagator .
Class to iterate over advisors of a council.
ViewArray< VX > x
Array of views.
static ExecStatus post(Home home, BV b0, BV b1, BV b2, BV b3)
Post propagator .
Propagation has computed fixpoint.
static PropCost unary(PropCost::Mod m)
Single variable for modifier pcm.
virtual void reschedule(Space &home)
Schedule function.
Quarternary Boolean disjunction propagator (true)
Base-class for both propagators and branchers.
Or(Home home, BVA b0, BVB b1, BVC b2)
Constructor for posting.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
NaryOrTrue(Home home, ViewArray< BV > &x)
Constructor for posting.
#define GECODE_ES_CHECK(es)
Check whether execution status es is failed or subsumed, and forward failure or subsumption.
Gecode::FloatVal c(-8, 8)
Binary Boolean disjunction propagator (subsumed)
Ternary Boolean disjunction propagator (true)
int p
Number of positive literals for node type.
QuadOrTrue(Home home, BV b0, BV b1, BV b2, BV b3)
Constructor for posting.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
int n
Number of negative literals for node type.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
static ExecStatus post(Home home, BVA x0, BVB x1)
Post propagator .
Gecode::IntArgs i({1, 2, 3, 4})
virtual Actor * copy(Space &home)
Copy propagator during cloning.
OrTrueSubsumed(Space &home, OrTrueSubsumed &p)
Constructor for cloning p.
Execution has resulted in failure.
const Gecode::PropCond PC_BOOL_NONE
Propagation condition to be ignored (convenience)
virtual Actor * copy(Space &home)
Copy propagator during cloning.
Council< Advisor > c
The advisor council.
ModEventDelta med
A set of modification events (used during propagation)
NaryOr(Home home, ViewArray< VX > &x, VY y)
Constructor for posting.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
Boolean disjunction propagator.
struct Gecode::@593::NNF::@62::@63 b
For binary nodes (and, or, eqv)
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
BinOrTrue(Home home, BVA b0, BVB b1)
Constructor for posting.
Boolean equality propagator.
BoolTest bool_test(const BoolView &b0, const BoolView &b1)
void drop_fst(int i)
Drop views from positions 0 to i-1 from array.
void cancel(Space &home, Propagator &p, PropCond pc)
Cancel subscription of propagator p with propagation condition pc to all views.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
Same variable but complement.
void move_lst(int i)
Move view from position size()-1 to position i (truncate array by one)
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function (defined as low unary)
BV x2
Boolean view without subscription.
static ExecStatus post(Home home, BV b0, BV b1, BV b2)
Post propagator .
Boolean n-ary disjunction propagator (true)
static ExecStatus post(Home home, BVA b0, BVB b1)
Post propagator .
Post propagator for SetVar SetOpType SetVar y
ViewArray< BV > x
Views not yet subscribed to.
BVB x1
Boolean view Constructor for posting.
Generic domain change information to be supplied to advisors.
Boolean n-ary disjunction propagator.
Binary Boolean disjunction propagator (true)
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Post propagator for SetVar x
Propagation has not computed fixpoint.
static ExecStatus post(Home home, ViewArray< BV > &b)
Post propagator .
BV x3
Boolean view without subscription.
static ExecStatus post(Home home, ViewArray< VX > &x, VY y)
Post propagator .
Gecode toplevel namespace
Base-class for ternary Boolean propagators.
bool shared(ViewArray< ViewX > x, ViewArray< ViewY > y)
Base-class for binary Boolean propagators.
int size(void) const
Return size of array (number of elements)
int ModEventDelta
Modification event deltas.
Home class for posting propagators
static PropCost binary(PropCost::Mod m)
Two variables for modifier pcm.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
#define GECODE_NEVER
Assert that this command is never executed.
A & advisor(void) const
Return advisor.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function (defined as low unary)
#define GECODE_INT_STATUS(S0, S1)
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
IntRelType swap(IntRelType irt)
Return swapped relation type of irt.
const Gecode::PropCond PC_BOOL_VAL
Propagate when a view becomes assigned (single value)
const Gecode::ModEvent ME_BOOL_VAL
Domain operation has resulted in a value (assigned variable)