home *** CD-ROM | disk | FTP | other *** search
- package java.io;
-
- import java.util.Arrays;
-
- final class ObjectOutputStream$HandleTable {
- private static final int START_SIZE_POWER = 2;
- private static final int LOAD_FACTOR = 7;
- private static final int START_CAPACITY = 4;
- private int nextWireOffset;
- private int wireHashSizePower = 2;
- private int wireHashCapacity;
- private int[] wireHash2Handle;
- private int[] wireNextHandle;
- private Object[] wireHandle2Object;
-
- public ObjectOutputStream$HandleTable() {
- int var1 = 1 << this.wireHashSizePower;
- this.wireHashCapacity = var1 * 7;
- this.wireHash2Handle = new int[var1 - 1];
- this.wireNextHandle = new int[4];
- this.wireHandle2Object = new Object[4];
- this.clear();
- }
-
- public int assignWireOffset(Object var1) {
- if (this.nextWireOffset >= this.wireNextHandle.length) {
- this.growEntries();
- }
-
- if (this.nextWireOffset >= this.wireHashCapacity) {
- this.growSpine();
- }
-
- this.insert(var1, this.nextWireOffset);
- return this.nextWireOffset++;
- }
-
- private void insert(Object var1, int var2) {
- int var3 = (System.identityHashCode(var1) & Integer.MAX_VALUE) % this.wireHash2Handle.length;
- this.wireHandle2Object[var2] = var1;
- this.wireNextHandle[var2] = this.wireHash2Handle[var3];
- this.wireHash2Handle[var3] = var2;
- }
-
- private void growSpine() {
- ++this.wireHashSizePower;
- int var1 = 1 << this.wireHashSizePower;
- this.wireHashCapacity = var1 * 7;
- this.wireHash2Handle = new int[var1 - 1];
- Arrays.fill(this.wireHash2Handle, -1);
-
- for(int var2 = 0; var2 < this.nextWireOffset; ++var2) {
- this.insert(this.wireHandle2Object[var2], var2);
- }
-
- }
-
- private void growEntries() {
- int[] var1 = new int[this.wireNextHandle.length * 2];
- System.arraycopy(this.wireNextHandle, 0, var1, 0, this.nextWireOffset);
- this.wireNextHandle = var1;
- Object[] var2 = new Object[this.wireHandle2Object.length * 2];
- System.arraycopy(this.wireHandle2Object, 0, var2, 0, this.nextWireOffset);
- this.wireHandle2Object = var2;
- }
-
- public int findWireOffset(Object var1) {
- int var2 = (System.identityHashCode(var1) & Integer.MAX_VALUE) % this.wireHash2Handle.length;
-
- for(int var3 = this.wireHash2Handle[var2]; var3 >= 0; var3 = this.wireNextHandle[var3]) {
- if (this.wireHandle2Object[var3] == var1) {
- return var3;
- }
- }
-
- return -1;
- }
-
- public void clear() {
- this.nextWireOffset = 0;
- Arrays.fill(this.wireHash2Handle, -1);
- }
-
- public int size() {
- return this.nextWireOffset;
- }
- }
-