]> source.dussan.org Git - aspectj.git/commitdiff
312839: smaller class files
authoraclement <aclement>
Mon, 17 May 2010 18:23:39 +0000 (18:23 +0000)
committeraclement <aclement>
Mon, 17 May 2010 18:23:39 +0000 (18:23 +0000)
org.aspectj.matcher/src/org/aspectj/weaver/CompressingDataOutputStream.java [new file with mode: 0644]

diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/CompressingDataOutputStream.java b/org.aspectj.matcher/src/org/aspectj/weaver/CompressingDataOutputStream.java
new file mode 100644 (file)
index 0000000..1e2f31c
--- /dev/null
@@ -0,0 +1,101 @@
+/* *******************************************************************
+ * Copyright (c) 2010 Contributors
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ * 
+ * Contributors:
+ * Andy Clement (SpringSource)
+ * ******************************************************************/
+package org.aspectj.weaver;
+
+import java.io.ByteArrayOutputStream;
+import java.io.DataOutputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * A variation of a DataOutputStream that is linked to a constant pool writer. The linked constant pool can be used to compress
+ * objects into to simple index references into the constant pool. The corresponding decompression is done in the
+ * VersionedDataInputStream.
+ * 
+ * @author Andy Clement
+ */
+public class CompressingDataOutputStream extends DataOutputStream {
+
+       private ConstantPoolWriter constantPoolWriter;
+
+       public CompressingDataOutputStream(ByteArrayOutputStream baos, ConstantPoolWriter constantPoolWriter) {
+               super(baos);
+               this.constantPoolWriter = constantPoolWriter;
+       }
+
+       public CompressingDataOutputStream(ByteArrayOutputStream baos) {
+               super(baos);
+       }
+
+       public CompressingDataOutputStream(FileOutputStream fos) {
+               super(fos);
+       }
+
+       public boolean canCompress() {
+               return constantPoolWriter != null;
+       }
+
+       /**
+        * @param signature of the form 'La/b/c/d;'
+        * @return the constant pool index
+        */
+       public int compressSignature(String signature) {
+               if (constantPoolWriter == null) {
+                       throw new IllegalStateException();
+               }
+               return constantPoolWriter.writeUtf8(signature);
+       }
+
+       /**
+        * @param filepath a file system path 'c:\a\b\c.txt' or '/a/b/c.txt'
+        * @return the constant pool index
+        */
+       public int compressFilepath(String filepath) {
+               if (constantPoolWriter == null) {
+                       throw new IllegalStateException();
+               }
+               return constantPoolWriter.writeUtf8(filepath);
+       }
+
+       /**
+        * @param name a simple name (for example a method or field name)
+        * @return the constant pool index
+        */
+       public int compressName(String name) {
+               if (constantPoolWriter == null) {
+                       throw new IllegalStateException();
+               }
+               return constantPoolWriter.writeUtf8(name);
+       }
+
+       /**
+        * @param name a simple name (for example a method or field name)
+        */
+       public void writeCompressedName(String name) throws IOException {
+               writeShort(compressName(name));
+       }
+
+       /**
+        * @param signature of the form 'La/b/c/d;'
+        */
+       public void writeCompressedSignature(String signature) throws IOException {
+               writeShort(compressSignature(signature));
+       }
+
+       /**
+        * @param path a file system path 'c:\a\b\c.txt' or '/a/b/c.txt'
+        */
+       public void writeCompressedPath(String path) throws IOException {
+               writeShort(compressFilepath(path));
+       }
+
+}
\ No newline at end of file