Go to the documentation of this file.
36 namespace Gecode {
namespace Int {
39 IntVarImp::closer_min(
int n)
const {
40 unsigned int l = static_cast<unsigned int>(
n -
dom.
min());
41 unsigned int r = static_cast<unsigned int>(
dom.
max() -
n);
50 unsigned int i =
size() / 2;
55 while (
i >=
c->width()) {
59 return c->
min() + static_cast<int>(
i);
63 IntVarImp::in_full(
int m)
const {
67 while (m >
c->
max()) {
70 return (m >=
c->
min());
72 const RangeList*
n = NULL;
73 const RangeList*
c =
lst();
74 while (m < c->
min()) {
75 const RangeList*
p=
c->prev(
n);
n=
c;
c=
p;
77 return (m <= c->
max());
87 IntVarImp::lq_full(Space& home,
int m) {
101 RangeList*
c =
lst();
103 while (m < c->
min()) {
104 RangeList*
p =
c->prev(
n);
c->fix(
n);
105 h += (
c->
min() -
p->max() - 1);
112 n->dispose(home,
lst());
116 IntDelta
d(
dom.
max()+1,old_max);
121 IntVarImp::gq_full(Space& home,
int m) {
128 }
else if (m >
lst()->prev(NULL)->
max()) {
135 RangeList*
c =
fst();
137 while (m >
c->
max()) {
138 RangeList*
n =
c->next(
p);
c->fix(
n);
139 h += (
n->min() -
c->
max() - 1);
150 IntDelta
d(old_min,
dom.
min()-1);
155 IntVarImp::eq_full(Space& home,
int m) {
160 RangeList*
c =
fst();
161 while (m >
c->
max()) {
162 RangeList*
n=
c->next(
p);
c->fix(
n);
p=
c;
c=
n;
167 RangeList*
n=
c->next(
p);
c->fix(
n);
p=
c;
c=
n;
180 IntVarImp::nq_full(Space& home,
int m) {
189 }
else if (m ==
dom.
max()) {
193 RangeList*
f =
new (home) RangeList(
dom.
min(),m-1);
194 RangeList*
l =
new (home) RangeList(m+1,
dom.
max());
204 if ((m == f_min) && (m == f_max)) {
205 RangeList* f_next =
fst()->
next(NULL);
207 if (f_next ==
lst()) {
213 f_next->prev(
fst(),NULL);
218 }
else if (m == f_min) {
221 }
else if (m == f_max) {
225 RangeList*
f =
new (home) RangeList(f_min,m-1);
226 f->prevnext(NULL,
fst());
230 }
else if (m >
lst()->prev(NULL)->
max()) {
235 if ((m == l_min) && (m == l_max)) {
236 RangeList* l_prev =
lst()->
prev(NULL);
238 if (l_prev ==
fst()) {
240 l_prev->dispose(home,
lst());
244 l_prev->next(
lst(),NULL);
249 }
else if (m == l_max) {
252 }
else if (m == l_min) {
255 RangeList*
l =
new (home) RangeList(m+1,l_max);
256 l->prevnext(
lst(),NULL);
270 }
while (m >
c->
max());
280 }
while (m < c->
min());
285 assert((
fst() !=
c) && (
lst() !=
c));
286 assert((m >=
c->
min()) && (m <= c->
max()));
288 int c_min =
c->
min();
289 int c_max =
c->
max();
290 if ((c_min == m) && (c_max == m)) {
292 p->next(
c,
n);
n->prev(
c,
p);
293 }
else if (c_min == m) {
298 RangeList*
l =
new (home) RangeList(m+1,c_max);
329 }
while (s_c != NULL);
333 d_c->
min(
x.fst()->min());
334 d_c->
max(
x.fst()->max());
345 }
while (s_c != NULL);
346 d_c->
next(NULL,NULL);
353 IntVarImp::perform_copy(
Space& home) {
int max(void) const
Return maximum.
Post propagator for SetVar x
Gecode::ModEvent notify(Gecode::Space &home, Gecode::ModEvent me, Gecode::Delta &d)
Notify that variable implementation has been modified with modification event me and delta informatio...
friend FloatVal max(const FloatVal &x, const FloatVal &y)
RangeList * lst(void) const
Return last element of rangelist.
int min(void) const
Return minimum of domain.
void dispose(Space &home, RangeList *p, RangeList *l)
Free memory for all elements between this and l (inclusive)
void max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
void prevnext(RangeList *p, RangeList *n)
Set previous element to p and next element to n.
friend FloatVal min(const FloatVal &x, const FloatVal &y)
ModEvent fail(Space &home)
Run advisors to be run on failure and returns ME_GEN_FAILED.
bool range(void) const
Test whether domain is a range.
const Gecode::ModEvent ME_INT_NONE
Domain operation has not changed domain.
bool assigned(void) const
Test whether variable is assigned.
void subscribe(Space &home, Propagator &p, PropCond pc, bool schedule=true)
Subscribe propagator p with propagation condition pc to variable.
Integer variable implementation.
RangeList * next(const RangeList *p) const
Return next element (from previous p)
const Gecode::ModEvent ME_INT_VAL
Domain operation has resulted in a value (assigned variable)
int med(void) const
Return median of domain (greatest element not greater than the median)
Gecode toplevel namespace
RangeList * fst(void) const
Return first element of rangelist.
Base-class for propagators.
RangeList * prev(const RangeList *n) const
Return previous element (from next n)
Base-class for Int-variable implementations.
struct Gecode::@602::NNF::@65::@67 a
For atomic nodes.
const Gecode::ModEvent ME_INT_BND
Domain operation has changed the minimum or maximum of the domain.
void dom(Home home, FloatVar x, FloatVal n)
Propagates .
Post propagator for SetVar SetOpType SetVar SetRelType r
T * alloc(long unsigned int n)
Allocate block of n objects of type T from space heap.
VarImp * next(void) const
Return next copied variable.
void subscribe(Gecode::Space &home, Gecode::Propagator &p, Gecode::PropCond pc, bool assigned, bool schedule)
Subscribe propagator p with propagation condition pc.
unsigned int holes
Size of holes in the domain.
void min(Home home, SetVar s, IntVar x, Reify r)
static void schedule(Gecode::Space &home, Gecode::Propagator &p, Gecode::ModEvent me)
Schedule propagator p.
void reschedule(Space &home, Propagator &p, PropCond pc)
Re-schedule propagator p.
int ModEvent
Type for modification events.
RangeList dom
Domain information.
void max(Home home, SetVar s, IntVar x, Reify r)
int PropCond
Type for propagation conditions.
unsigned int size(void) const
Return size (cardinality) of domain.
static ModEvent me(const ModEventDelta &med)
Project modification event for this variable type from med.
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Post propagator for f(x \diamond_{\mathit{op}} y) \sim_r z \f$ void rel(Home home
Gecode::FloatVal c(-8, 8)
int n
Number of negative literals for node type.
Lists of ranges (intervals)
void reschedule(Gecode::Space &home, Gecode::Propagator &p, Gecode::PropCond pc, bool assigned)
Re-schedule propagator p.
Gecode::IntArgs i({1, 2, 3, 4})
int min(void) const
Return minimum.
const Gecode::ModEvent ME_INT_DOM
Domain operation has changed the domain.
Lists of ranges (intervals)
int p
Number of positive literals for node type.
IntVarImp(Space &home, IntVarImp &x)
Constructor for cloning x.
int max(void) const
Return maximum of domain.