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;
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);
int n
Number of negative literals for node type.
Node * x
Pointer to corresponding Boolean expression node.
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.
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
Post propagator for SetVar SetOpType SetVar y
Post propagator for SetVar x
Gecode::IntArgs i({1, 2, 3, 4})