home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &… the Search for Life CD 3 / 0_CD-ROM.iso / install / jre1_3 / lib / rt.jar / java / text / IntHashtable.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  2.7 KB  |  226 lines

  1. package java.text;
  2.  
  3. final class IntHashtable {
  4.    private int defaultValue = 0;
  5.    private int primeIndex;
  6.    private static final float highWaterFactor = 0.4F;
  7.    private int highWaterMark;
  8.    private static final float lowWaterFactor = 0.0F;
  9.    private int lowWaterMark;
  10.    private int count;
  11.    private int[] values;
  12.    private int[] keyList;
  13.    private static final int EMPTY = Integer.MIN_VALUE;
  14.    private static final int DELETED = -2147483647;
  15.    private static final int MAX_UNUSED = -2147483647;
  16.    private static final int[] PRIMES = new int[]{17, 37, 67, 131, 257, 521, 1031, 2053, 4099, 8209, 16411, 32771, 65537, 131101, 262147, 524309, 1048583, 2097169, 4194319, 8388617, 16777259, 33554467, 67108879, 134217757, 268435459, 536870923, 1073741827, Integer.MAX_VALUE};
  17.  
  18.    public IntHashtable() {
  19.       this.initialize(3);
  20.    }
  21.  
  22.    public IntHashtable(int var1) {
  23.       this.initialize(leastGreaterPrimeIndex((int)((float)var1 / 0.4F)));
  24.    }
  25.  
  26.    public int size() {
  27.       return this.count;
  28.    }
  29.  
  30.    public boolean isEmpty() {
  31.       return this.count == 0;
  32.    }
  33.  
  34.    public void put(int var1, int var2) {
  35.       if (this.count > this.highWaterMark) {
  36.          this.rehash();
  37.       }
  38.  
  39.       int var3 = this.find(var1);
  40.       if (this.keyList[var3] <= -2147483647) {
  41.          this.keyList[var3] = var1;
  42.          ++this.count;
  43.       }
  44.  
  45.       this.values[var3] = var2;
  46.    }
  47.  
  48.    public int get(int var1) {
  49.       return this.values[this.find(var1)];
  50.    }
  51.  
  52.    public void remove(int var1) {
  53.       int var2 = this.find(var1);
  54.       if (this.keyList[var2] > -2147483647) {
  55.          this.keyList[var2] = -2147483647;
  56.          this.values[var2] = this.defaultValue;
  57.          --this.count;
  58.          if (this.count < this.lowWaterMark) {
  59.             this.rehash();
  60.          }
  61.       }
  62.  
  63.    }
  64.  
  65.    public int getDefaultValue() {
  66.       return this.defaultValue;
  67.    }
  68.  
  69.    public void setDefaultValue(int var1) {
  70.       this.defaultValue = var1;
  71.       this.rehash();
  72.    }
  73.  
  74.    public boolean equals(Object var1) {
  75.       if (var1.getClass() != this.getClass()) {
  76.          return false;
  77.       } else {
  78.          IntHashtable var2 = (IntHashtable)var1;
  79.          if (var2.size() == this.count && var2.defaultValue == this.defaultValue) {
  80.             for(int var3 = 0; var3 < this.keyList.length; ++var3) {
  81.                int var4 = this.keyList[var3];
  82.                if (var4 > -2147483647 && var2.get(var4) != this.values[var3]) {
  83.                   return false;
  84.                }
  85.             }
  86.  
  87.             return true;
  88.          } else {
  89.             return false;
  90.          }
  91.       }
  92.    }
  93.  
  94.    public int hashCode() {
  95.       int var1 = 465;
  96.       int var2 = 1362796821;
  97.  
  98.       for(int var3 = 0; var3 < this.keyList.length; ++var3) {
  99.          var1 = var1 * var2 + 1;
  100.          var1 += this.keyList[var3];
  101.       }
  102.  
  103.       for(int var4 = 0; var4 < this.values.length; ++var4) {
  104.          var1 = var1 * var2 + 1;
  105.          var1 += this.values[var4];
  106.       }
  107.  
  108.       return var1;
  109.    }
  110.  
  111.    public Object clone() throws CloneNotSupportedException {
  112.       IntHashtable var1 = (IntHashtable)super.clone();
  113.       this.values = (int[])this.values.clone();
  114.       this.keyList = (int[])this.keyList.clone();
  115.       return var1;
  116.    }
  117.  
  118.    private void initialize(int var1) {
  119.       if (var1 < 0) {
  120.          var1 = 0;
  121.       } else if (var1 >= PRIMES.length) {
  122.          System.out.println("TOO BIG");
  123.          var1 = PRIMES.length - 1;
  124.       }
  125.  
  126.       this.primeIndex = var1;
  127.       int var2 = PRIMES[var1];
  128.       this.values = new int[var2];
  129.       this.keyList = new int[var2];
  130.  
  131.       for(int var3 = 0; var3 < var2; ++var3) {
  132.          this.keyList[var3] = Integer.MIN_VALUE;
  133.          this.values[var3] = this.defaultValue;
  134.       }
  135.  
  136.       this.count = 0;
  137.       this.lowWaterMark = (int)((float)var2 * 0.0F);
  138.       this.highWaterMark = (int)((float)var2 * 0.4F);
  139.    }
  140.  
  141.    private void rehash() {
  142.       int[] var1 = this.values;
  143.       int[] var2 = this.keyList;
  144.       int var3 = this.primeIndex;
  145.       if (this.count > this.highWaterMark) {
  146.          ++var3;
  147.       } else if (this.count < this.lowWaterMark) {
  148.          var3 -= 2;
  149.       }
  150.  
  151.       this.initialize(var3);
  152.  
  153.       for(int var4 = var1.length - 1; var4 >= 0; --var4) {
  154.          int var5 = var2[var4];
  155.          if (var5 > -2147483647) {
  156.             this.putInternal(var5, var1[var4]);
  157.          }
  158.       }
  159.  
  160.    }
  161.  
  162.    public void putInternal(int var1, int var2) {
  163.       int var3 = this.find(var1);
  164.       if (this.keyList[var3] < -2147483647) {
  165.          this.keyList[var3] = var1;
  166.          ++this.count;
  167.       }
  168.  
  169.       this.values[var3] = var2;
  170.    }
  171.  
  172.    private int find(int var1) {
  173.       if (var1 <= -2147483647) {
  174.          throw new IllegalArgumentException("key can't be less than 0xFFFFFFFE");
  175.       } else {
  176.          int var2 = -1;
  177.          int var3 = (var1 ^ 67108864) % this.keyList.length;
  178.          if (var3 < 0) {
  179.             var3 = -var3;
  180.          }
  181.  
  182.          int var6 = 0;
  183.  
  184.          while(true) {
  185.             int var5 = this.keyList[var3];
  186.             if (var5 == var1) {
  187.                return var3;
  188.             }
  189.  
  190.             if (var5 <= -2147483647) {
  191.                if (var5 == Integer.MIN_VALUE) {
  192.                   if (var2 >= 0) {
  193.                      var3 = var2;
  194.                   }
  195.  
  196.                   return var3;
  197.                }
  198.  
  199.                if (var2 < 0) {
  200.                   var2 = var3;
  201.                }
  202.             }
  203.  
  204.             if (var6 == 0) {
  205.                var6 = var1 % (this.keyList.length - 1);
  206.                if (var6 < 0) {
  207.                   var6 = -var6;
  208.                }
  209.  
  210.                ++var6;
  211.             }
  212.  
  213.             var3 = (var3 + var6) % this.keyList.length;
  214.          }
  215.       }
  216.    }
  217.  
  218.    private static int leastGreaterPrimeIndex(int var0) {
  219.       int var1;
  220.       for(var1 = 0; var1 < PRIMES.length && var0 >= PRIMES[var1]; ++var1) {
  221.       }
  222.  
  223.       return var1 == 0 ? 0 : var1 - 1;
  224.    }
  225. }
  226.