home *** CD-ROM | disk | FTP | other *** search
- package netscape.util;
-
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
-
- public class Archive {
- public static final int ARCHIVE_MAGIC = 1852138529;
- static final int ARCHIVE_VERSION = 1;
- static Hashtable externalCoders;
- int version;
- int rootCount = 0;
- int[] roots = new int[4];
- int idCount = 1;
- int[] rowForId = new int[4];
- ClassTable[] tableForId = new ClassTable[4];
- Hashtable classTables = new Hashtable();
- public boolean performanceDebug = false;
-
- private static int[] growIntArray(int[] var0) {
- int[] var1 = new int[var0.length * 2];
- System.arraycopy(var0, 0, var1, 0, var0.length);
- return var1;
- }
-
- private static ClassTable[] growTableArray(ClassTable[] var0) {
- ClassTable[] var1 = new ClassTable[var0.length * 2];
- System.arraycopy(var0, 0, var1, 0, var0.length);
- return var1;
- }
-
- public void addRootIdentifier(int var1) {
- if (this.rootCount >= this.roots.length) {
- this.roots = growIntArray(this.roots);
- }
-
- this.roots[this.rootCount] = var1;
- ++this.rootCount;
- }
-
- public boolean removeRootIdentifier(int var1) {
- boolean var3 = false;
-
- int var2;
- for(var2 = 0; var2 < this.rootCount; ++var2) {
- if (this.roots[var2] == var1) {
- var3 = true;
- --this.rootCount;
- break;
- }
- }
-
- while(var2 < this.rootCount) {
- this.roots[var2] = this.roots[var2 + 1];
- ++var2;
- }
-
- return var3;
- }
-
- public int[] rootIdentifiers() {
- int[] var1 = new int[this.rootCount];
- System.arraycopy(this.roots, 0, var1, 0, this.rootCount);
- return var1;
- }
-
- public ClassTable classTableForName(String var1) {
- return (ClassTable)this.classTables.get(var1);
- }
-
- public void addClassTable(ClassTable var1) {
- this.classTables.put(var1.className(), var1);
- }
-
- public ClassTable classTableForIdentifier(int var1) {
- if (var1 >= this.idCount) {
- throw new ArrayIndexOutOfBoundsException(var1);
- } else {
- return this.tableForId[var1];
- }
- }
-
- public int rowForIdentifier(int var1) {
- if (var1 >= this.idCount) {
- throw new ArrayIndexOutOfBoundsException(var1);
- } else {
- return this.rowForId[var1];
- }
- }
-
- public int mapIdentifier(ClassTable var1, int var2) {
- if (this.idCount >= this.rowForId.length) {
- this.rowForId = growIntArray(this.rowForId);
- this.tableForId = growTableArray(this.tableForId);
- }
-
- int var3 = this.idCount;
- this.rowForId[var3] = var2;
- this.tableForId[var3] = var1;
- ++this.idCount;
- return var3;
- }
-
- public int identifierCount() {
- return this.idCount;
- }
-
- static synchronized void setupExternalCoders() {
- if (externalCoders == null) {
- externalCoders = new Hashtable(24);
- PrimitiveCoder var0 = new PrimitiveCoder((byte)0);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)1);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)2);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)3);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)4);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)5);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)6);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)7);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)8);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)9);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)10);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)11);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)12);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)13);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)14);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)15);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)16);
- externalCoders.put(var0.className(), var0);
- var0 = new PrimitiveCoder((byte)17);
- externalCoders.put(var0.className(), var0);
- }
- }
-
- ExternalCoder externalCoderForName(String var1) {
- if (externalCoders == null) {
- setupExternalCoders();
- }
-
- return (ExternalCoder)externalCoders.get(var1);
- }
-
- public void read(InputStream var1) throws IOException {
- CompactInputStream var7;
- if (var1 instanceof CompactInputStream) {
- var7 = (CompactInputStream)var1;
- } else {
- var7 = new CompactInputStream(var1);
- }
-
- int var4 = var7.readInt();
- if (var4 != 1852138529) {
- throw new IOException("Bad magic number " + var4);
- } else {
- this.version = var7.readInt();
- if (this.version != 1) {
- throw new IOException("Unknown archiveVersion " + this.version);
- } else {
- int var3 = var7.readCompactInt();
- ClassTable[] var6 = new ClassTable[var3];
-
- for(int var2 = 0; var2 < var3; ++var2) {
- ClassTable var5 = new ClassTable(this);
- var6[var2] = var5;
- var5.readInfo(var7);
- this.addClassTable(var5);
- }
-
- for(int var8 = 0; var8 < var3; ++var8) {
- ClassTable var14 = var6[var8];
- var14.readData(var7);
- }
-
- var3 = var7.readCompactInt();
- this.roots = new int[var3];
- this.rootCount = var3;
-
- for(int var9 = 0; var9 < var3; ++var9) {
- this.roots[var9] = var7.readCompactInt();
- }
-
- var3 = var7.readCompactInt();
- this.rowForId = new int[var3];
- this.tableForId = new ClassTable[var3];
- this.idCount = var3;
-
- for(int var10 = 1; var10 < var3; ++var10) {
- this.rowForId[var10] = var7.readCompactInt();
- this.tableForId[var10] = var6[var7.readCompactInt()];
- }
-
- var3 = var7.readCompactInt();
- if (var3 > 0) {
- var7.skipBytes(var3);
- }
-
- }
- }
- }
-
- public void write(OutputStream var1) throws IOException {
- CompactOutputStream var5;
- if (var1 instanceof CompactOutputStream) {
- var5 = (CompactOutputStream)var1;
- } else {
- var5 = new CompactOutputStream(var1);
- }
-
- var5.writeInt(1852138529);
- var5.writeInt(1);
- Object[] var4 = this.classTables.elementsArray();
- int var3;
- if (var4 == null) {
- var3 = 0;
- } else {
- var3 = var4.length;
- }
-
- var5.writeCompactInt(var3);
-
- for(int var2 = 0; var2 < var3; ++var2) {
- ClassTable var6 = (ClassTable)var4[var2];
- var6.tableId = var2;
- var6.writeInfo(var5);
- }
-
- for(int var7 = 0; var7 < var3; ++var7) {
- ClassTable var12 = (ClassTable)var4[var7];
- var12.writeData(var5);
- }
-
- var3 = this.rootCount;
- var5.writeCompactInt(var3);
-
- for(int var8 = 0; var8 < var3; ++var8) {
- var5.writeCompactInt(this.roots[var8]);
- }
-
- var3 = this.idCount;
- var5.writeCompactInt(var3);
-
- for(int var9 = 1; var9 < var3; ++var9) {
- var5.writeCompactInt(this.rowForId[var9]);
- ClassTable var13 = this.tableForId[var9];
- if (var13 == null) {
- var5.writeCompactInt(0);
- } else {
- var5.writeCompactInt(var13.tableId);
- }
- }
-
- var5.writeCompactInt(0);
- var5.flush();
- }
-
- public void readASCII(InputStream var1) throws CodingException, DeserializationException, IOException {
- ASCIIArchiveLoader var2 = new ASCIIArchiveLoader(this);
- var2.readASCII(var1);
- }
-
- public void writeASCII(OutputStream var1, boolean var2) throws CodingException, IOException {
- ASCIIArchiveLoader var3 = new ASCIIArchiveLoader(this);
- var3.writeASCII(var1, var2);
- }
- }
-