Go to the documentation of this file.
36 namespace Gecode {
namespace Set {
namespace Element {
38 template<
class View,
class View0,
class View1>
43 :
Propagator(home), universe(theUniverse), iv(iv0), x0(y0), x1(y1) {
50 template<
class View,
class View0,
class View1>
60 template<
class View,
class View0,
class View1>
67 template<
class View,
class View0,
class View1>
75 template<
class View,
class View0,
class View1>
89 template<
class View,
class View0,
class View1>
104 template<
class View,
class View0,
class View1>
110 template<
class View,
class View0,
class View1>
136 LUBndSet sofarBefore(home,universe);
144 if (iv[
i].idx < vx0ub.
val()) {
149 assert(iv[
i].idx == vx0ub.
val());
152 View candidate = iv[j].view;
153 int candidateInd = iv[j].idx;
166 if (candidate.cardMax() < x1.cardMin() ||
168 ModEvent me = (x0.exclude(home,candidateInd));
179 if (vx0() && vx0.
val()==candidateInd) {
182 ModEvent me = candidate.includeI(home,x1lb);
187 me = x1.intersectI(home,candub);
193 before[j].
update(home,sofarBefore);
204 for (
int k=
i; k<
n; k++) {
210 if (x0.cardMax()==0) {
221 before[
i].dispose(home);
228 ModEvent me = x1.includeI(home,sfB);
235 LUBndSet sofarAfter(home, universe);
239 for (
int i=
n;
i--;) {
240 if (sofarAfter.
size() == 0)
break;
250 ModEvent me = (x0.include(home,iv[
i].idx));
255 me = iv[
i].view.excludeI(home,diff);
269 if (x0.assigned() && !x1.assigned()) {
270 int ubsize = static_cast<int>(x0.lubSize());
277 ::
post(home(*
this),is,x1)));
278 }
else if (ubsize == 2) {
283 ::
post(home(*
this),
a,
b,x1)));
284 }
else if (ubsize == 1) {
294 bool allAssigned =
true;
295 for (
int i=iv.
size();
i--;) {
296 if (!iv[
i].view.assigned()) {
301 if (x1.assigned() && x0.assigned() && allAssigned) {
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
Propagator for nary intersection
void notice(Actor &a, ActorProperty p, bool duplicate=false)
Notice actor property.
ExecStatus ES_SUBSUMED(Propagator &p)
Propagator for element with intersection
An array of IdxView pairs.
bool intersectI(Space &home, I &i)
Exclude all elements not in the set represented by i from this set.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.
void update(Space &home, IdxViewArray< View > &x)
Cloning.
static ExecStatus post(Home home, IdxViewArray &x, View0 y, View1 z, const IntSet &u)
Propagator for set equality
static PropCost linear(PropCost::Mod m, unsigned int n)
Linear complexity for modifier pcm and size measure n.
Base-class for both propagators and branchers.
int val(void) const
Return current value.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
virtual void reschedule(Space &home)
Schedule function.
Range iterator for integer sets.
Gecode toplevel namespace
Base-class for propagators.
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
Propagator for ternary intersection
Home class for posting propagators
unsigned int size(void) const
Return size.
Value iterator from range iterator.
Actor must always be disposed.
Range iterator for computing intersection (binary)
Post propagator for SetVar SetOpType SetVar SetRelType r
Range iterator for computing set difference.
void update(Space &home, BndSet &x)
Update this set to be a clone of set x.
TFE post(PropagatorGroup g)
Only post functions (but not propagators) from g are considered.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Range iterator for the greatest lower bound.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
ElementIntersection(Space &home, ElementIntersection &p)
Constructor for cloning p.
int size(void) const
Return the current size.
int ModEvent
Type for modification events.
void dispose(Space &home)
Free memory used by this set.
bool failed(void) const
Check whether space is failed.
int size(void) const
Return size of array (number of elements)
Propagation has computed fixpoint.
Range iterator for the least upper bound.
void subscribe(Space &home, Propagator &p, PropCond pc, bool process=true)
Range iterator for integer sets.
const Gecode::PropCond PC_SET_ANY
Propagate when any bound or the cardinality of a view changes.
Range iterator for singleton range.
void ignore(Actor &a, ActorProperty p, bool duplicate=false)
Ignore actor property.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
virtual size_t dispose(Space &home)
Delete actor and return its size.
bool me_modified(ModEvent me)
Check whether modification event me describes variable modification.
Shrinking sets of integers.
int n
Number of negative literals for node type.
int ModEventDelta
Modification event deltas.
Gecode::IntArgs i({1, 2, 3, 4})
SetExpr inter(const SetVarArgs &x)
Intersection of set variables.
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
int p
Number of positive literals for node type.