48 namespace Gecode {
namespace Set {
namespace Int {
94 assert(
x0.cardMin()>=1);
98 unsigned int size = 0;
102 int* ub = r.
alloc<
int>(size*2);
107 ub[2*i+1] = ubr.max();
110 unsigned int x0cm =
x0.cardMin()-1;
111 for (
unsigned int i=size;
i--;) {
112 unsigned int width =
static_cast<unsigned int>(ub[2*
i+1]-ub[2*
i]+1);
114 maxN =
static_cast<int>(ub[2*
i+1]-x0cm);
169 if ((
x0.cardMax() == 0) ||
171 ((
x0.glbSize() > 0) && (
x0.glbMin() <
x1.
min())))
181 if (
x0.glbMin() ==
x0.lubMin()) {
189 unsigned int oldGlbSize =
x0.glbSize();
230 int* _ur = r.
alloc<
int>(num_ranges*2);
234 _ur[2*
i ] = ur.min();
235 _ur[2*i+1] = ur.max();
239 unsigned int n =
x0.cardMin();
241 for (
int i=num_ranges; i--; ) {
243 unsigned int num_values =
static_cast<unsigned int>(_ur[2*i+1]-_ur[2*
i]+1);
245 if (num_values >= n) {
247 nth_largest =
static_cast<int>(_ur[2*i+1]-n+1);
254 if (
x1.
min() > nth_largest)
260 template<
class View, ReifyMode rm>
269 template<
class View, ReifyMode rm>
277 template<
class View, ReifyMode rm>
284 template<
class View, ReifyMode rm>
290 template<
class View, ReifyMode rm>
308 if ((
x0.cardMax() == 0) ||
310 ((
x0.glbSize() > 0) && (
x0.glbMin() <
x1.
min())))
317 if (
x0.glbMin() ==
x0.lubMin()) {
330 else if ((
x0.glbMin() <
x1.
min()) ||
429 assert(
x0.cardMin()>=1);
477 if ((
x0.cardMax() == 0) ||
479 ((
x0.glbSize() > 0) && (
x0.glbMax() >
x1.
max())))
489 if (
x0.glbMax() ==
x0.lubMax()) {
497 unsigned int oldGlbSize =
x0.glbSize();
508 if (ur.
width() == 1) {
531 unsigned int n =
x0.cardMin();
534 if (ur.width() >=
n) {
536 nth_smallest =
static_cast<int>(ur.min() + n - 1);
543 if (
x1.
max() < nth_smallest)
549 template<
class View, ReifyMode rm>
558 template<
class View, ReifyMode rm>
565 template<
class View, ReifyMode rm>
574 template<
class View, ReifyMode rm>
580 template<
class View, ReifyMode rm>
598 if ((
x0.cardMax() == 0) ||
600 ((
x0.glbSize() > 0) && (
x0.glbMax() >
x1.
max())))
607 if (
x0.glbMax() ==
x0.lubMax()) {
620 else if ((
x0.glbMax() <
x1.
min()) ||
645 unsigned int n =
x0.cardMin();
651 nth_smallest =
static_cast<int>(ur.min() + n - 1);
658 if (
x1.
max() < nth_smallest) {
ModEvent inter_r(Space &home, I &i, bool depends=true)
Intersect domain with ranges described by i.
ModEvent nq(Space &home, int n)
Restrict domain values to be different from n.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
int val(void) const
Return assigned value (only if assigned)
#define GECODE_REWRITE(prop, post)
Rewrite propagator by executing post function.
static ExecStatus post(Home home, View s, Gecode::Int::IntView x)
Post propagator for x is the minimal element of s.
bool zero(void) const
Test whether view is assigned to be zero.
MinElement(Space &home, MinElement &p)
Constructor for cloning p.
Inverse implication for reification.
Range iterator for the unknown set.
const int min
Smallest allowed integer in integer set.
ExecStatus ES_SUBSUMED(Propagator &p)
View x0
View of type View0.
Propagator for not maximum element
T * alloc(long unsigned int n)
Allocate block of n objects of type T from region.
bool one(void) const
Test whether view is assigned to be one.
Reified mixed binary propagator.
int max(void) const
Return largest value of range.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
static const int MIN_OF_EMPTY
Returned by empty sets when asked for their minimum element.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
Propagation has computed fixpoint.
const int max
Largest allowed integer in integer set.
static ExecStatus post(Home home, View s, Gecode::Int::IntView x)
Post propagator for x is not the minimal element of s.
Gecode::Int::IntView x1
View of type View1.
MaxElement(Space &home, MaxElement &p)
Constructor for cloning p.
Base-class for both propagators and branchers.
Propagator for reified minimum element
virtual Actor * copy(Space &home)
Copy propagator during cloning.
static const int MAX_OF_EMPTY
Returned by empty sets when asked for their maximum element.
bool in(int n) const
Test whether n is contained in domain.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
NotMaxElement(Space &home, NotMaxElement &p)
Constructor for cloning p.
int p
Number of positive literals for node type.
Gecode::IntArgs i(4, 1, 2, 3, 4)
int n
Number of negative literals for node type.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Propagator for not minimum element
static ExecStatus post(Home home, View s, Gecode::Int::IntView x, Gecode::Int::BoolView b)
Post reified propagator for b iff x is the minimal element of s.
ModEvent lq(Space &home, int n)
Restrict domain values to be less or equal than n.
Range iterator for computing intersection (binary)
NotMinElement(Space &home, NotMinElement &p)
Constructor for cloning p.
const Gecode::PropCond PC_INT_BND
Propagate when minimum or maximum of a view changes.
View x0
View of type View0.
const Gecode::PropCond PC_INT_DOM
Propagate when domain changes.
int min(void) const
Return minimum of domain.
size_t size
The size of the propagator (used during subsumption)
static ExecStatus post(Home home, View s, Gecode::Int::IntView x)
Post propagator for x is the largest element of s.
#define GECODE_ME_CHECK(me)
Check whether modification event me is failed, and forward failure.
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
const Gecode::PropCond PC_SET_ANY
Propagate when any bound or the cardinality of a view changes.
Post propagator for SetVar SetOpType SetVar SetRelType r
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Propagator for maximum element
Integer view for integer variables.
bool assigned(void) const
Test whether view is assigned.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
Reified propagator for maximum element
ReMinElement(Space &home, ReMinElement &p)
Constructor for cloning p.
Gecode::Int::BoolView b
Boolean control view.
ReMaxElement(Space &home, ReMaxElement &p)
Constructor for cloning p.
ModEvent gq(Space &home, int n)
Restrict domain values to be greater or equal than n.
Gecode toplevel namespace
int max(void) const
Return maximum of domain.
Implication for reification.
int min(void) const
Return smallest value of range.
static ExecStatus post(Home home, View s, Gecode::Int::IntView x, Gecode::Int::BoolView b)
Post reified propagator for b iff x is the largest element of s.
unsigned int width(void) const
Return width of range (distance between minimum and maximum)
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Gecode::Int::IntView x1
View of type View1.
int ModEventDelta
Modification event deltas.
Home class for posting propagators
static ExecStatus post(Home home, View s, Gecode::Int::IntView x)
Post propagator for x is not the largest element of s.
virtual Actor * copy(Space &home)
Copy propagator during cloning.
Propagator for minimum element
virtual ExecStatus propagate(Space &home, const ModEventDelta &med)
Perform propagation.
Boolean view for Boolean variables.