43 IntSet::IntSetObject::allocate(
int n) {
44 IntSetObject* o =
new IntSetObject;
51 IntSet::IntSetObject::copy(
void)
const {
52 IntSetObject* o = allocate(n);
60 IntSet::IntSetObject::in(
int n)
const {
65 int m = l + (r - l) / 2;
66 if ((this->r[m].
min <= n) && (n <= this->r[
m].max)) {
70 }
else if (n < this->r[m].
min) {
79 IntSet::IntSetObject::~IntSetObject(
void) {
95 IntSet::normalize(Range* r,
int n) {
100 Support::quicksort<Range>(
r, n, lt_mi);
109 if (max+1 < r[i].min) {
110 r[j].min =
min; r[j].max =
max; j++;
111 min = r[
i].min; max = r[
i].max; i++;
116 r[j].min =
min; r[j].max =
max;
119 IntSetObject* o = IntSetObject::allocate(n);
121 for (
int i=n; i--; ) {
122 s +=
static_cast<unsigned int>(r[
i].max-r[
i].min+1);
131 IntSet::init(
const int r[],
int n) {
133 for (
int i=n; i--; ) {
134 dr[
i].min=r[
i]; dr[
i].max=r[
i];
141 IntSet::init(
const int r[][2],
int n) {
145 if (r[i][0] <= r[i][1]) {
146 dr[j].min=r[
i][0]; dr[j].max=r[
i][1]; j++;
153 IntSet::init(
int n,
int m) {
155 IntSetObject* o = IntSetObject::allocate(1);
156 o->r[0].min = n; o->r[0].max =
m;
157 o->size =
static_cast<unsigned int>(m - n + 1);