home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / util / BitSet.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  3.1 KB  |  291 lines

  1. package java.util;
  2.  
  3. import java.io.IOException;
  4. import java.io.ObjectInputStream;
  5. import java.io.Serializable;
  6.  
  7. public class BitSet implements Cloneable, Serializable {
  8.    private static final int ADDRESS_BITS_PER_UNIT = 6;
  9.    private static final int BITS_PER_UNIT = 64;
  10.    private static final int BIT_INDEX_MASK = 63;
  11.    private long[] bits;
  12.    private transient int unitsInUse;
  13.    private static final long serialVersionUID = 7997698588986878753L;
  14.  
  15.    private static int unitIndex(int var0) {
  16.       return var0 >> 6;
  17.    }
  18.  
  19.    private static long bit(int var0) {
  20.       return 1L << (var0 & 63);
  21.    }
  22.  
  23.    private void recalculateUnitsInUse() {
  24.       int var1;
  25.       for(var1 = this.unitsInUse - 1; var1 >= 0 && this.bits[var1] == 0L; --var1) {
  26.       }
  27.  
  28.       this.unitsInUse = var1 + 1;
  29.    }
  30.  
  31.    public BitSet() {
  32.       this(64);
  33.    }
  34.  
  35.    public BitSet(int var1) {
  36.       this.unitsInUse = 0;
  37.       if (var1 < 0) {
  38.          throw new NegativeArraySizeException(Integer.toString(var1));
  39.       } else {
  40.          this.bits = new long[unitIndex(var1 - 1) + 1];
  41.       }
  42.    }
  43.  
  44.    private void ensureCapacity(int var1) {
  45.       if (this.bits.length < var1) {
  46.          int var2 = Math.max(2 * this.bits.length, var1);
  47.          long[] var3 = new long[var2];
  48.          System.arraycopy(this.bits, 0, var3, 0, this.unitsInUse);
  49.          this.bits = var3;
  50.       }
  51.  
  52.    }
  53.  
  54.    public int length() {
  55.       if (this.unitsInUse == 0) {
  56.          return 0;
  57.       } else {
  58.          int var1 = (this.unitsInUse - 1) * 64;
  59.          long var2 = this.bits[this.unitsInUse - 1];
  60.  
  61.          do {
  62.             var2 >>>= 1;
  63.             ++var1;
  64.          } while(var2 > 0L);
  65.  
  66.          return var1;
  67.       }
  68.    }
  69.  
  70.    public void set(int var1) {
  71.       if (var1 < 0) {
  72.          throw new IndexOutOfBoundsException(Integer.toString(var1));
  73.       } else {
  74.          int var2 = unitIndex(var1);
  75.          int var3 = var2 + 1;
  76.          if (this.unitsInUse < var3) {
  77.             this.ensureCapacity(var3);
  78.             long[] var10000 = this.bits;
  79.             var10000[var2] |= bit(var1);
  80.             this.unitsInUse = var3;
  81.          } else {
  82.             long[] var4 = this.bits;
  83.             var4[var2] |= bit(var1);
  84.          }
  85.  
  86.       }
  87.    }
  88.  
  89.    public void clear(int var1) {
  90.       if (var1 < 0) {
  91.          throw new IndexOutOfBoundsException(Integer.toString(var1));
  92.       } else {
  93.          int var2 = unitIndex(var1);
  94.          if (var2 < this.unitsInUse) {
  95.             long[] var10000 = this.bits;
  96.             var10000[var2] &= ~bit(var1);
  97.             if (this.bits[this.unitsInUse - 1] == 0L) {
  98.                this.recalculateUnitsInUse();
  99.             }
  100.  
  101.          }
  102.       }
  103.    }
  104.  
  105.    public void andNot(BitSet var1) {
  106.       int var2 = Math.min(this.unitsInUse, var1.unitsInUse);
  107.  
  108.       for(int var3 = 0; var3 < var2; ++var3) {
  109.          long[] var10000 = this.bits;
  110.          var10000[var3] &= ~var1.bits[var3];
  111.       }
  112.  
  113.       this.recalculateUnitsInUse();
  114.    }
  115.  
  116.    public boolean get(int var1) {
  117.       if (var1 < 0) {
  118.          throw new IndexOutOfBoundsException(Integer.toString(var1));
  119.       } else {
  120.          boolean var2 = false;
  121.          int var3 = unitIndex(var1);
  122.          if (var3 < this.unitsInUse) {
  123.             var2 = (this.bits[var3] & bit(var1)) != 0L;
  124.          }
  125.  
  126.          return var2;
  127.       }
  128.    }
  129.  
  130.    public void and(BitSet var1) {
  131.       if (this != var1) {
  132.          int var2 = this.unitsInUse;
  133.          this.unitsInUse = Math.min(this.unitsInUse, var1.unitsInUse);
  134.  
  135.          int var3;
  136.          for(var3 = 0; var3 < this.unitsInUse; ++var3) {
  137.             long[] var10000 = this.bits;
  138.             var10000[var3] &= var1.bits[var3];
  139.          }
  140.  
  141.          while(var3 < var2) {
  142.             this.bits[var3] = 0L;
  143.             ++var3;
  144.          }
  145.  
  146.          if (this.unitsInUse > 0 && this.bits[this.unitsInUse - 1] == 0L) {
  147.             this.recalculateUnitsInUse();
  148.          }
  149.  
  150.       }
  151.    }
  152.  
  153.    // $FF: renamed from: or (java.util.BitSet) void
  154.    public void method_0(BitSet var1) {
  155.       if (this != var1) {
  156.          this.ensureCapacity(var1.unitsInUse);
  157.          int var2 = Math.min(this.unitsInUse, var1.unitsInUse);
  158.  
  159.          int var3;
  160.          for(var3 = 0; var3 < var2; ++var3) {
  161.             long[] var10000 = this.bits;
  162.             var10000[var3] |= var1.bits[var3];
  163.          }
  164.  
  165.          while(var3 < var1.unitsInUse) {
  166.             this.bits[var3] = var1.bits[var3];
  167.             ++var3;
  168.          }
  169.  
  170.          if (this.unitsInUse < var1.unitsInUse) {
  171.             this.unitsInUse = var1.unitsInUse;
  172.          }
  173.  
  174.       }
  175.    }
  176.  
  177.    public void xor(BitSet var1) {
  178.       int var2;
  179.       if (this.unitsInUse >= var1.unitsInUse) {
  180.          var2 = var1.unitsInUse;
  181.       } else {
  182.          var2 = this.unitsInUse;
  183.          int var3 = var1.unitsInUse;
  184.          this.ensureCapacity(var3);
  185.          this.unitsInUse = var3;
  186.       }
  187.  
  188.       int var4;
  189.       for(var4 = 0; var4 < var2; ++var4) {
  190.          long[] var10000 = this.bits;
  191.          var10000[var4] ^= var1.bits[var4];
  192.       }
  193.  
  194.       while(var4 < var1.unitsInUse) {
  195.          this.bits[var4] = var1.bits[var4];
  196.          ++var4;
  197.       }
  198.  
  199.       this.recalculateUnitsInUse();
  200.    }
  201.  
  202.    public int hashCode() {
  203.       long var1 = 1234L;
  204.       int var3 = this.bits.length;
  205.  
  206.       while(true) {
  207.          --var3;
  208.          if (var3 < 0) {
  209.             return (int)(var1 >> 32 ^ var1);
  210.          }
  211.  
  212.          var1 ^= this.bits[var3] * (long)(var3 + 1);
  213.       }
  214.    }
  215.  
  216.    public int size() {
  217.       return this.bits.length << 6;
  218.    }
  219.  
  220.    public boolean equals(Object var1) {
  221.       if (!(var1 instanceof BitSet)) {
  222.          return false;
  223.       } else if (this == var1) {
  224.          return true;
  225.       } else {
  226.          BitSet var2 = (BitSet)var1;
  227.          int var3 = Math.min(this.unitsInUse, var2.unitsInUse);
  228.  
  229.          for(int var4 = 0; var4 < var3; ++var4) {
  230.             if (this.bits[var4] != var2.bits[var4]) {
  231.                return false;
  232.             }
  233.          }
  234.  
  235.          if (this.unitsInUse > var3) {
  236.             for(int var5 = var3; var5 < this.unitsInUse; ++var5) {
  237.                if (this.bits[var5] != 0L) {
  238.                   return false;
  239.                }
  240.             }
  241.          } else {
  242.             for(int var6 = var3; var6 < var2.unitsInUse; ++var6) {
  243.                if (var2.bits[var6] != 0L) {
  244.                   return false;
  245.                }
  246.             }
  247.          }
  248.  
  249.          return true;
  250.       }
  251.    }
  252.  
  253.    public Object clone() {
  254.       BitSet var1 = null;
  255.  
  256.       try {
  257.          var1 = (BitSet)super.clone();
  258.       } catch (CloneNotSupportedException var3) {
  259.          throw new InternalError();
  260.       }
  261.  
  262.       var1.bits = new long[this.bits.length];
  263.       System.arraycopy(this.bits, 0, var1.bits, 0, this.unitsInUse);
  264.       return var1;
  265.    }
  266.  
  267.    private void readObject(ObjectInputStream var1) throws IOException, ClassNotFoundException {
  268.       var1.defaultReadObject();
  269.       this.unitsInUse = this.bits.length;
  270.       this.recalculateUnitsInUse();
  271.    }
  272.  
  273.    public String toString() {
  274.       int var1 = this.unitsInUse << 6;
  275.       StringBuffer var2 = new StringBuffer(8 * var1 + 2);
  276.       String var3 = "";
  277.       var2.append('{');
  278.  
  279.       for(int var4 = 0; var4 < var1; ++var4) {
  280.          if (this.get(var4)) {
  281.             var2.append(var3);
  282.             var3 = ", ";
  283.             var2.append(var4);
  284.          }
  285.       }
  286.  
  287.       var2.append('}');
  288.       return var2.toString();
  289.    }
  290. }
  291.