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;
146 static_cast<GLBndSet*>(
r.ralloc(
sizeof(
GLBndSet)*n_iv));
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());
struct Gecode::@602::NNF::@65::@66 b
For binary nodes (and, or, eqv)
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.
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.
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.
int size(void) const
Return size of array (number of elements)
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.
int p
Number of positive literals for node type.
const FloatNum max
Largest allowed float value.