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/09 10:33:54 UTC

svn commit: r703100 - in /poi/trunk/src: java/org/apache/poi/hssf/record/ java/org/apache/poi/hssf/record/formula/ testcases/org/apache/poi/hssf/record/ testcases/org/apache/poi/hssf/record/formula/

Author: josh
Date: Thu Oct  9 01:33:54 2008
New Revision: 703100

URL: http://svn.apache.org/viewvc?rev=703100&view=rev
Log:
Removed last occurrences of storing Ptg arrays in Stacks.  Some related clean-up.

Removed:
    poi/trunk/src/java/org/apache/poi/hssf/record/CustomField.java
Modified:
    poi/trunk/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java
    poi/trunk/src/java/org/apache/poi/hssf/record/LinkedDataFormulaField.java
    poi/trunk/src/java/org/apache/poi/hssf/record/LinkedDataRecord.java
    poi/trunk/src/java/org/apache/poi/hssf/record/formula/Ptg.java
    poi/trunk/src/testcases/org/apache/poi/hssf/record/TestLinkedDataRecord.java
    poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/TestReferencePtg.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java?rev=703100&r1=703099&r2=703100&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java Thu Oct  9 01:33:54 2008
@@ -17,8 +17,6 @@
 
 package org.apache.poi.hssf.record;
 
-import java.util.Stack;
-
 import org.apache.poi.hssf.record.formula.Ptg;
 import org.apache.poi.util.LittleEndian;
 import org.apache.poi.util.StringUtil;
@@ -124,11 +122,7 @@
 	}
 
 	private int getNameDefinitionSize() {
-		int result = 0;
-		for (int i = 0; i < field_5_name_definition.length; i++) {
-			result += field_5_name_definition[i].getSize();
-		}
-		return result;
+		return Ptg.getEncodedSize(field_5_name_definition);
 	}
 
 

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/LinkedDataFormulaField.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/LinkedDataFormulaField.java?rev=703100&r1=703099&r2=703100&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/LinkedDataFormulaField.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/LinkedDataFormulaField.java Thu Oct  9 01:33:54 2008
@@ -20,47 +20,38 @@
 import org.apache.poi.hssf.record.formula.Ptg;
 import org.apache.poi.util.LittleEndian;
 
-import java.util.Stack;
-import java.util.Iterator;
-
 /**
  * Not implemented yet. May commit it anyway just so people can see
  * where I'm heading.
  *
  * @author Glen Stampoultzis (glens at apache.org)
  */
-public final class LinkedDataFormulaField implements CustomField {
-    Stack formulaTokens = new Stack();
+public final class LinkedDataFormulaField {
+    private Ptg[] formulaTokens;
 
     public int getSize()
     {
-        int size = 0;
-        for ( Iterator iterator = formulaTokens.iterator(); iterator.hasNext(); )
-        {
-            Ptg token = (Ptg) iterator.next();
-            size += token.getSize();
-        }
-        return size + 2;
+        return 2 + Ptg.getEncodedSize(formulaTokens);
     }
 
     public int fillField( RecordInputStream in )
     {
-        short tokenSize = in.readShort();
-        formulaTokens = Ptg.createParsedExpressionTokens(tokenSize, in);
-
+        int tokenSize = in.readUShort();
+        formulaTokens = Ptg.readTokens(tokenSize, in);
         return tokenSize + 2;
     }
 
     public void toString( StringBuffer buffer )
     {
-        for ( int k = 0; k < formulaTokens.size(); k++ )
+        for ( int k = 0; k < formulaTokens.length; k++ )
         {
+        	Ptg ptg = formulaTokens[k];
             buffer.append( "Formula " )
                     .append( k )
                     .append( "=" )
-                    .append( formulaTokens.get( k ).toString() )
+                    .append(ptg.toString() )
                     .append( "\n" )
-                    .append( ( (Ptg) formulaTokens.get( k ) ).toDebugString() )
+                    .append(ptg.toDebugString() )
                     .append( "\n" );
         }
     }
@@ -75,34 +66,26 @@
     public int serializeField( int offset, byte[] data )
     {
         int size = getSize();
-        LittleEndian.putShort(data, offset, (short)(size - 2));
+        LittleEndian.putUShort(data, offset, size - 2);
         int pos = offset + 2;
-        pos += Ptg.serializePtgStack(formulaTokens, data, pos);
+        pos += Ptg.serializePtgs(formulaTokens, data, pos);
         return size;
     }
 
-    public Object clone()
-    {
-        try
-        {
-            // todo: clone tokens? or are they immutable?
-            return super.clone();
-        }
-        catch ( CloneNotSupportedException e )
-        {
-            // should not happen
-            return null;
-        }
-    }
-
-    public void setFormulaTokens( Stack formulaTokens )
+    public void setFormulaTokens(Ptg[] ptgs)
     {
-        this.formulaTokens = (Stack) formulaTokens.clone();
+        this.formulaTokens = (Ptg[])ptgs.clone();
     }
 
-    public Stack getFormulaTokens()
+    public Ptg[] getFormulaTokens()
     {
-        return (Stack)this.formulaTokens.clone();
+        return (Ptg[])this.formulaTokens.clone();
     }
 
+	public LinkedDataFormulaField copy() {
+		LinkedDataFormulaField result = new LinkedDataFormulaField();
+		
+		result.formulaTokens = getFormulaTokens();
+		return result;
+	}
 }

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/LinkedDataRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/LinkedDataRecord.java?rev=703100&r1=703099&r2=703100&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/LinkedDataRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/LinkedDataRecord.java Thu Oct  9 01:33:54 2008
@@ -125,7 +125,7 @@
         rec.field_2_referenceType = field_2_referenceType;
         rec.field_3_options = field_3_options;
         rec.field_4_indexNumberFmtRecord = field_4_indexNumberFmtRecord;
-        rec.field_5_formulaOfLink = ((LinkedDataFormulaField)field_5_formulaOfLink.clone());
+        rec.field_5_formulaOfLink = field_5_formulaOfLink.copy();
         return rec;
     }
 

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/formula/Ptg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/formula/Ptg.java?rev=703100&r1=703099&r2=703100&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/formula/Ptg.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/formula/Ptg.java Thu Oct  9 01:33:54 2008
@@ -19,10 +19,8 @@
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Stack;
 
 import org.apache.poi.hssf.record.RecordInputStream;
-import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 
 /**
  * <tt>Ptg</tt> represents a syntactic token in a formula.  'PTG' is an acronym for 
@@ -49,15 +47,7 @@
 	 * Extra data (beyond <tt>size</tt>) may be read if and <tt>ArrayPtg</tt>s are present.
 	 */
 	public static Ptg[] readTokens(int size, RecordInputStream in) {
-		Stack temp = createParsedExpressionTokens((short)size, in);
-		return toPtgArray(temp);
-	}
-
-	/**
-	 * @deprecated - use readTokens()
-	 */
-	public static Stack createParsedExpressionTokens(short size, RecordInputStream in) {
-		Stack stack = new Stack();
+		List temp = new ArrayList(4 + size / 2);
 		int pos = 0;
 		List arrayPtgs = null;
 		while (pos < size) {
@@ -71,7 +61,7 @@
 			} else {
 				pos += ptg.getSize();
 			}
-			stack.push( ptg );
+			temp.add( ptg );
 		}
 		if(pos != size) {
 			throw new RuntimeException("Ptg array size mismatch");
@@ -82,7 +72,7 @@
 				p.readTokenValues(in);
 			}
 		}
-		return stack;
+		return toPtgArray(temp);
 	}
 
 	public static Ptg createPtg(RecordInputStream in) {
@@ -200,19 +190,11 @@
 		l.toArray(result);
 		return result;
 	}
-	private static Stack createStack(Ptg[] formulaTokens) {
-		Stack result = new Stack();
-		for (int i = 0; i < formulaTokens.length; i++) {
-			result.add(formulaTokens[i]);
-		} 
-		return result;
-	}
 	/**
 	 * This method will return the same result as {@link #getEncodedSizeWithoutArrayData(Ptg[])} 
 	 * if there are no array tokens present.
 	 * @return the full size taken to encode the specified <tt>Ptg</tt>s 
 	 */
-	// TODO - several duplicates of this code should be refactored here
 	public static int getEncodedSize(Ptg[] ptgs) {
 		int result = 0;
 		for (int i = 0; i < ptgs.length; i++) {
@@ -243,23 +225,14 @@
 	 * The 2 byte encode length field is <b>not</b> written by this method.
 	 * @return number of bytes written
 	 */
-	public static int serializePtgs(Ptg[] ptgs, byte[] data, int offset) {
-		return serializePtgStack(createStack(ptgs), data, offset);
-	}
-
-	/**
-	 * @deprecated use serializePtgs()
-	 */
-	public static int serializePtgStack(Stack expression, byte[] array, int offset) {
+	public static int serializePtgs(Ptg[] ptgs, byte[] array, int offset) {
 		int pos = 0;
-		int size = 0;
-		if (expression != null)
-			size = expression.size();
+		int size = ptgs.length;
 
 		List arrayPtgs = null;
 
 		for (int k = 0; k < size; k++) {
-			Ptg ptg = ( Ptg ) expression.get(k);
+			Ptg ptg = ptgs[k];
 
 			ptg.writeBytes(array, pos + offset);
 			if (ptg instanceof ArrayPtg) {

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/record/TestLinkedDataRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/TestLinkedDataRecord.java?rev=703100&r1=703099&r2=703100&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/TestLinkedDataRecord.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/TestLinkedDataRecord.java Thu Oct  9 01:33:54 2008
@@ -19,9 +19,9 @@
 
 
 import junit.framework.TestCase;
-import org.apache.poi.hssf.record.formula.Area3DPtg;
 
-import java.util.Stack;
+import org.apache.poi.hssf.record.formula.Area3DPtg;
+import org.apache.poi.hssf.record.formula.Ptg;
 
 /**
  * Tests the serialization and deserialization of the LinkedDataRecord
@@ -167,7 +167,7 @@
         Area3DPtg ptgExpected = new Area3DPtg(0, 7936, 0, 0,
                 false, false, false, false, 0);
         
-        Object ptgActual = record.getFormulaOfLink().getFormulaTokens().get(0);
+        Object ptgActual = record.getFormulaOfLink().getFormulaTokens()[0];
         assertEquals(ptgExpected.toString(),  ptgActual.toString());
 
         assertEquals( data.length + 4, record.getRecordSize() );
@@ -182,10 +182,8 @@
         record.setIndexNumberFmtRecord( (short)0 );
         Area3DPtg ptg = new Area3DPtg(0, 7936, 0, 0,
         		false, false, false, false, 0);
-        Stack s = new Stack();
-        s.push(ptg);
         LinkedDataFormulaField formulaOfLink = new LinkedDataFormulaField();
-        formulaOfLink.setFormulaTokens(s);
+        formulaOfLink.setFormulaTokens(new Ptg[] { ptg, });
         record.setFormulaOfLink(formulaOfLink );
 
         byte [] recordBytes = record.serialize();

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/TestReferencePtg.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/TestReferencePtg.java?rev=703100&r1=703099&r2=703100&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/TestReferencePtg.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/formula/TestReferencePtg.java Thu Oct  9 01:33:54 2008
@@ -18,7 +18,6 @@
 package org.apache.poi.hssf.record.formula;
 
 import java.util.Arrays;
-import java.util.Stack;
 
 import junit.framework.AssertionFailedError;
 import junit.framework.TestCase;
@@ -95,9 +94,9 @@
     };
     public void testReadWrite_tRefN_bug45091() {
         TestcaseRecordInputStream in = new TestcaseRecordInputStream(-1, tRefN_data);
-        Stack ptgs = Ptg.createParsedExpressionTokens((short)tRefN_data.length, in);
+        Ptg[] ptgs = Ptg.readTokens(tRefN_data.length, in);
         byte[] outData = new byte[5];
-        Ptg.serializePtgStack(ptgs, outData, 0);
+        Ptg.serializePtgs(ptgs, outData, 0);
         if (outData[0] == 0x24) {
             throw new AssertionFailedError("Identified bug 45091");
         }



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