38 namespace Gecode {
namespace Int {
namespace Linear {
44 template<
class Val,
class A,
class B,
class C, PropCond pc>
48 x0.subscribe(home,*
this,pc);
49 x1.subscribe(home,*
this,pc);
50 x2.subscribe(home,*
this,pc);
53 template<
class Val,
class A,
class B,
class C, PropCond pc>
58 x0.update(home,share,p.
x0);
59 x1.update(home,share,p.
x1);
60 x2.update(home,share,p.
x2);
63 template<
class Val,
class A,
class B,
class C, PropCond pc>
66 A y0, B y1, C y2, Val c0)
68 x0.update(home,share,y0);
69 x1.update(home,share,y1);
70 x2.update(home,share,y2);
73 template<
class Val,
class A,
class B,
class C, PropCond pc>
79 template<
class Val,
class A,
class B,
class C, PropCond pc>
82 x0.cancel(home,*
this,pc);
83 x1.cancel(home,*
this,pc);
84 x2.cancel(home,*
this,pc);
94 template<
class Val,
class A,
class B,
class C>
99 template<
class Val,
class A,
class B,
class C>
107 template<
class Val,
class A,
class B,
class C>
112 template<
class Val,
class A,
class B,
class C>
115 A x0, B x1, C x2, Val
c)
116 :
LinTer<Val,A,B,C,
PC_INT_BND>(home,share,p,x0,x1,x2,c) {}
118 template<
class Val,
class A,
class B,
class C>
135 #define GECODE_INT_PV(CASE,TELL,UPDATE) \
137 bm -= (CASE); ModEvent me = (TELL); \
138 if (me_failed(me)) return ES_FAILED; \
139 if (me_modified(me)) bm |= (UPDATE); \
142 template<
class Val,
class A,
class B,
class C>
160 return (x0.assigned() && x1.assigned()) ?
173 template<
class Val,
class A,
class B,
class C>
178 template<
class Val,
class A,
class B,
class C>
186 template<
class Val,
class A,
class B,
class C>
191 template<
class Val,
class A,
class B,
class C>
197 template<
class Val,
class A,
class B,
class C>
200 A x0, B x1, C x2, Val
c)
201 :
LinTer<Val,A,B,C,
PC_INT_VAL>(home,share,p,x0,x1,x2,c) {}
204 template<
class Val,
class A,
class B,
class C>
207 if (x0.assigned() && x1.assigned()) {
211 if (x0.assigned() && x2.assigned()) {
215 if (x1.assigned() && x2.assigned()) {
229 template<
class Val,
class A,
class B,
class C>
234 template<
class Val,
class A,
class B,
class C>
242 template<
class Val,
class A,
class B,
class C>
247 template<
class Val,
class A,
class B,
class C>
254 template<
class Val,
class A,
class B,
class C>
257 A x0, B x1, C x2, Val
c)
258 :
LinTer<Val,A,B,C,
PC_INT_BND>(home,share,p,x0,x1,x2,c) {}
260 template<
class Val,
class A,
class B,
class C>
266 return (x0.max()+x1.max()+x2.max() <=
c) ?
static ExecStatus post(Home home, A x0, B x1, C x2, Val c)
Post propagator for .
virtual Actor * copy(Space &home, bool share)
Create copy during cloning.
ExecStatus ES_SUBSUMED(Propagator &p)
virtual Actor * copy(Space &home, bool share)
Create copy during cloning.
Propagator for bounds consistent ternary linear equality
Base-class for propagators.
Base-class for ternary linear propagators.
Propagation has computed fixpoint.
EqTer(Space &home, bool share, EqTer &p)
Constructor for cloning p.
LinTer(Space &home, bool share, LinTer &p)
Constructor for cloning p.
Base-class for both propagators and branchers.
Propagator for bounds consistent ternary linear less or equal
Gecode::FloatVal c(-8, 8)
int p
Number of positive literals for node type.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
const Gecode::PropCond PC_INT_BND
Propagate when minimum or maximum of a view changes.
static ExecStatus post(Home home, A x0, B x1, C x2, Val c)
Post propagator for .
NqTer(Space &home, bool share, NqTer &p)
Constructor for cloning p.
TerMod
Describe which view has been modified how.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
virtual Actor * copy(Space &home, bool share)
Create copy during cloning.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
virtual size_t dispose(Space &home)
Delete actor and return its size.
static ExecStatus post(Home home, A x0, B x1, C x2, Val c)
Post propagator for .
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
static PropCost ternary(PropCost::Mod m)
Three variables for modifier pcm.
Gecode toplevel namespace
friend FloatVal max(const FloatVal &x, const FloatVal &y)
Propagator for bounds consistent ternary linear disquality
int ModEventDelta
Modification event deltas.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
friend FloatVal min(const FloatVal &x, const FloatVal &y)
Home class for posting propagators
#define GECODE_INT_PV(CASE, TELL, UPDATE)
LqTer(Space &home, bool share, LqTer &p)
Constructor for cloning p.
const Gecode::PropCond PC_INT_VAL
Propagate when a view becomes assigned (single value)
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function (defined as low ternary)