43 IntSet::IntSetObject::allocate(
int n) {
44 IntSetObject* o =
new IntSetObject;
51 IntSet::IntSetObject::in(
int n)
const {
56 int m = l + (r -
l) / 2;
57 if ((this->r[m].
min <= n) && (n <= this->r[m].max)) {
61 }
else if (n < this->r[m].
min) {
70 IntSet::IntSetObject::~IntSetObject(
void) {
86 IntSet::normalize(Range* r,
int n) {
91 Support::quicksort<Range>(
r,
n, lt_mi);
100 if (max+1 < r[i].min) {
101 r[j].min =
min; r[j].max =
max; j++;
102 min = r[
i].min; max = r[
i].max; i++;
107 r[j].min =
min; r[j].max =
max;
110 IntSetObject* o = IntSetObject::allocate(n);
112 for (
int i=n;
i--; ) {
113 s +=
static_cast<unsigned int>(r[
i].max-r[
i].min+1);
122 IntSet::init(
const int r[],
int n) {
124 for (
int i=n;
i--; ) {
125 dr[
i].min=r[
i]; dr[
i].max=r[
i];
132 IntSet::init(
const int r[][2],
int n) {
136 if (r[
i][0] <= r[
i][1]) {
137 dr[j].min=r[
i][0]; dr[j].max=r[
i][1]; j++;
144 IntSet::init(
int n,
int m) {
146 IntSetObject* o = IntSetObject::allocate(1);
147 o->r[0].min =
n; o->r[0].max = m;
148 o->size =
static_cast<unsigned int>(m - n + 1);
int max(void) const
Return maximum of entire set.
const FloatNum max
Largest allowed float value.
bool operator()(const Range &x, const Range &y)
T * alloc(long unsigned int n)
Allocate block of n objects of type T from heap.
Gecode::IntArgs i(4, 1, 2, 3, 4)
int n
Number of negative literals for node type.
SharedHandle::Object * object(void) const
Access to the shared object.
static const IntSet empty
Empty set.
Post propagator for SetVar SetOpType SetVar SetRelType r
void min(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Post propagator for SetVar SetOpType SetVar y
void free(T *b, long unsigned int n)
Delete n objects starting at b.
int min(void) const
Return minimum of entire set.
Heap heap
The single global heap.
Sort ranges according to increasing minimum.
Post propagator for SetVar x
Gecode toplevel namespace