You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by jo...@apache.org on 2008/10/24 06:30:39 UTC

svn commit: r707541 - in /poi/trunk/src/java/org/apache/poi: hssf/record/EmbeddedObjectRefSubRecord.java hssf/record/formula/StringPtg.java util/LittleEndianByteArrayInputStream.java util/LittleEndianInput.java util/LittleEndianInputStream.java

Author: josh
Date: Thu Oct 23 21:30:38 2008
New Revision: 707541

URL: http://svn.apache.org/viewvc?rev=707541&view=rev
Log:
Removed String methods from LittleEndianInput

Modified:
    poi/trunk/src/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java
    poi/trunk/src/java/org/apache/poi/hssf/record/formula/StringPtg.java
    poi/trunk/src/java/org/apache/poi/util/LittleEndianByteArrayInputStream.java
    poi/trunk/src/java/org/apache/poi/util/LittleEndianInput.java
    poi/trunk/src/java/org/apache/poi/util/LittleEndianInputStream.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java?rev=707541&r1=707540&r2=707541&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java Thu Oct 23 21:30:38 2008
@@ -26,7 +26,6 @@
 import org.apache.poi.hssf.record.formula.RefPtg;
 import org.apache.poi.util.HexDump;
 import org.apache.poi.util.LittleEndian;
-import org.apache.poi.util.LittleEndianByteArrayOutputStream;
 import org.apache.poi.util.LittleEndianInput;
 import org.apache.poi.util.LittleEndianInputStream;
 import org.apache.poi.util.LittleEndianOutput;
@@ -113,10 +112,10 @@
 				field_3_unicode_flag = ( in.readByte() & 0x01 ) != 0;
 				remaining -= LittleEndian.BYTE_SIZE;
 				if (field_3_unicode_flag) {
-					field_4_ole_classname = in.readUnicodeLEString(nChars);
+					field_4_ole_classname = StringUtil.readUnicodeLE(in, nChars);
 					stringByteCount = nChars * 2;
 				} else {
-					field_4_ole_classname = in.readCompressedUnicode(nChars);
+					field_4_ole_classname = StringUtil.readCompressedUnicode(in, nChars);
 					stringByteCount = nChars;
 				}
 			} else {

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/formula/StringPtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/formula/StringPtg.java?rev=707541&r1=707540&r2=707541&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/formula/StringPtg.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/formula/StringPtg.java Thu Oct 23 21:30:38 2008
@@ -17,8 +17,6 @@
 
 package org.apache.poi.hssf.record.formula;
 
-import org.apache.poi.util.BitField;
-import org.apache.poi.util.BitFieldFactory;
 import org.apache.poi.util.LittleEndianInput;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.StringUtil;
@@ -32,29 +30,26 @@
  * @author Bernard Chesnoy
  */
 public final class StringPtg extends ScalarConstantPtg {
-    public final static int SIZE = 9;
-    public final static byte sid = 0x17;
-    private static final BitField fHighByte = BitFieldFactory.getInstance(0x01);
-    /** the character (")used in formulas to delimit string literals */
+     public final static byte sid = 0x17;
+    /** the character (") used in formulas to delimit string literals */
     private static final char FORMULA_DELIMITER = '"';
 
+    private final boolean _is16bitUnicode;
     /**
      * NOTE: OO doc says 16bit length, but BiffViewer says 8 Book says something
      * totally different, so don't look there!
      */
-    private final int field_1_length;
-    private final byte field_2_options;
     private final String field_3_string;
 
     /** Create a StringPtg from a stream */
     public StringPtg(LittleEndianInput in)  {
-        field_1_length = in.readUByte();
-        field_2_options = in.readByte();
-        if (fHighByte.isSet(field_2_options)) {
-            field_3_string = in.readUnicodeLEString(field_1_length);
-        } else {
-            field_3_string = in.readCompressedUnicode(field_1_length);
-        }
+    	int nChars = in.readUByte(); // Note - nChars is 8-bit
+    	_is16bitUnicode = (in.readByte() & 0x01) != 0;
+    	if (_is16bitUnicode) {
+    		field_3_string = StringUtil.readUnicodeLE(in, nChars);
+    	} else {
+    		field_3_string = StringUtil.readCompressedUnicode(in, nChars);
+    	}
     }
 
     /**
@@ -70,9 +65,8 @@
             throw new IllegalArgumentException(
                     "String literals in formulas can't be bigger than 255 characters ASCII");
         }
-        field_2_options = (byte) fHighByte.setBoolean(0, StringUtil.hasMultibyte(value));
+        _is16bitUnicode = StringUtil.hasMultibyte(value);
         field_3_string = value;
-        field_1_length = value.length(); // for the moment, we support only ASCII strings in formulas we create
     }
 
     public String getValue() {
@@ -81,21 +75,17 @@
 
     public void write(LittleEndianOutput out) {
         out.writeByte(sid + getPtgClass());
-        out.writeByte(field_1_length);
-        out.writeByte(field_2_options);
-        if (fHighByte.isSet(field_2_options)) {
-            StringUtil.putUnicodeLE(getValue(), out);
+        out.writeByte(field_3_string.length()); // Note - nChars is 8-bit
+        out.writeByte(_is16bitUnicode ? 0x01 : 0x00);
+        if (_is16bitUnicode) {
+        	StringUtil.putUnicodeLE(field_3_string, out);
         } else {
-            StringUtil.putCompressedUnicode(getValue(), out);
+        	StringUtil.putCompressedUnicode(field_3_string, out);
         }
     }
 
     public int getSize() {
-        if (fHighByte.isSet(field_2_options)) {
-            return 2 * field_1_length + 3;
-        } else {
-            return field_1_length + 3;
-        }
+    	return 3 +  field_3_string.length() * (_is16bitUnicode ? 2 : 1);
     }
 
     public String toFormulaString() {

Modified: poi/trunk/src/java/org/apache/poi/util/LittleEndianByteArrayInputStream.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/LittleEndianByteArrayInputStream.java?rev=707541&r1=707540&r2=707541&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/LittleEndianByteArrayInputStream.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/LittleEndianByteArrayInputStream.java Thu Oct 23 21:30:38 2008
@@ -114,20 +114,4 @@
 	public double readDouble() {
 		return Double.longBitsToDouble(readLong());
 	}
-	public String readCompressedUnicode(int nChars) {
-		checkPosition(nChars);
-		char[] buf = new char[nChars];
-		for (int i = 0; i < buf.length; i++) {
-			buf[i] = (char) readUByte();
-		}
-		return new String(buf);
-	}
-	public String readUnicodeLEString(int nChars) {
-		checkPosition(nChars*2);
-		char[] buf = new char[nChars];
-		for (int i = 0; i < buf.length; i++) {
-			buf[i] = (char) readUShort();
-		}
-		return new String(buf);
-	}
 }

Modified: poi/trunk/src/java/org/apache/poi/util/LittleEndianInput.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/LittleEndianInput.java?rev=707541&r1=707540&r2=707541&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/LittleEndianInput.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/LittleEndianInput.java Thu Oct 23 21:30:38 2008
@@ -30,6 +30,4 @@
 	double readDouble();
 	void readFully(byte[] buf);
 	void readFully(byte[] buf, int off, int len);
-	String readUnicodeLEString(int nChars);
-	String readCompressedUnicode(int nChars);
 }

Modified: poi/trunk/src/java/org/apache/poi/util/LittleEndianInputStream.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/LittleEndianInputStream.java?rev=707541&r1=707540&r2=707541&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/LittleEndianInputStream.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/LittleEndianInputStream.java Thu Oct 23 21:30:38 2008
@@ -131,34 +131,4 @@
 			buf[i] = (byte) ch;
 		}
 	}
-	public String readCompressedUnicode(int nChars) {
-		char[] buf = new char[nChars];
-		for (int i = 0; i < buf.length; i++) {
-			int ch;
-			try {
-				ch = in.read();
-			} catch (IOException e) {
-				throw new RuntimeException(e);
-			}
-			checkEOF(ch);
-			buf[i] = (char) ch;
-			
-		}
-		return new String(buf);
-	}
-	public String readUnicodeLEString(int nChars) {
-		char[] buf = new char[nChars];
-		for (int i = 0; i < buf.length; i++) {
-			int ch;
-			try {
-				ch = in.read();
-			} catch (IOException e) {
-				throw new RuntimeException(e);
-			}
-			checkEOF(ch);
-			buf[i] = (char) ch;
-			
-		}
-		return new String(buf);
-	}
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org