57 #ifdef GECODE_HAS_FLOAT_VARS 61 #ifdef GECODE_HAS_SET_VARS 76 static void*
operator new(
size_t size);
78 static void operator delete(
void*
p,
size_t size);
87 :
use(1),
l(NULL),
r(NULL),
m(NULL) {}
94 BoolExpr::Node::operator
new(
size_t size) {
98 BoolExpr::Node::operator
delete(
void*
p, size_t) {
130 int ls = ((l.n->
t ==
t) || (l.n->
t ==
NT_VAR)) ? l.n->
same : 1;
131 int rs = ((r.n->
t == t) || (r.n->
t ==
NT_VAR)) ? r.n->
same : 1;
165 #ifdef GECODE_HAS_FLOAT_VARS 176 #ifdef GECODE_HAS_SET_VARS 254 static NNF* nnf(Region&
r, Node* n,
bool neg);
257 void post(Home home, NodeType t,
258 BoolVarArgs& bp, BoolVarArgs& bn,
268 static void*
operator new(
size_t s, Region&
r);
270 static void operator delete(
void*);
272 static void operator delete(
void*, Region&);
280 NNF::operator
delete(
void*) {}
283 NNF::operator
delete(
void*, Region&) {}
286 NNF::operator
new(
size_t s, Region&
r) {
301 u.a.x->rl.post(home,
b, !
u.a.neg, ipl);
303 #ifdef GECODE_HAS_FLOAT_VARS 305 u.a.x->rfl.post(home,
b, !
u.a.neg);
308 #ifdef GECODE_HAS_SET_VARS 310 u.a.x->rs.post(home,
b, !
u.a.neg);
314 u.a.x->m->post(home,
b,
u.a.neg, ipl);
318 BoolVarArgs bp(p), bn(n);
326 BoolVarArgs bp(p), bn(n);
338 if (
u.b.l->u.a.neg) n = !n;
340 l =
u.b.l->expr(home,ipl);
345 if (
u.b.r->u.a.neg) n = !n;
347 r =
u.b.r->expr(home,ipl);
360 BoolVarArgs& bp, BoolVarArgs& bn,
375 u.a.x->rl.post(home,
b, !
u.a.neg, ipl);
379 #ifdef GECODE_HAS_FLOAT_VARS 383 u.a.x->rfl.post(home,
b, !
u.a.neg);
388 #ifdef GECODE_HAS_SET_VARS 392 u.a.x->rs.post(home,
b, !
u.a.neg);
400 u.a.x->m->post(home,
b,
u.a.neg, ipl);
405 bp[ip++] =
expr(home, ipl);
409 u.b.l->post(home, t, bp, bn, ip, in, ipl);
410 u.b.r->post(home, t, bp, bn, ip, in, ipl);
421 u.a.x->rl.post(home, !
u.a.neg, ipl);
423 #ifdef GECODE_HAS_FLOAT_VARS 425 u.a.x->rfl.post(home, !
u.a.neg);
428 #ifdef GECODE_HAS_SET_VARS 430 u.a.x->rs.post(home, !
u.a.neg);
435 BoolVar
b(home,!
u.a.neg,!
u.a.neg);
436 u.a.x->m->post(home,
b,
false, ipl);
440 u.b.l->rel(home, ipl);
441 u.b.r->rel(home, ipl);
445 BoolVarArgs bp(p), bn(n);
454 u.b.r->u.a.x->rl.post(home,
u.b.l->u.a.x->x,
455 u.b.l->u.a.neg==
u.b.r->u.a.neg, ipl);
458 u.b.l->u.a.x->rl.post(home,
u.b.r->u.a.x->x,
459 u.b.l->u.a.neg==
u.b.r->u.a.neg, ipl);
461 u.b.l->u.a.x->rl.post(home,
u.b.r->expr(home,ipl),
462 !
u.b.l->u.a.neg,ipl);
464 u.b.r->u.a.x->rl.post(home,
u.b.l->expr(home,ipl),
465 !
u.b.r->u.a.neg,ipl);
466 #ifdef GECODE_HAS_FLOAT_VARS 469 u.b.r->u.a.x->rfl.post(home,
u.b.l->u.a.x->x,
470 u.b.l->u.a.neg==
u.b.r->u.a.neg);
473 u.b.l->u.a.x->rfl.post(home,
u.b.r->u.a.x->x,
474 u.b.l->u.a.neg==
u.b.r->u.a.neg);
476 u.b.l->u.a.x->rfl.post(home,
u.b.r->expr(home,ipl),
479 u.b.r->u.a.x->rfl.post(home,
u.b.l->expr(home,ipl),
482 #ifdef GECODE_HAS_SET_VARS 485 u.b.r->u.a.x->rs.post(home,
u.b.l->u.a.x->x,
486 u.b.l->u.a.neg==
u.b.r->u.a.neg);
489 u.b.l->u.a.x->rs.post(home,
u.b.r->u.a.x->x,
490 u.b.l->u.a.neg==
u.b.r->u.a.neg);
492 u.b.l->u.a.x->rs.post(home,
u.b.r->expr(home,ipl),
495 u.b.r->u.a.x->rs.post(home,
u.b.l->expr(home,ipl),
508 NNF::nnf(Region& r, Node* n,
bool neg) {
513 #ifdef GECODE_HAS_FLOAT_VARS 516 #ifdef GECODE_HAS_SET_VARS 520 NNF*
x =
new (
r) NNF;
521 x->t = n->t; x->u.a.neg =
neg; x->u.a.x = n;
530 return nnf(r,n->l,!neg);
535 NNF* x =
new (
r) NNF;
537 x->u.b.l = nnf(r,n->l,neg);
538 x->u.b.r = nnf(r,n->r,neg);
540 if ((x->u.b.l->t == t) ||
542 p_l=x->u.b.l->p; n_l=x->u.b.l->n;
547 if ((x->u.b.r->t == t) ||
549 p_r=x->u.b.r->p; n_r=x->u.b.r->n;
559 NNF* x =
new (
r) NNF;
561 x->u.b.l = nnf(r,n->l,neg);
562 x->u.b.r = nnf(r,n->r,
false);
577 return NNF::nnf(r,n,
false)->expr(home,ipl);
583 return NNF::nnf(r,n,
false)->rel(home,ipl);
631 return e.
expr(home,ipl);
639 if (home.
failed())
return;
668 for (
int i=b.
size();
i--;)
const BoolExpr & operator=(const BoolExpr &e)
Assignment operator.
int size(void) const
Return size of array (number of elements)
void post(Home home, Term *t, int n, FloatRelType frt, FloatVal c)
Post propagator for linear constraint over floats.
void rfree(void *p)
Free memory block starting at p.
LinIntExpr idx
The linear expression for the index.
int same
Number of variables in subtree with same type (for AND and OR)
Misc * m
Possibly a misc Boolean expression.
bool assigned(void) const
Test whether view is assigned.
Node for Boolean expression
Linear relations over integer variables.
void * ralloc(size_t s)
Allocate s bytes from heap.
BoolExpr * a
The Boolean expressions.
~BoolExpr(void)
Destructor.
Comparison relation (for two-sided comparisons)
BoolExpr operator^(const BoolExpr &l, const BoolExpr &r)
Exclusive-or of Boolean expressions.
void rel(Home home, IntPropLevel ipl) const
Post propagators for relation.
BoolExpr operator&&(const BoolExpr &l, const BoolExpr &r)
Conjunction of Boolean expressions.
Miscealloneous Boolean expressions.
int p
Number of positive literals for node type.
Gecode::IntArgs i(4, 1, 2, 3, 4)
IntRelType neg(IntRelType irt)
Return negated relation type of irt.
int n
Number of negative literals for node type.
BoolVar x
Possibly a variable.
Class to set group information when a post function is executed.
bool operator!=(const FloatVal &x, const FloatVal &y)
int val(void) const
Return assigned value.
bool failed(void) const
Check whether corresponding space is failed.
unsigned int size(I &i)
Size of all ranges of range iterator i.
union Gecode::@585::NNF::@62 u
Union depending on nodetype t.
void post(Home home, IntRelType irt, IntPropLevel ipl) const
Post propagator.
virtual void post(Home home, BoolVar b, bool neg, IntPropLevel ipl)
Constrain b to be equivalent to the expression (negated if neg)
Post propagator for SetVar SetOpType SetVar SetRelType SetVar z
SetRel rs
Possibly a reified set relation.
NodeType t
Type of expression.
Passing Boolean variables.
BoolVar expr(Home home, const BoolExpr &e, IntPropLevel ipl)
Post Boolean expression and return its value.
Other Boolean expression.
Boolean integer variables.
Post propagator for SetVar SetOpType SetVar SetRelType r
Archive & operator>>(Archive &e, FloatNumBranch &nl)
IntPropLevel
Propagation levels for integer propagators.
struct Gecode::@585::NNF::@62::@63 b
For binary nodes (and, or, eqv)
NodeType
Type of Boolean expression.
int n
The number of Boolean expressions.
void free(T *b, long unsigned int n)
Delete n objects starting at b.
BElementExpr(const BoolVarArgs &b, const LinIntExpr &idx)
Constructor.
struct Gecode::@585::NNF::@62::@64 a
For atomic nodes.
Linear expressions over integer variables.
Boolean element expressions.
LinFloatRel rfl
Possibly a reified float linear relation.
Heap heap
The single global heap.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
BoolExpr operator!(const BoolExpr &e)
Negated Boolean expression.
Node(void)
Default constructor.
void rel(Home home, const BoolExpr &e, IntPropLevel ipl)
Post Boolean relation.
Post propagator for SetVar x
Archive & operator<<(Archive &e, FloatNumBranch nl)
#define GECODE_MINIMODEL_EXPORT
virtual ~BElementExpr(void)
Destructor.
bool operator==(const FloatVal &x, const FloatVal &y)
Gecode toplevel namespace
BoolVar expr(Home home, IntPropLevel ipl) const
Post propagators for expression.
LinIntRel rl
Possibly a reified linear relation.
#define GECODE_POST
Check for failure in a constraint post function.
Home class for posting propagators
bool decrement(void)
Decrement reference count and possibly free memory.
virtual ~Misc(void)
Destructor.
#define GECODE_NEVER
Assert that this command is never executed.
void element(Home home, IntSharedArray c, IntVar x0, IntVar x1, IntPropLevel)
Post domain consistent propagator for .
BoolExpr operator||(const BoolExpr &l, const BoolExpr &r)
Disjunction of Boolean expressions.
TFE post(PropagatorGroup g)
Only post functions (but not propagators) from g are considered.
void clause(Home home, BoolOpType o, const BoolVarArgs &x, const BoolVarArgs &y, int n, IntPropLevel)
Post domain consistent propagator for Boolean clause with positive variables x and negative variables...
BoolExpr(void)
Default constructor.
unsigned int use
Nodes are reference counted.