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 / io / ObjectOutputStream$HandleTable.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  1.4 KB  |  88 lines

  1. package java.io;
  2.  
  3. import java.util.Arrays;
  4.  
  5. final class ObjectOutputStream$HandleTable {
  6.    private static final int START_SIZE_POWER = 2;
  7.    private static final int LOAD_FACTOR = 7;
  8.    private static final int START_CAPACITY = 4;
  9.    private int nextWireOffset;
  10.    private int wireHashSizePower = 2;
  11.    private int wireHashCapacity;
  12.    private int[] wireHash2Handle;
  13.    private int[] wireNextHandle;
  14.    private Object[] wireHandle2Object;
  15.  
  16.    public ObjectOutputStream$HandleTable() {
  17.       int var1 = 1 << this.wireHashSizePower;
  18.       this.wireHashCapacity = var1 * 7;
  19.       this.wireHash2Handle = new int[var1 - 1];
  20.       this.wireNextHandle = new int[4];
  21.       this.wireHandle2Object = new Object[4];
  22.       this.clear();
  23.    }
  24.  
  25.    public int assignWireOffset(Object var1) {
  26.       if (this.nextWireOffset >= this.wireNextHandle.length) {
  27.          this.growEntries();
  28.       }
  29.  
  30.       if (this.nextWireOffset >= this.wireHashCapacity) {
  31.          this.growSpine();
  32.       }
  33.  
  34.       this.insert(var1, this.nextWireOffset);
  35.       return this.nextWireOffset++;
  36.    }
  37.  
  38.    private void insert(Object var1, int var2) {
  39.       int var3 = (System.identityHashCode(var1) & Integer.MAX_VALUE) % this.wireHash2Handle.length;
  40.       this.wireHandle2Object[var2] = var1;
  41.       this.wireNextHandle[var2] = this.wireHash2Handle[var3];
  42.       this.wireHash2Handle[var3] = var2;
  43.    }
  44.  
  45.    private void growSpine() {
  46.       ++this.wireHashSizePower;
  47.       int var1 = 1 << this.wireHashSizePower;
  48.       this.wireHashCapacity = var1 * 7;
  49.       this.wireHash2Handle = new int[var1 - 1];
  50.       Arrays.fill(this.wireHash2Handle, -1);
  51.  
  52.       for(int var2 = 0; var2 < this.nextWireOffset; ++var2) {
  53.          this.insert(this.wireHandle2Object[var2], var2);
  54.       }
  55.  
  56.    }
  57.  
  58.    private void growEntries() {
  59.       int[] var1 = new int[this.wireNextHandle.length * 2];
  60.       System.arraycopy(this.wireNextHandle, 0, var1, 0, this.nextWireOffset);
  61.       this.wireNextHandle = var1;
  62.       Object[] var2 = new Object[this.wireHandle2Object.length * 2];
  63.       System.arraycopy(this.wireHandle2Object, 0, var2, 0, this.nextWireOffset);
  64.       this.wireHandle2Object = var2;
  65.    }
  66.  
  67.    public int findWireOffset(Object var1) {
  68.       int var2 = (System.identityHashCode(var1) & Integer.MAX_VALUE) % this.wireHash2Handle.length;
  69.  
  70.       for(int var3 = this.wireHash2Handle[var2]; var3 >= 0; var3 = this.wireNextHandle[var3]) {
  71.          if (this.wireHandle2Object[var3] == var1) {
  72.             return var3;
  73.          }
  74.       }
  75.  
  76.       return -1;
  77.    }
  78.  
  79.    public void clear() {
  80.       this.nextWireOffset = 0;
  81.       Arrays.fill(this.wireHash2Handle, -1);
  82.    }
  83.  
  84.    public int size() {
  85.       return this.nextWireOffset;
  86.    }
  87. }
  88.