40 namespace Gecode {
namespace Set {
namespace Element {
42 template<
class View,
class View0,
class View1>
47 :
Propagator(home), universe(theUniverse), iv(iv0), x0(y0), x1(y1) {
54 template<
class View,
class View0,
class View1>
60 x0.update(home,share,
p.x0);
61 x1.update(home,share,
p.x1);
66 template<
class View,
class View0,
class View1>
73 template<
class View,
class View0,
class View1>
81 template<
class View,
class View0,
class View1>
95 template<
class View,
class View0,
class View1>
110 template<
class View,
class View0,
class View1>
116 template<
class View,
class View0,
class View1>
142 LUBndSet sofarBefore(home,universe);
150 if (iv[
i].idx < vx0ub.
val()) {
155 assert(iv[
i].idx == vx0ub.
val());
158 View candidate = iv[j].view;
159 int candidateInd = iv[j].idx;
172 if (candidate.cardMax() < x1.cardMin() ||
174 ModEvent me = (x0.exclude(home,candidateInd));
185 if (vx0() && vx0.
val()==candidateInd) {
188 ModEvent me = candidate.includeI(home,x1lb);
193 me = x1.intersectI(home,candub);
199 before[j].update(home,sofarBefore);
210 for (
int k=
i; k<
n; k++) {
216 if (x0.cardMax()==0) {
234 ModEvent me = x1.includeI(home,sfB);
241 LUBndSet sofarAfter(home, universe);
245 for (
int i=
n;
i--;) {
246 if (sofarAfter.
size() == 0)
break;
256 ModEvent me = (x0.include(home,iv[
i].idx));
261 me = iv[
i].view.excludeI(home,diff);
275 if (x0.assigned() && !x1.assigned()) {
276 int ubsize =
static_cast<int>(x0.lubSize());
283 ::
post(home(*
this),is,x1)));
284 }
else if (ubsize == 2) {
289 ::
post(home(*
this),
a,
b,x1)));
290 }
else if (ubsize == 1) {
300 bool allAssigned =
true;
301 for (
int i=iv.
size();
i--;) {
302 if (!iv[
i].view.assigned()) {
307 if (x1.assigned() && x0.assigned() && allAssigned) {
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
static ExecStatus post(Home home, IdxViewArray &x, View0 y, View1 z, const IntSet &u)
int size(void) const
Return size of array (number of elements)
Range iterator for singleton range.
static PropCost linear(PropCost::Mod m, unsigned int n)
Linear complexity for modifier pcm and size measure n.
Range iterator for integer sets.
ExecStatus ES_SUBSUMED(Propagator &p)
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.
Actor must always be disposed.
Shrinking sets of integers.
int ModEvent
Type for modification events.
Base-class for propagators.
Range iterator for the greatest lower bound.
Propagation has computed fixpoint.
int val(void) const
Return current value.
Range iterator for the least upper bound.
Base-class for both propagators and branchers.
virtual void reschedule(Space &home)
Schedule function.
struct Gecode::@579::NNF::@61::@63 a
For atomic nodes.
int p
Number of positive literals for node type.
Gecode::IntArgs i(4, 1, 2, 3, 4)
int n
Number of negative literals for node type.
unsigned int size(void) const
Return size.
Range iterator for computing intersection (binary)
bool intersectI(Space &home, I &i)
Exclude all elements not in the set represented by i from this set.
bool failed(void) const
Check whether space is failed.
Value iterator from range iterator.
struct Gecode::@579::NNF::@61::@62 b
For binary nodes (and, or, eqv)
Range iterator for integer sets.
ElementIntersection(Space &home, bool share, ElementIntersection &p)
Constructor for cloning p.
int size(void) const
Return the current size.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
void notice(Actor &a, ActorProperty p, bool duplicate=false)
Notice actor property.
void dispose(Space &home)
Free memory used by this set.
const Gecode::PropCond PC_SET_ANY
Propagate when any bound or the cardinality of a view changes.
Propagator for element with intersection
Post propagator for SetVar SetOpType SetVar SetRelType r
SetExpr inter(const SetVarArgs &x)
Intersection of set variables.
void update(Space &home, bool share, SharedHandle &sh)
Updating during cloning.
void ignore(Actor &a, ActorProperty p, bool duplicate=false)
Ignore actor property.
virtual size_t dispose(Space &home)
Delete actor and return its size.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
void subscribe(Space &home, Propagator &p, PropCond pc, bool process=true)
virtual size_t dispose(Space &home)
Delete propagator and return its size.
bool me_modified(ModEvent me)
Check whether modification event me describes variable modification.
Propagator for set equality
An array of IdxView pairs.
Gecode toplevel namespace
Range iterator for computing set difference.
int ModEventDelta
Modification event deltas.
bool before(const ConstSetView &x, const ConstSetView &y)
virtual Actor * copy(Space &home, bool)
Copy propagator during cloning.
Home class for posting propagators
Propagator for nary intersection
TFE post(PropagatorGroup g)
Only post functions (but not propagators) from g are considered.
Propagator for ternary intersection
void update(Space &home, bool share, IdxViewArray< View > &x)
Cloning.