Go to the documentation of this file.
36 namespace Gecode {
namespace Set {
namespace Element {
38 template<
class SView,
class RView>
49 for (
unsigned int i=iv0.size();
i--;)
53 template<
class SView,
class RView>
61 for (
unsigned int i=
n_iv;
i--;)
65 template<
class SView,
class RView>
71 template<
class SView,
class RView>
78 template<
class SView,
class RView>
86 for (
unsigned int i=n_iv;
i--;)
92 template<
class SView,
class RView>
107 template<
class SView,
class RView>
113 template<
class SView,
class RView>
118 bool* stillSelected =
r.alloc<
bool>(n_iv);
123 for (
int i=n_iv;
i--;)
124 stillSelected[
i] =
false;
148 unsigned int maxCard = 0;
162 bool selectSingleInconsistent =
false;
163 if (x1.cardMax() <= 1) {
168 selectSingleInconsistent = diff2() || candidateCard < x0.cardMin();
179 if (selectSingleInconsistent ||
180 candidateCard > x0.cardMax() ||
186 stillSelected[
i] =
true;
189 if (vx1() && vx1.
val()==
i) {
193 ModEvent me = x0.includeI(home,candlb);
199 before[
i].
update(home,sofarBefore);
204 maxCard =
std::max(maxCard, candidateCard);
205 minCard =
std::min(minCard, candidateCard);
211 if (x1.cardMax()==0) {
216 for (
int i=n_iv;
i--;)
217 if (stillSelected[
i])
224 if (x1.cardMin() > 0) {
231 me = x0.cardMin(home, minCard);
237 if (x1.cardMax() <= 1) {
238 ModEvent me = x0.cardMax(home, maxCard);
246 ModEvent me = x0.intersectI(home,sfB);
257 for (
int i=n_iv;
i--;) {
258 if (!stillSelected[
i])
286 assert(x0.assigned());
void notice(Actor &a, ActorProperty p, bool duplicate=false)
Notice actor property.
virtual size_t dispose(Space &home)
Delete propagator and return its size.
ExecStatus ES_SUBSUMED(Propagator &p)
bool includeI(Space &home, I &i)
Include the set represented by i in this set.
unsigned int size(I &i)
Size of all ranges of range iterator i.
bool intersectI(Space &home, I &i)
Exclude all elements not in the set represented by i from this set.
const int min
Smallest allowed integer in integer set.
ElementUnionConst(Space &home, ElementUnionConst &p)
Constructor for cloning p.
const FloatNum min
Smallest allowed float value.
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.
bool subset(I &i, J &j)
Check whether range iterator i is subset of range iterator j.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
int val(void) const
Return current value.
Range iterator for integer sets.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Gecode toplevel namespace
Base-class for propagators.
const int max
Largest allowed integer in integer set.
const unsigned int card
Maximum cardinality of an integer set.
virtual PropCost cost(const Space &home, const ModEventDelta &med) const
Cost function.
Home class for posting propagators
Value iterator from range iterator.
@ AP_DISPOSE
Actor must always be disposed.
Post propagator for SetVar SetOpType SetVar SetRelType r
Range iterator for computing set difference.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from space heap.
void update(Space &home, BndSet &x)
Update this set to be a clone of set x.
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
Range iterator for the greatest lower bound.
const Gecode::ModEvent ME_SET_FAILED
Domain operation has resulted in failure.
virtual void reschedule(Space &home)
Schedule function.
int ModEvent
Type for modification events.
void dispose(Space &home)
Free memory used by this set.
Range iterator for computing union (binary)
bool failed(void) const
Check whether space is failed.
@ ES_FIX
Propagation has computed fixpoint.
Range iterator for the least upper bound.
Range iterator for integer sets.
Growing sets of integers.
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.
Propagator for element with union of constant sets
static ExecStatus post(Home home, SView z, const IntSetArgs &x, RView y)
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.
@ ES_OK
Execution is okay.
int p
Number of positive literals for node type.
const FloatNum max
Largest allowed float value.