38 #ifdef GECODE_HAS_SET_VARS 74 static void*
operator new(
size_t size);
76 static void operator delete(
void*
p,
size_t size);
86 SetExpr::Node::operator
new(
size_t size) {
90 SetExpr::Node::operator
delete(
void*
p, size_t) {
136 static NNF* nnf(Region&
r, Node* n,
bool neg);
138 void post(Home home, NodeType t, SetVarArgs&
b,
int&
i)
const;
149 static void*
operator new(
size_t s, Region&
r);
151 static void operator delete(
void*);
153 static void operator delete(
void*, Region&);
161 NNF::operator
delete(
void*) {}
164 NNF::operator
delete(
void*, Region&) {}
167 NNF::operator
new(
size_t s, Region&
r) {
187 rel(home,
u.a.x->x, srt, bc);
191 rel(home,
u.a.x->x, srt, s);
197 IntSetRanges sr(
u.a.x->s);
198 Set::RangesCompl<IntSetRanges> src(sr);
208 dom(home, s, srt, ss);
213 IntVar iv =
u.a.x->e.post(home,
IPL_DEF);
238 rel(home, bc, srt, s);
257 rel(home, bc, srt, s);
294 rel(home, br, srt, bc);
305 rel(home, br, srt, s);
332 rel(home,
u.a.x->x, srt, bc, b);
336 rel(home,
u.a.x->x, srt, s, b);
342 IntSetRanges sr(
u.a.x->s);
343 Set::RangesCompl<IntSetRanges> src(sr);
366 dom(home, s, invsrt, ss, b);
371 IntVar iv =
u.a.x->e.post(home,
IPL_DEF);
376 rel(home,ic,srt,s,b);
378 rel(home,iv,srt,s,b);
389 rel(home, br, srt, s, b);
400 rel(home, br, srt, s, b);
420 rel(home, br, srt, bc);
427 rel(home, br, srt, s, b);
460 u.b.l->post(home, t, b, i);
461 u.b.r->post(home, t, b, i);
468 post(home,srt,n->u.a.x->x);
474 default: n_srt = srt;
476 n->post(home,n_srt,
this);
490 post(home,srt,n->u.a.x->x,b);
496 default: n_srt = srt;
498 n->post(home,b,
true,n_srt,
this);
505 }
else if (srt ==
SRT_EQ) {
507 }
else if (srt ==
SRT_NQ) {
510 BoolVar nb(home,0,1);
512 post(home,nb,
true,srt,n);
517 NNF::nnf(Region&
r,
Node* n,
bool neg) {
523 NNF*
x =
new (
r) NNF;
524 x->t = n->t; x->neg =
neg; x->u.a.x = n;
533 return nnf(r,n->l,!neg);
540 t = n->t; xneg =
neg; neg =
false;
546 NNF* x =
new (
r) NNF;
549 x->u.b.l = nnf(r,n->l,neg);
550 x->u.b.r = nnf(r,n->r,neg);
553 p_l=x->u.b.l->p; n_l=x->u.b.l->n;
559 p_r=x->u.b.r->p; n_r=x->u.b.r->n;
630 if (n != NULL && n->decrement())
639 if (n != NULL && n->decrement())
652 NNF::nnf(r,n,
false)->post(home,
SRT_EQ,s);
659 return NNF::nnf(r,n,
false)->post(home,srt,NNF::nnf(r,e.n,
false));
665 return NNF::nnf(r,n,
false)->post(home,b,t,srt,
666 NNF::nnf(r,e.n,
false));
699 for (
int i=1; i<x.
size(); i++)
708 for (
int i=1; i<x.
size(); i++)
717 for (
int i=1; i<x.
size(); i++)
722 namespace MiniModel {
739 IntVar m = result(home,ret);
758 if (t==SNLE_CARD && irt!=
IRT_NQ) {
763 static_cast<unsigned int>(
c));
768 static_cast<unsigned int>(c-1));
772 static_cast<unsigned int>(
c),
777 static_cast<unsigned int>(c+1),
782 static_cast<unsigned int>(
c),
783 static_cast<unsigned int>(c));
788 }
else if (t==SNLE_MIN && (irt==
IRT_GR || irt==
IRT_GQ)) {
791 }
else if (t==SNLE_MAX && (irt==
IRT_LE || irt==
IRT_LQ)) {
795 rel(home,
post(home,NULL,ipl), irt, c);
803 }
else if (t==SNLE_MAX && (irt==
IRT_LE || irt==
IRT_LQ)) {
807 rel(home,
post(home,NULL,ipl), irt, c, b);
FloatVal operator-(const FloatVal &x)
int same
Number of variables in subtree with same type (for INTER and UNION)
SetExpr singleton(const LinIntExpr &e)
Singleton expression.
SetRelType
Common relation types for sets.
const SetExpr & operator=(const SetExpr &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.
const int min
Smallest allowed integer in integer set.
SetExpr operator&(const SetExpr &l, const SetExpr &r)
Intersection of set expressions.
void rfree(void *p)
Free memory block starting at p.
LinIntExpr e
Possibly a linear expression.
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
virtual void post(Home home, IntRelType irt, int c, BoolVar b, IntPropLevel ipl) const
Post reified expression to be in relation irt with c.
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
Base class for non-linear expressions over integer variables.
void * ralloc(size_t s)
Allocate s bytes from heap.
SetVar x
Possibly a variable.
virtual void post(Home home, IntRelType irt, int c, IntPropLevel ipl) const
Post expression to be in relation irt with c.
const unsigned int card
Maximum cardinality of an integer set.
const int max
Largest allowed integer in integer set.
SetExpr setdunion(const SetVarArgs &x)
Disjoint union of set variables.
Gecode::FloatVal c(-8, 8)
bool same(const ConstView< ViewA > &, const ConstView< ViewB > &)
Test whether two views are the same.
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.
IntSet s
Possibly a constant.
struct Gecode::@604::NNF::@68::@70 a
For atomic nodes.
IntRelType
Relation types for integers.
FloatVal operator+(const FloatVal &x)
struct Gecode::@604::NNF::@68::@69 b
For binary nodes (and, or, eqv)
NodeType t
Type of expression.
Class to set group information when a post function is executed.
virtual IntVar post(Home home, IntVar *ret, IntPropLevel) const
Post expression.
Simple propagation levels.
SetExpr(void)
Default constructor.
bool failed(void) const
Check whether corresponding space is failed.
unsigned int size(I &i)
Size of all ranges of range iterator i.
Node(void)
Default constructor.
NodeType
Type of set expression.
SetExpr setunion(const SetVarArgs &x)
Union of set variables.
Integer valued set expressions.
Minimum element expression.
static const IntSet empty
Empty set.
BoolVar expr(Home home, const BoolExpr &e, IntPropLevel ipl)
Post Boolean expression and return its value.
Boolean integer variables.
LinIntExpr cardinality(const SetExpr &e)
Cardinality of set expression.
Post propagator for SetVar SetOpType SetVar SetRelType r
SetExpr inter(const SetVarArgs &x)
Intersection of set variables.
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
IntPropLevel
Propagation levels for integer propagators.
Linear expressions over integer variables.
Heap heap
The single global heap.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
union Gecode::@604::NNF::@68 u
Union depending on nodetype t.
unsigned int use
Nodes are reference counted.
Post propagator for SetVar x
#define GECODE_MINIMODEL_EXPORT
SetExpr operator|(const SetExpr &l, const SetExpr &r)
Union of set expressions.
SetNonLinIntExprType
The expression type.
Gecode toplevel namespace
Maximum element expression.
Home class for posting propagators
~SetExpr(void)
Destructor.
#define GECODE_NEVER
Assert that this command is never executed.
SetNonLinIntExpr(const SetExpr &e0, SetNonLinIntExprType t0)
Constructor.
bool decrement(void)
Decrement reference count and possibly free memory.
SetVar post(Home home) const
Post propagators for expression.
int p
Number of positive literals for node type.