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());
74 while (m < c->
min()) {
77 return (m <= c->
max());
87 IntVarImp::lq_full(
Space& home,
int m) {
103 while (m < c->
min()) {
105 h += (c->
min() - p->
max() - 1);
121 IntVarImp::gq_full(
Space& home,
int m) {
128 }
else if (m >
lst()->prev(NULL)->
max()) {
137 while (m > c->
max()) {
139 h += (n->
min() - c->
max() - 1);
155 IntVarImp::eq_full(
Space& home,
int m) {
161 while (m > c->
max()) {
180 IntVarImp::nq_full(
Space& home,
int m) {
189 }
else if (m ==
dom.
max()) {
204 if ((m == f_min) && (m == f_max)) {
207 if (f_next ==
lst()) {
218 }
else if (m == f_min) {
221 }
else if (m == f_max) {
230 }
else if (m >
lst()->prev(NULL)->
max()) {
235 if ((m == l_min) && (m == l_max)) {
238 if (l_prev ==
fst()) {
249 }
else if (m == l_max) {
252 }
else if (m == l_min) {
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)) {
293 }
else if (c_min == m) {
329 }
while (s_c != NULL);
345 }
while (s_c != NULL);
346 d_c->
next(NULL,NULL);
353 IntVarImp::perform_copy(
Space& home) {
RangeList * next(const RangeList *p) const
Return next element (from previous p)
int min(void) const
Return minimum.
int min(void) const
Return minimum of domain.
IntVarImp(Space &home, IntVarImp &x)
Constructor for cloning x.
void dispose(Space &home, RangeList *p, RangeList *l)
Free memory for all elements between this and l (inclusive)
bool range(void) const
Test whether domain is a range.
void fix(RangeList *n)
Restore simple link to next element (so that it becomes a true free list)
RangeList * prev(const RangeList *n) const
Return previous element (from next n)
void reschedule(Gecode::Space &home, Gecode::Propagator &p, Gecode::PropCond pc, bool assigned)
Re-schedule propagator p.
void subscribe(Space &home, Propagator &p, PropCond pc, bool schedule=true)
Subscribe propagator p with propagation condition pc to variable.
RangeList * lst(void) const
Return last element of rangelist.
void max(Home home, SetVar s, IntVar x, Reify r)
int ModEvent
Type for modification events.
Base-class for propagators.
void min(Home home, SetVar s, IntVar x, Reify r)
Base-class for Int-variable implementations.
int med(void) const
Return median of domain (greatest element not greater than the median)
T * alloc(long unsigned int n)
Allocate block of n objects of type T from space heap.
Gecode::FloatVal c(-8, 8)
int p
Number of positive literals for node type.
bool assigned(void) const
Test whether variable is assigned.
int n
Number of negative literals for node type.
static void schedule(Gecode::Space &home, Gecode::Propagator &p, Gecode::ModEvent me)
Schedule propagator p.
Gecode::IntArgs i({1, 2, 3, 4})
static ModEvent me(const ModEventDelta &med)
Project modification event for this variable type from med.
int max(void) const
Return maximum.
int PropCond
Type for propagation conditions.
const Gecode::ModEvent ME_INT_VAL
Domain operation has resulted in a value (assigned variable)
RangeList * fst(void) const
Return first element of rangelist.
const Gecode::ModEvent ME_INT_BND
Domain operation has changed the minimum or maximum of the domain.
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...
unsigned int width(void) const
Return width (distance between maximum and minimum)
unsigned int holes
Size of holes in the domain.
void reschedule(Space &home, Propagator &p, PropCond pc)
Re-schedule propagator p.
Post propagator for SetVar SetOpType SetVar SetRelType r
Integer delta information for advisors.
Post propagator for f(x \diamond_{\mathit{op}} y) \sim_r z \f$ void rel(Home home
Integer variable implementation.
RangeList dom
Domain information.
Lists of ranges (intervals)
const Gecode::ModEvent ME_INT_DOM
Domain operation has changed the domain.
void prevnext(RangeList *p, RangeList *n)
Set previous element to p and next element to n.
ModEvent fail(Space &home)
Run advisors to be run on failure and returns ME_GEN_FAILED.
Post propagator for SetVar x
unsigned int size(void) const
Return size (cardinality) of domain.
Gecode toplevel namespace
VarImp * next(void) const
Return next copied variable.
const Gecode::ModEvent ME_INT_NONE
Domain operation has not changed domain.
struct Gecode::@593::NNF::@62::@64 a
For atomic nodes.
int max(void) const
Return maximum of domain.
void subscribe(Gecode::Space &home, Gecode::Propagator &p, Gecode::PropCond pc, bool assigned, bool schedule)
Subscribe propagator p with propagation condition pc.