36 namespace 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) {
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) {
241 if (
x0.cardMin() > 0) {
248 me =
x1.cardMin(home, minCard);
254 if (
x0.cardMax() <= 1) {
274 for (
int i=n; i--;) {
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) {
319 ::
post(home(*
this),a,b,
x1)));
320 }
else if (ubsize == 1) {
331 if (!
iv[
i].view.assigned())
333 if (!
x1.assigned() || !
x0.assigned())
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
Propagator for nary union
Range iterator for singleton range.
static PropCost linear(PropCost::Mod m, unsigned int n)
Linear complexity for modifier pcm and size measure n.
const int min
Smallest allowed integer in integer set.
ExecStatus ES_SUBSUMED(Propagator &p)
const FloatNum max
Largest allowed float value.
Actor must always be disposed.
Propagator for ternary union
virtual void reschedule(Space &home)
Schedule function.
Shrinking sets of integers.
int ModEvent
Type for modification events.
Base-class for propagators.
void update(Space &home, IdxViewArray< View > &x)
Cloning.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Range iterator for the greatest lower bound.
Propagation has computed fixpoint.
const unsigned int card
Maximum cardinality of an integer set.
const int max
Largest allowed integer in integer set.
int val(void) const
Return current value.
Range iterator for the least upper bound.
Base-class for both propagators and branchers.
int p
Number of positive literals for node type.
const FloatNum min
Smallest allowed float value.
int n
Number of negative literals for node type.
Gecode::IntArgs i({1, 2, 3, 4})
void cancel(Space &home, Propagator &p, PropCond pc)
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.
struct Gecode::@593::NNF::@62::@63 b
For binary nodes (and, or, eqv)
Value iterator from range iterator.
ElementUnion(Space &home, ElementUnion &p)
Constructor for cloning p.
Range iterator for integer sets.
static ExecStatus post(Home home, IdxViewArray &x, View0 y, View1 z)
int size(void) const
Return the current size.
void update(Space &home, BndSet &x)
Update this set to be a clone of set x.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
bool includeI(Space &home, I &i)
Include the set represented by i in this set.
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.
Range iterator for computing union (binary)
Post propagator for SetVar SetOpType SetVar SetRelType r
SetExpr inter(const SetVarArgs &x)
Intersection of set variables.
void reschedule(Space &home, Propagator &p, PropCond pc)
Schedule propagator p.
void ignore(Actor &a, ActorProperty p, bool duplicate=false)
Ignore actor property.
Propagator for element with union
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.
virtual size_t dispose(Space &home)
Delete actor and return its size.
void subscribe(Space &home, Propagator &p, PropCond pc, bool process=true)
Growing sets of integers.
bool me_modified(ModEvent me)
Check whether modification event me describes variable modification.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
Propagator for set equality
An array of IdxView pairs.
Gecode toplevel namespace
Range iterator for computing set difference.
int ModEventDelta
Modification event deltas.
Home class for posting propagators
struct Gecode::@593::NNF::@62::@64 a
For atomic nodes.
void * ralloc(size_t s)
Allocate memory from region.