home *** CD-ROM | disk | FTP | other *** search
- package java.util;
-
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.Serializable;
-
- public class BitSet implements Cloneable, Serializable {
- private static final int ADDRESS_BITS_PER_UNIT = 6;
- private static final int BITS_PER_UNIT = 64;
- private static final int BIT_INDEX_MASK = 63;
- private long[] bits;
- private transient int unitsInUse;
- private static final long serialVersionUID = 7997698588986878753L;
-
- private static int unitIndex(int var0) {
- return var0 >> 6;
- }
-
- private static long bit(int var0) {
- return 1L << (var0 & 63);
- }
-
- private void recalculateUnitsInUse() {
- int var1;
- for(var1 = this.unitsInUse - 1; var1 >= 0 && this.bits[var1] == 0L; --var1) {
- }
-
- this.unitsInUse = var1 + 1;
- }
-
- public BitSet() {
- this(64);
- }
-
- public BitSet(int var1) {
- this.unitsInUse = 0;
- if (var1 < 0) {
- throw new NegativeArraySizeException(Integer.toString(var1));
- } else {
- this.bits = new long[unitIndex(var1 - 1) + 1];
- }
- }
-
- private void ensureCapacity(int var1) {
- if (this.bits.length < var1) {
- int var2 = Math.max(2 * this.bits.length, var1);
- long[] var3 = new long[var2];
- System.arraycopy(this.bits, 0, var3, 0, this.unitsInUse);
- this.bits = var3;
- }
-
- }
-
- public int length() {
- if (this.unitsInUse == 0) {
- return 0;
- } else {
- int var1 = (this.unitsInUse - 1) * 64;
- long var2 = this.bits[this.unitsInUse - 1];
-
- do {
- var2 >>>= 1;
- ++var1;
- } while(var2 > 0L);
-
- return var1;
- }
- }
-
- public void set(int var1) {
- if (var1 < 0) {
- throw new IndexOutOfBoundsException(Integer.toString(var1));
- } else {
- int var2 = unitIndex(var1);
- int var3 = var2 + 1;
- if (this.unitsInUse < var3) {
- this.ensureCapacity(var3);
- long[] var10000 = this.bits;
- var10000[var2] |= bit(var1);
- this.unitsInUse = var3;
- } else {
- long[] var4 = this.bits;
- var4[var2] |= bit(var1);
- }
-
- }
- }
-
- public void clear(int var1) {
- if (var1 < 0) {
- throw new IndexOutOfBoundsException(Integer.toString(var1));
- } else {
- int var2 = unitIndex(var1);
- if (var2 < this.unitsInUse) {
- long[] var10000 = this.bits;
- var10000[var2] &= ~bit(var1);
- if (this.bits[this.unitsInUse - 1] == 0L) {
- this.recalculateUnitsInUse();
- }
-
- }
- }
- }
-
- public void andNot(BitSet var1) {
- int var2 = Math.min(this.unitsInUse, var1.unitsInUse);
-
- for(int var3 = 0; var3 < var2; ++var3) {
- long[] var10000 = this.bits;
- var10000[var3] &= ~var1.bits[var3];
- }
-
- this.recalculateUnitsInUse();
- }
-
- public boolean get(int var1) {
- if (var1 < 0) {
- throw new IndexOutOfBoundsException(Integer.toString(var1));
- } else {
- boolean var2 = false;
- int var3 = unitIndex(var1);
- if (var3 < this.unitsInUse) {
- var2 = (this.bits[var3] & bit(var1)) != 0L;
- }
-
- return var2;
- }
- }
-
- public void and(BitSet var1) {
- if (this != var1) {
- int var2 = this.unitsInUse;
- this.unitsInUse = Math.min(this.unitsInUse, var1.unitsInUse);
-
- int var3;
- for(var3 = 0; var3 < this.unitsInUse; ++var3) {
- long[] var10000 = this.bits;
- var10000[var3] &= var1.bits[var3];
- }
-
- while(var3 < var2) {
- this.bits[var3] = 0L;
- ++var3;
- }
-
- if (this.unitsInUse > 0 && this.bits[this.unitsInUse - 1] == 0L) {
- this.recalculateUnitsInUse();
- }
-
- }
- }
-
- // $FF: renamed from: or (java.util.BitSet) void
- public void method_0(BitSet var1) {
- if (this != var1) {
- this.ensureCapacity(var1.unitsInUse);
- int var2 = Math.min(this.unitsInUse, var1.unitsInUse);
-
- int var3;
- for(var3 = 0; var3 < var2; ++var3) {
- long[] var10000 = this.bits;
- var10000[var3] |= var1.bits[var3];
- }
-
- while(var3 < var1.unitsInUse) {
- this.bits[var3] = var1.bits[var3];
- ++var3;
- }
-
- if (this.unitsInUse < var1.unitsInUse) {
- this.unitsInUse = var1.unitsInUse;
- }
-
- }
- }
-
- public void xor(BitSet var1) {
- int var2;
- if (this.unitsInUse >= var1.unitsInUse) {
- var2 = var1.unitsInUse;
- } else {
- var2 = this.unitsInUse;
- int var3 = var1.unitsInUse;
- this.ensureCapacity(var3);
- this.unitsInUse = var3;
- }
-
- int var4;
- for(var4 = 0; var4 < var2; ++var4) {
- long[] var10000 = this.bits;
- var10000[var4] ^= var1.bits[var4];
- }
-
- while(var4 < var1.unitsInUse) {
- this.bits[var4] = var1.bits[var4];
- ++var4;
- }
-
- this.recalculateUnitsInUse();
- }
-
- public int hashCode() {
- long var1 = 1234L;
- int var3 = this.bits.length;
-
- while(true) {
- --var3;
- if (var3 < 0) {
- return (int)(var1 >> 32 ^ var1);
- }
-
- var1 ^= this.bits[var3] * (long)(var3 + 1);
- }
- }
-
- public int size() {
- return this.bits.length << 6;
- }
-
- public boolean equals(Object var1) {
- if (!(var1 instanceof BitSet)) {
- return false;
- } else if (this == var1) {
- return true;
- } else {
- BitSet var2 = (BitSet)var1;
- int var3 = Math.min(this.unitsInUse, var2.unitsInUse);
-
- for(int var4 = 0; var4 < var3; ++var4) {
- if (this.bits[var4] != var2.bits[var4]) {
- return false;
- }
- }
-
- if (this.unitsInUse > var3) {
- for(int var5 = var3; var5 < this.unitsInUse; ++var5) {
- if (this.bits[var5] != 0L) {
- return false;
- }
- }
- } else {
- for(int var6 = var3; var6 < var2.unitsInUse; ++var6) {
- if (var2.bits[var6] != 0L) {
- return false;
- }
- }
- }
-
- return true;
- }
- }
-
- public Object clone() {
- BitSet var1 = null;
-
- try {
- var1 = (BitSet)super.clone();
- } catch (CloneNotSupportedException var3) {
- throw new InternalError();
- }
-
- var1.bits = new long[this.bits.length];
- System.arraycopy(this.bits, 0, var1.bits, 0, this.unitsInUse);
- return var1;
- }
-
- private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
- var1.defaultReadObject();
- this.unitsInUse = this.bits.length;
- this.recalculateUnitsInUse();
- }
-
- public String toString() {
- int var1 = this.unitsInUse << 6;
- StringBuffer var2 = new StringBuffer(8 * var1 + 2);
- String var3 = "";
- var2.append('{');
-
- for(int var4 = 0; var4 < var1; ++var4) {
- if (this.get(var4)) {
- var2.append(var3);
- var3 = ", ";
- var2.append(var4);
- }
- }
-
- var2.append('}');
- return var2.toString();
- }
- }
-