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) {
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) {
91 IntSet::normalize(Range*
r,
int n) {
96 Support::quicksort<Range>(
r,
n, lt_mi);
106 r[j].min =
min;
r[j].max =
max; j++;
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);
int n
Number of negative literals for node type.
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(void) const
Return minimum of entire set.
int max(void) const
Return maximum of entire 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.
const FloatNum max
Largest allowed float value.
unsigned int size(I &i)
Size of all ranges of range iterator i.
bool equal(I &i, J &j)
Check whether range iterators i and j are equal.
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
Post propagator for SetVar x
Gecode::IntArgs i({1, 2, 3, 4})