39 IntSet::IntSetObject::allocate(
int n) {
40 IntSetObject* o =
new IntSetObject;
47 IntSet::IntSetObject::in(
int n)
const {
52 int m = l + (r -
l) / 2;
53 if ((this->r[m].
min <= n) && (n <= this->r[m].max)) {
57 }
else if (n < this->r[m].
min) {
66 IntSet::IntSetObject::~IntSetObject(
void) {
82 IntSet::normalize(Range* r,
int n) {
87 Support::quicksort<Range>(
r,
n, lt_mi);
96 if (max+1 < r[i].min) {
97 r[j].min =
min; r[j].max =
max; j++;
98 min = r[
i].min; max = r[
i].max; i++;
103 r[j].min =
min; r[j].max =
max;
106 IntSetObject* o = IntSetObject::allocate(n);
108 for (
int i=n;
i--; ) {
109 s +=
static_cast<unsigned int>(r[
i].max-r[
i].min+1);
118 IntSet::init(
const int r[],
int n) {
120 for (
int i=n;
i--; ) {
121 dr[
i].min=r[
i]; dr[
i].max=r[
i];
128 IntSet::init(
const int r[][2],
int n) {
132 if (r[
i][0] <= r[
i][1]) {
133 dr[j].min=r[
i][0]; dr[j].max=r[
i][1]; j++;
140 IntSet::init(
int n,
int m) {
142 IntSetObject* o = IntSetObject::allocate(1);
143 o->r[0].min =
n; o->r[0].max = m;
144 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