38 namespace Gecode {
namespace Int {
namespace Bool {
105 template<
class BVA,
class BVB>
110 template<
class BVA,
class BVB>
115 template<
class BVA,
class BVB>
121 template<
class BVA,
class BVB>
127 template<
class BVA,
class BVB>
139 }
else if (b1.zero()) {
141 }
else if (!b0.one() && !b1.one()) {
150 template<
class BVA,
class BVB>
153 #define GECODE_INT_STATUS(S0,S1) \ 154 ((BVA::S0<<(1*BVA::BITS))|(BVB::S1<<(0*BVB::BITS))) 155 switch ((
x0.status() << (1*BVA::BITS)) | (
x1.status() << (0*BVB::BITS))) {
175 #undef GECODE_INT_STATUS 192 return sizeof(*this);
199 x2.update(home,share,p.
x2);
207 x2.update(home,share,b2);
213 assert(
x0.none() &&
x1.none());
232 #define GECODE_INT_STATUS(S0,S1,S2) \ 233 ((BV::S0<<(2*BV::BITS))|(BV::S1<<(1*BV::BITS))|(BV::S2<<(0*BV::BITS))) 234 switch ((
x0.status() << (2*BV::BITS)) | (
x1.status() << (1*BV::BITS)) |
235 (
x2.status() << (0*BV::BITS))) {
279 #undef GECODE_INT_STATUS 296 return sizeof(*this);
303 x2.update(home,share,p.
x2);
304 x3.update(home,share,p.
x3);
310 BV b0, BV b1, BV
b2, BV b3)
312 x2.update(home,share,b2);
313 x3.update(home,share,b3);
319 assert(
x0.none() &&
x1.none());
320 if (
x2.one() ||
x3.one())
322 else if (
x2.zero() &&
x3.zero())
342 #define GECODE_INT_STATUS(S0,S1,S2,S3) \ 343 ((BV::S0 << (3*BV::BITS)) | (BV::S1 << (2*BV::BITS)) | \ 344 (BV::S2 << (1*BV::BITS)) | (BV::S3 << (0*BV::BITS))) 345 switch ((
x0.status() << (3*BV::BITS)) | (
x1.status() << (2*BV::BITS)) |
346 (
x2.status() << (1*BV::BITS)) | (
x3.status() << (0*BV::BITS))) {
455 #undef GECODE_INT_STATUS 463 template<
class BVA,
class BVB,
class BVC>
468 template<
class BVA,
class BVB,
class BVC>
473 template<
class BVA,
class BVB,
class BVC>
476 BVA b0, BVB b1, BVC
b2)
477 :
BoolTernary<BVA,BVB,BVC>(home,share,p,b0,b1,b2) {}
479 template<
class BVA,
class BVB,
class BVC>
483 assert(
x0.none() &&
x1.none());
485 }
else if (
x0.zero()) {
486 assert(
x1.none() &&
x2.none());
488 }
else if (
x1.zero()) {
489 assert(
x0.none() &&
x2.none());
496 template<
class BVA,
class BVB,
class BVC>
502 }
else if (b2.one()) {
512 if (b0.one() || b1.one()) {
514 }
else if (b0.zero()) {
516 }
else if (b1.zero()) {
528 template<
class BVA,
class BVB,
class BVC>
531 #define GECODE_INT_STATUS(S0,S1,S2) \ 532 ((BVA::S0<<(2*BVA::BITS))|(BVB::S1<<(1*BVB::BITS))|(BVC::S2<<(0*BVC::BITS))) 533 switch ((
x0.status() << (2*BVA::BITS)) | (
x1.status() << (1*BVB::BITS)) |
534 (
x2.status() << (0*BVC::BITS))) {
607 #undef GECODE_INT_STATUS 619 assert(
x.
size() > 2);
647 }
else if (
x[
i].zero()) {
668 for (
int i=b.
size();
i--; )
671 else if (b[
i].zero())
677 }
else if (b.
size() == 2) {
679 }
else if (b.
size() == 3) {
681 }
else if (b.
size() == 4) {
693 return sizeof(*this);
704 }
else if (
x[
i].zero()) {
738 template<
class VX,
class VY>
746 template<
class VX,
class VY>
751 c.update(home,share,p.
c);
754 template<
class VX,
class VY>
771 template<
class VX,
class VY>
778 for (
int i=x.
size();
i--; )
782 for (
int i=x.
size();
i--; )
786 }
else if (x[
i].zero()) {
791 }
else if (x.
size() == 1) {
793 }
else if (x.
size() == 2) {
796 (void)
new (home)
NaryOr(home,x,y);
801 template<
class VX,
class VY>
807 template<
class VX,
class VY>
817 template<
class VX,
class VY>
830 template<
class VX,
class VY>
838 return sizeof(*this);
841 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.
void update(Space &, bool share, ViewArray< View > &a)
Update array to be a clone of array a.
BVC x2
Boolean view Constructor for posting.
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 Actor * copy(Space &home, bool share)
Copy propagator during cloning.
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.
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.
Gecode::IntArgs i(4, 1, 2, 3, 4)
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
bool shared(const Space &home) const
Test whether array contains shared views.
int n
Number of negative literals for node type.
static ExecStatus post(Home home, BVA x0, BVB x1)
Post propagator .
Execution has resulted in failure.
const Gecode::PropCond PC_BOOL_NONE
Propagation condition to be ignored (convenience)
Council< Advisor > c
The advisor council.
virtual Actor * copy(Space &home, bool share)
Copy propagator during cloning.
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::@579::NNF::@61::@62 b
For binary nodes (and, or, eqv)
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
virtual Actor * copy(Space &home, bool share)
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.
virtual Actor * copy(Space &home, bool share)
Copy propagator during cloning.
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.
virtual Actor * copy(Space &home, bool share)
Copy propagator during cloning.
Post propagator for SetVar x
Propagation has not computed fixpoint.
static ExecStatus post(Home home, ViewArray< BV > &b)
Post propagator .
virtual Actor * copy(Space &home, bool share)
Copy propagator during cloning.
BV x3
Boolean view without subscription.
static ExecStatus post(Home home, ViewArray< VX > &x, VY y)
Post propagator .
virtual Actor * copy(Space &home, bool share)
Copy propagator during cloning.
OrTrueSubsumed(Space &home, bool share, OrTrueSubsumed &p)
Constructor for cloning p.
Gecode toplevel namespace
Base-class for ternary Boolean propagators.
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.
#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)