Clazz.load (null, "java.util.BitSet", ["java.lang.IndexOutOfBoundsException", "$.NegativeArraySizeException", "$.StringBuffer", "java.util.Arrays"], function () {
c$ = Clazz.decorateAsClass (function () {
this.bits = null;
Clazz.instantialize (this, arguments);
}, java.util, "BitSet", null, [Cloneable, java.io.Serializable]);
Clazz.makeConstructor (c$, 
function () {
this.construct (32);
});
Clazz.makeConstructor (c$, 
function (nbits) {
if (nbits < 0) throw  new NegativeArraySizeException ();
var length = nbits >>> 5;
if ((nbits & 4) != 0) ++length;
this.bits =  Clazz.newArray (length, 0);
}, "~N");
Clazz.defineMethod (c$, "and", 
function (bs) {
var max = Math.min (this.bits.length, bs.bits.length);
var i;
for (i = 0; i < max; ++i) this.bits[i] &= bs.bits[i];

while (i < this.bits.length) this.bits[i++] = 0;

}, "java.util.BitSet");
Clazz.defineMethod (c$, "andNot", 
function (bs) {
var i = Math.min (this.bits.length, bs.bits.length);
while (--i >= 0) {
this.bits[i] &= ~bs.bits[i];
}
}, "java.util.BitSet");
Clazz.defineMethod (c$, "cardinality", 
function () {
var card = 0;
for (var i = this.bits.length - 1; i >= 0; i--) {
var a = this.bits[i];
if (a == 0) continue ;if (a == -1) {
card += 32;
continue ;}a = ((a >> 1) & 0x55555555) + (a & 0x55555555);
a = ((a >> 2) & 0x33333333) + (a & 0x33333333);
a = ((a >> 4) & 0x0f0f0f0f) + (a & 0x0f0f0f0f);
a = ((a >> 8) & 0x00ff00ff) + (a & 0x00ff00ff);
card += ((a >> 16) & 0x0000ffff) + (a & 0x0000ffff);
}
return card;
});
Clazz.defineMethod (c$, "clear", 
function () {
java.util.Arrays.fill (this.bits, 0);
});
Clazz.defineMethod (c$, "clear", 
function (pos) {
var offset = pos >> 5;
this.ensure (offset);
this.bits[offset] &= ~(1 << pos);
}, "~N");
Clazz.defineMethod (c$, "clear", 
function (from, to) {
if (from < 0 || from > to) throw  new IndexOutOfBoundsException ();
if (from == to) return ;
var lo_offset = from >>> 5;
var hi_offset = to >>> 5;
this.ensure (hi_offset);
if (lo_offset == hi_offset) {
this.bits[hi_offset] &= ((1 << from) - 1) | (-1 << to);
return ;
}this.bits[lo_offset] &= (1 << from) - 1;
this.bits[hi_offset] &= -1 << to;
for (var i = lo_offset + 1; i < hi_offset; i++) this.bits[i] = 0;

}, "~N,~N");
Clazz.defineMethod (c$, "clone", 
function () {
try {
var bs = Clazz.superCall (this, java.util.BitSet, "clone", []);
bs.bits = this.bits.clone ();
return bs;
} catch (e) {
if (Clazz.exceptionOf (e, CloneNotSupportedException)) {
return null;
} else {
throw e;
}
}
});
Clazz.overrideMethod(c$, "equals", 
function (obj) {
if (!(Clazz.instanceOf (obj, java.util.BitSet))) return false;
var bs = obj;
var max = Math.min (this.bits.length, bs.bits.length);
var i;
for (i = 0; i < max; ++i) if (this.bits[i] != bs.bits[i]) return false;

for (var j = i; j < this.bits.length; ++j) if (this.bits[j] != 0) return false;

for (var j = i; j < bs.bits.length; ++j) if (bs.bits[j] != 0) return false;

return true;
}, "~O");
Clazz.defineMethod (c$, "flip", 
function (index) {
var offset = index >> 5;
this.ensure (offset);
this.bits[offset] ^= 1 << index;
}, "~N");
Clazz.defineMethod (c$, "flip", 
function (from, to) {
if (from < 0 || from > to) throw  new IndexOutOfBoundsException ();
if (from == to) return ;
var lo_offset = from >>> 5;
var hi_offset = to >>> 5;
this.ensure (hi_offset);
if (lo_offset == hi_offset) {
this.bits[hi_offset] ^= (-1 << from) & ((1 << to) - 1);
return ;
}this.bits[lo_offset] ^= -1 << from;
this.bits[hi_offset] ^= (1 << to) - 1;
for (var i = lo_offset + 1; i < hi_offset; i++) this.bits[i] ^= -1;

}, "~N,~N");
Clazz.defineMethod (c$, "get", 
function (pos) {
var offset = pos >> 5;
if (offset >= this.bits.length) return false;
return (this.bits[offset] & (1 << pos)) != 0;
}, "~N");
Clazz.defineMethod (c$, "get", 
function (from, to) {
if (from < 0 || from > to) throw  new IndexOutOfBoundsException ();
var bs =  new java.util.BitSet (to - from);
var lo_offset = from >>> 5;
if (lo_offset >= this.bits.length) return bs;
var lo_bit = from & 4;
var hi_offset = to >>> 5;
if (lo_bit == 0) {
var len = Math.min (hi_offset - lo_offset + 1, this.bits.length - lo_offset);
System.arraycopy (this.bits, lo_offset, bs.bits, 0, len);
if (hi_offset < this.bits.length) bs.bits[hi_offset - lo_offset] &= (1 << to) - 1;
return bs;
}var len = Math.min (hi_offset, this.bits.length - 1);
var reverse = ~lo_bit;
var i;
for (i = 0; lo_offset < len; lo_offset++, i++) bs.bits[i] = ((this.bits[lo_offset] >>> lo_bit) | (this.bits[lo_offset + 1] << reverse));

if ((to & 4) > lo_bit) bs.bits[i++] = this.bits[lo_offset] >>> lo_bit;
if (hi_offset < this.bits.length) bs.bits[i - 1] &= (1 << (to - from)) - 1;
return bs;
}, "~N,~N");
Clazz.overrideMethod(c$, "hashCode", 
function () {
var h = 1234;
for (var i = this.bits.length; i > 0; ) h ^= i * this.bits[--i];

return h;
});
Clazz.defineMethod (c$, "intersects", 
function (set) {
var i = Math.min (this.bits.length, set.bits.length);
while (--i >= 0) if ((this.bits[i] & set.bits[i]) != 0) return true;

return false;
}, "java.util.BitSet");
Clazz.defineMethod (c$, "isEmpty", 
function () {
for (var i = this.bits.length - 1; i >= 0; i--) if (this.bits[i] != 0) return false;

return true;
});
Clazz.defineMethod (c$, "length", 
function () {
var i;
for (i = this.bits.length - 1; i >= 0 && this.bits[i] == 0; --i) ;
if (i < 0) return 0;
var b = this.bits[i];
var len = (i + 1) * 32;
while ((b & 0x80000000) == 0) {
--len;
b <<= 1;
}
return len;
});
Clazz.defineMethod (c$, "nextClearBit", 
function (from) {
var offset = from >> 5;
var mask = 1 << from;
while (offset < this.bits.length) {
var h = this.bits[offset];
do {
if ((h & mask) == 0) return from;
mask <<= 1;
from++;
} while (mask != 0);
mask = 1;
offset++;
}
return from;
}, "~N");
Clazz.defineMethod (c$, "nextSetBit", 
function (from) {
var offset = from >> 5;
var mask = 1 << from;
while (offset < this.bits.length) {
var h = this.bits[offset];
do {
if ((h & mask) != 0) return from;
mask <<= 1;
from++;
} while (mask != 0);
mask = 1;
offset++;
}
return -1;
}, "~N");
Clazz.defineMethod (c$, "or", 
function (bs) {
this.ensure (bs.bits.length - 1);
for (var i = bs.bits.length - 1; i >= 0; i--) this.bits[i] |= bs.bits[i];

}, "java.util.BitSet");
Clazz.defineMethod (c$, "set", 
function (pos) {
var offset = pos >> 5;
this.ensure (offset);
this.bits[offset] |= 1 << pos;
}, "~N");
Clazz.defineMethod (c$, "set", 
function (index, value) {
if (value) this.set (index);
 else this.clear (index);
}, "~N,~B");
Clazz.defineMethod (c$, "set", 
function (from, to) {
if (from < 0 || from > to) throw  new IndexOutOfBoundsException ();
if (from == to) return ;
var lo_offset = from >>> 5;
var hi_offset = to >>> 5;
this.ensure (hi_offset);
if (lo_offset == hi_offset) {
this.bits[hi_offset] |= (-1 << from) & ((1 << to) - 1);
return ;
}this.bits[lo_offset] |= -1 << from;
this.bits[hi_offset] |= (1 << to) - 1;
for (var i = lo_offset + 1; i < hi_offset; i++) this.bits[i] = -1;

}, "~N,~N");
Clazz.defineMethod (c$, "set", 
function (from, to, value) {
if (value) this.set (from, to);
 else this.clear (from, to);
}, "~N,~N,~B");
Clazz.defineMethod (c$, "size", 
function () {
return this.bits.length * 32;
});
Clazz.overrideMethod(c$, "toString", 
function () {
var r =  new StringBuffer ("{");
var first = true;
for (var i = 0; i < this.bits.length; ++i) {
var bit = 1;
var word = this.bits[i];
if (word == 0) continue ;for (var j = 0; j < 32; ++j) {
if ((word & bit) != 0) {
if (!first) r.append (", ");
r.append (32 * i + j);
first = false;
}bit <<= 1;
}
}
return r.append ("}").toString ();
});
Clazz.defineMethod (c$, "xor", 
function (bs) {
this.ensure (bs.bits.length - 1);
for (var i = bs.bits.length - 1; i >= 0; i--) this.bits[i] ^= bs.bits[i];

}, "java.util.BitSet");
Clazz.defineMethod (c$, "ensure", 
 function (lastElt) {
if (lastElt >= this.bits.length) {
var nd =  Clazz.newArray (lastElt + 1, 0);
System.arraycopy (this.bits, 0, nd, 0, this.bits.length);
this.bits = nd;
}}, "~N");
Clazz.defineStatics (c$,
"INT_MASK", 0x4);
});
