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);