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) {
67 IntSet::IntSetObject::equal(
const IntSetObject& iso)
const {
68 assert((
size == iso.size) || (n == iso.n));
69 for (
int i=0;
i<n;
i++)
70 if ((
r[i].
min != iso.r[i].min) || (
r[i].max != iso.r[i].max))
75 IntSet::IntSetObject::~IntSetObject(
void) {
82 bool operator ()(
const Range &
x,
const Range &
y);
91 IntSet::normalize(Range*
r,
int n) {
106 r[j].min =
min;
r[j].max =
max; j++;
107 min =
r[i].min;
max =
r[i].max; i++;
115 IntSetObject* o = IntSetObject::allocate(n);
117 for (
int i=0;
i<n;
i++) {
118 s +=
static_cast<unsigned int>(
r[
i].max-
r[
i].min+1);
127 IntSet::init(
const int r[],
int n) {
130 Range* dr = reg.alloc<Range>(n);
131 for (
int i=0;
i<n;
i++) {
132 dr[
i].min=
r[
i]; dr[
i].max=
r[
i];
138 IntSet::init(
const int r[][2],
int n) {
141 Range* dr = reg.alloc<Range>(n);
143 for (
int i=0;
i<n;
i++)
144 if (
r[i][0] <=
r[i][1]) {
145 dr[j].min=
r[
i][0]; dr[j].max=
r[
i][1]; j++;
151 int n =
static_cast<int>(
r.size());
154 Range* dr = reg.
alloc<Range>(n);
157 dr[j].min=dr[j].max=k; j++;
163 int n =
static_cast<int>(
r.size());
166 Range* dr = reg.
alloc<Range>(n);
168 for (
const std::pair<int,int>& k :
r)
169 if (k.first <= k.second) {
170 dr[j].min=k.first; dr[j].max=k.second; j++;
177 IntSet::init(
int n,
int m) {
179 IntSetObject* o = IntSetObject::allocate(1);
180 o->r[0].min = n; o->r[0].max = m;
181 o->size =
static_cast<unsigned int>(m - n + 1);
void free(T *b, long unsigned int n)
Delete n objects starting at b.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from heap.
Sort ranges according to increasing minimum.
bool operator()(const Range &x, const Range &y)
int min(int i) const
Return minimum of range at position i.
int max(int i) const
Return maximum of range at position i.
int max(void) const
Return maximum of entire set.
unsigned int size(void) const
Return size (cardinality) of set.
IntSet(void)
Initialize as empty set.
static const IntSet empty
Empty set.
T * alloc(long unsigned int n)
Allocate block of n objects of type T from region.
SharedHandle::Object * object(void) const
Access to the shared object.
Heap heap
The single global heap.
void quicksort(Type *l, Type *r, Less &less)
Standard quick sort.
Gecode toplevel namespace
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 max(Home home, FloatVar x0, FloatVar x1, FloatVar x2)
Post propagator for .
Post propagator for SetVar x
Gecode::IntArgs i({1, 2, 3, 4})