home *** CD-ROM | disk | FTP | other *** search
- package netscape.util;
-
- public class IdHashtable {
- // $FF: renamed from: A int
- static final int field_0 = -1640531527;
- static final int NOT_FOUND = 0;
- int power;
- int count;
- int maxCount;
- int indexMask;
- Object[] keys;
- int[] values;
- boolean equals;
-
- IdHashtable(boolean var1) {
- this.equals = var1;
- this.power = 5;
- this.count = 0;
- this.indexMask = (1 << this.power) - 1;
- this.maxCount = 3 * (1 << this.power) / 4;
- this.keys = new Object[1 << this.power];
- this.values = new int[1 << this.power];
- }
-
- private boolean equalKeys(Object var1, Object var2) {
- if (var1 == var2) {
- return true;
- } else {
- return this.equals ? var1.equals(var2) : false;
- }
- }
-
- private void rehash() {
- int var2 = this.keys.length;
- Object[] var4 = this.keys;
- int[] var3 = this.values;
- ++this.power;
- this.count = 0;
- this.indexMask = (1 << this.power) - 1;
- this.maxCount = 3 * (1 << this.power) / 4;
- this.keys = new Object[1 << this.power];
- this.values = new int[1 << this.power];
-
- for(int var1 = 0; var1 < var2; ++var1) {
- if (var4[var1] != null) {
- this.putKnownAbsent(var4[var1], var3[var1]);
- }
- }
-
- }
-
- int get(Object var1) {
- int var2 = var1.hashCode() * -1640531527;
- int var3 = var2 >>> 32 - this.power;
- Object var6 = this.keys[var3];
- if (var6 == null) {
- return 0;
- } else if (this.equalKeys(var6, var1)) {
- return this.values[var3];
- } else {
- int var4 = var2 >>> 32 - 2 * this.power & this.indexMask | 1;
- int var5 = 1;
-
- do {
- ++var5;
- var3 = var3 + var4 & this.indexMask;
- var6 = this.keys[var3];
- if (var6 == null) {
- return 0;
- }
-
- if (this.equalKeys(var6, var1)) {
- return this.values[var3];
- }
- } while(var5 <= this.count);
-
- throw new InconsistencyException("IdHashtable overflow");
- }
- }
-
- void putKnownAbsent(Object var1, int var2) {
- if (this.count >= this.maxCount) {
- this.rehash();
- }
-
- int var3 = var1.hashCode() * -1640531527;
- int var4 = var3 >>> 32 - this.power;
- if (this.keys[var4] == null) {
- this.keys[var4] = var1;
- this.values[var4] = var2;
- ++this.count;
- } else {
- int var5 = var3 >>> 32 - 2 * this.power & this.indexMask | 1;
- int var6 = 1;
-
- do {
- ++var6;
- var4 = var4 + var5 & this.indexMask;
- if (this.keys[var4] == null) {
- this.keys[var4] = var1;
- this.values[var4] = var2;
- ++this.count;
- return;
- }
- } while(var6 <= this.count);
-
- throw new InconsistencyException("IdHashtable overflow");
- }
- }
- }
-