36namespace Gecode {
namespace Set {
namespace Element {
38 template<
class View,
class View0,
class View1>
49 template<
class View,
class View0,
class View1>
59 template<
class View,
class View0,
class View1>
66 template<
class View,
class View0,
class View1>
74 template<
class View,
class View0,
class View1>
87 template<
class View,
class View0,
class View1>
101 template<
class View,
class View0,
class View1>
107 template<
class View,
class View0,
class View1>
141 unsigned int maxCard = 0;
147 if (iv[i].idx < vx0ub.
val()) {
152 assert(iv[i].idx == vx0ub.
val());
155 View candidate = iv[j].view;
156 int candidateInd = iv[j].idx;
164 bool selectSingleInconsistent =
false;
165 if (x0.cardMax() <= 1) {
170 selectSingleInconsistent =
171 diff2() || candidate.cardMax() < x1.cardMin();
182 if (selectSingleInconsistent ||
183 candidate.cardMin() > x1.cardMax() ||
185 ModEvent me = (x0.exclude(home,candidateInd));
196 if (vx0() && vx0.
val()==candidateInd) {
199 ModEvent me = x1.includeI(home,candlb);
204 me = candidate.intersectI(home,x1ub);
210 before[j].
update(home,sofarBefore);
215 maxCard = std::max(maxCard, candidate.cardMax());
216 minCard = std::min(minCard, candidate.cardMin());
225 for (
int k=i; k<
n; k++) {
231 if (x0.cardMax()==0) {
237 before[i].dispose(home);
241 if (x0.cardMin() > 0) {
245 ModEvent me = x1.includeI(home, si);
248 me = x1.cardMin(home, minCard);
254 if (x0.cardMax() <= 1) {
255 ModEvent me = x1.cardMax(home, maxCard);
263 ModEvent me = x1.intersectI(home,sfB);
274 for (
int i=
n; i--;) {
286 ModEvent me = (x0.include(home,iv[i].idx));
291 me = iv[i].view.includeI(home,diff);
305 if (x0.assigned() && !x1.assigned()) {
306 int ubsize =
static_cast<int>(x0.lubSize());
313 ::post(home(*
this),is,x1)));
314 }
else if (ubsize == 2) {
320 }
else if (ubsize == 1) {
330 for (
int i=iv.
size(); i--;)
331 if (!iv[i].view.assigned())
333 if (!x1.assigned() || !x0.assigned())
struct Gecode::@603::NNF::@65::@66 b
For binary nodes (and, or, eqv)
int p
Number of positive literals for node type.
int n
Number of negative literals for node type.
struct Gecode::@603::NNF::@65::@67 a
For atomic nodes.
Base-class for both propagators and branchers.
virtual size_t dispose(Space &home)
Delete actor and return its size.
int size(void) const
Return size of array (number of elements)
Home class for posting propagators
void notice(Actor &a, ActorProperty p, bool duplicate=false)
Notice actor property.
An array of IdxView pairs.
void subscribe(Space &home, Propagator &p, PropCond pc, bool process=true)
void update(Space &home, IdxViewArray< View > &x)
Cloning.
int size(void) const
Return the current size.
Range iterator for computing set difference.
Range iterator for singleton range.
Value iterator from range iterator.
int val(void) const
Return current value.
Range iterator for computing union (binary)
static PropCost linear(PropCost::Mod m, unsigned int n)
Linear complexity for modifier pcm and size measure n.
Base-class for propagators.
Range iterator for integer sets.
void update(Space &home, BndSet &x)
Update this set to be a clone of set x.
void dispose(Space &home)
Free memory used by this set.
Propagator for element with union
virtual void reschedule(Space &home)
Schedule function.
Growing sets of integers.
bool includeI(Space &home, I &i)
Include the set represented by i in this set.
Range iterator for the greatest lower bound.
Shrinking sets of integers.
bool intersectI(Space &home, I &i)
Exclude all elements not in the set represented by i from this set.
Range iterator for the least upper bound.
Propagator for nary union
Propagator for ternary union
Propagator for set equality
ExecStatus ES_SUBSUMED(Propagator &p)
void ignore(Actor &a, ActorProperty p, bool duplicate=false)
Ignore actor property.
int ModEventDelta
Modification event deltas.
bool failed(void) const
Check whether space is failed.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
bool me_modified(ModEvent me)
Check whether modification event me describes variable modification.
@ AP_DISPOSE
Actor must always be disposed.
const int min
Smallest allowed integer value.
const int max
Largest allowed integer value.
const unsigned int card
Maximum cardinality of an integer set.
const Gecode::PropCond PC_SET_ANY
Propagate when any bound or the cardinality of a view changes.
Gecode toplevel namespace
Post propagator for SetVar SetOpType SetVar SetRelType r
SetExpr inter(const SetVarArgs &)
Intersection of set variables.
TFE post(PropagatorGroup g)
Only post functions (but not propagators) from g are considered.
@ ES_OK
Execution is okay.
@ ES_FIX
Propagation has computed fixpoint.
int ModEvent
Type for modification events.