home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 139 / dpcs0999.iso / Web / CFserver / data1.cab / Java / netscape / util / IdHashtable.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-12  |  1.8 KB  |  111 lines

  1. package netscape.util;
  2.  
  3. public class IdHashtable {
  4.    // $FF: renamed from: A int
  5.    static final int field_0 = -1640531527;
  6.    static final int NOT_FOUND = 0;
  7.    int power;
  8.    int count;
  9.    int maxCount;
  10.    int indexMask;
  11.    Object[] keys;
  12.    int[] values;
  13.    boolean equals;
  14.  
  15.    IdHashtable(boolean var1) {
  16.       this.equals = var1;
  17.       this.power = 5;
  18.       this.count = 0;
  19.       this.indexMask = (1 << this.power) - 1;
  20.       this.maxCount = 3 * (1 << this.power) / 4;
  21.       this.keys = new Object[1 << this.power];
  22.       this.values = new int[1 << this.power];
  23.    }
  24.  
  25.    private boolean equalKeys(Object var1, Object var2) {
  26.       if (var1 == var2) {
  27.          return true;
  28.       } else {
  29.          return this.equals ? var1.equals(var2) : false;
  30.       }
  31.    }
  32.  
  33.    private void rehash() {
  34.       int var2 = this.keys.length;
  35.       Object[] var4 = this.keys;
  36.       int[] var3 = this.values;
  37.       ++this.power;
  38.       this.count = 0;
  39.       this.indexMask = (1 << this.power) - 1;
  40.       this.maxCount = 3 * (1 << this.power) / 4;
  41.       this.keys = new Object[1 << this.power];
  42.       this.values = new int[1 << this.power];
  43.  
  44.       for(int var1 = 0; var1 < var2; ++var1) {
  45.          if (var4[var1] != null) {
  46.             this.putKnownAbsent(var4[var1], var3[var1]);
  47.          }
  48.       }
  49.  
  50.    }
  51.  
  52.    int get(Object var1) {
  53.       int var2 = var1.hashCode() * -1640531527;
  54.       int var3 = var2 >>> 32 - this.power;
  55.       Object var6 = this.keys[var3];
  56.       if (var6 == null) {
  57.          return 0;
  58.       } else if (this.equalKeys(var6, var1)) {
  59.          return this.values[var3];
  60.       } else {
  61.          int var4 = var2 >>> 32 - 2 * this.power & this.indexMask | 1;
  62.          int var5 = 1;
  63.  
  64.          do {
  65.             ++var5;
  66.             var3 = var3 + var4 & this.indexMask;
  67.             var6 = this.keys[var3];
  68.             if (var6 == null) {
  69.                return 0;
  70.             }
  71.  
  72.             if (this.equalKeys(var6, var1)) {
  73.                return this.values[var3];
  74.             }
  75.          } while(var5 <= this.count);
  76.  
  77.          throw new InconsistencyException("IdHashtable overflow");
  78.       }
  79.    }
  80.  
  81.    void putKnownAbsent(Object var1, int var2) {
  82.       if (this.count >= this.maxCount) {
  83.          this.rehash();
  84.       }
  85.  
  86.       int var3 = var1.hashCode() * -1640531527;
  87.       int var4 = var3 >>> 32 - this.power;
  88.       if (this.keys[var4] == null) {
  89.          this.keys[var4] = var1;
  90.          this.values[var4] = var2;
  91.          ++this.count;
  92.       } else {
  93.          int var5 = var3 >>> 32 - 2 * this.power & this.indexMask | 1;
  94.          int var6 = 1;
  95.  
  96.          do {
  97.             ++var6;
  98.             var4 = var4 + var5 & this.indexMask;
  99.             if (this.keys[var4] == null) {
  100.                this.keys[var4] = var1;
  101.                this.values[var4] = var2;
  102.                ++this.count;
  103.                return;
  104.             }
  105.          } while(var6 <= this.count);
  106.  
  107.          throw new InconsistencyException("IdHashtable overflow");
  108.       }
  109.    }
  110. }
  111.