]> source.dussan.org Git - poi.git/commitdiff
PR 13292, size of FuncPtg
authorAvik Sengupta <avik@apache.org>
Tue, 6 May 2003 15:30:52 +0000 (15:30 +0000)
committerAvik Sengupta <avik@apache.org>
Tue, 6 May 2003 15:30:52 +0000 (15:30 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353087 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/model/FormulaParser.java
src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java
src/java/org/apache/poi/hssf/record/formula/FuncPtg.java
src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java

index 32e6cd4af2fc0a86283bb8a82bf1878fdfa64bdf..6d7ff6f700d4eb47b60ccba3bf0195d4a48f9c39 100644 (file)
@@ -797,7 +797,9 @@ end;
         }
         return (String) stack.pop(); //TODO: catch stack underflow and throw parse exception. 
     }
-    
+    /** Create a tree representation of the RPN token array
+     *used to run the class(RVA) change algo
+     */
     private Node createTree() {
         java.util.Stack stack = new java.util.Stack();
         int numPtgs = tokens.size();
@@ -837,7 +839,8 @@ end;
         return buf.toString();
     }
     
-}    
+}   
+    /** Private helper class, used to create a tree representation of the formula*/
     class Node {
         private Ptg value=null;
         private Node[] children=new Node[0];
index 4c0e9f0665c4462786dda0cefafb2eb6ba9e1760..da08a6dc3d93d0bba57a6967539b9a09064d367c 100644 (file)
@@ -69,7 +69,7 @@ public abstract class AbstractFunctionPtg extends OperationPtg {
        //constant used allow a ptgAttr to be mapped properly for its functionPtg
        public static final String ATTR_NAME = "specialflag";
            
-    private final static int  SIZE = 4;    
+      
     
     private static BinaryTree map = produceHash(); 
     protected static Object[][] functionData = produceFunctionData();
@@ -129,14 +129,13 @@ public abstract class AbstractFunctionPtg extends OperationPtg {
     }
     
     public abstract void writeBytes(byte[] array, int offset);
+    public abstract int getSize();
     
    
     
-    public int getSize() {
-        return SIZE;
-    }
+
     
-    private String lookupName(short index) {
+    protected String lookupName(short index) {
         return ((String)map.get(new Integer(index))); 
     }
     
index 1b22e3604a47a9c0de1dcc4138960f8ec10fcd1e..1c230c95a4220d5b2f79a7af944675259fbd475a 100644 (file)
@@ -2,13 +2,14 @@ package org.apache.poi.hssf.record.formula;
 import org.apache.poi.util.LittleEndian;
 
 /**
- *
+ * @author aviks
  * @author Jason Height (jheight at chariot dot net dot au)
  * @author Danny Mui (dmui at apache dot org) (Leftover handling)
  */
 public class FuncPtg extends AbstractFunctionPtg{
     
     public final static byte sid  = 0x21;
+    public final static int  SIZE = 3;
     private int numParams=0;
     
     /**
@@ -17,8 +18,8 @@ public class FuncPtg extends AbstractFunctionPtg{
      * <p>
      * If the leftovers are removed, a prompt "Warning: Data may have been lost occurs in Excel"
      */
-       protected byte[] leftOvers = null;
-
+       //protected byte[] leftOvers = null;
+    
     private FuncPtg() {
       //Required for clone methods      
     }
@@ -31,12 +32,12 @@ public class FuncPtg extends AbstractFunctionPtg{
         //field_1_num_args = data[ offset + 0 ];
         field_2_fnc_index  = LittleEndian.getShort(data,offset + 0 );
         
-        
+      /*  
         if (data.length - offset > 2) { //save left overs if there are any
                        leftOvers = new byte[2];
                System.arraycopy(data, offset+1, leftOvers, 0, leftOvers.length);
         }
-               
+        */     
         try {
             numParams = ( (Integer)functionData[field_2_fnc_index][2]).intValue();
         } catch (NullPointerException npe) {
@@ -49,9 +50,9 @@ public class FuncPtg extends AbstractFunctionPtg{
         array[offset+0]= (byte) (sid + ptgClass);
         //array[offset+1]=field_1_num_args;
         LittleEndian.putShort(array,offset+1,field_2_fnc_index);
-        if (leftOvers != null) {
+        /**if (leftOvers != null) {
                System.arraycopy(leftOvers, 0, array, offset+2, leftOvers.length);
-        }
+        }**/
     }
     
      public int getNumberOfOperands() {
@@ -60,8 +61,23 @@ public class FuncPtg extends AbstractFunctionPtg{
 
     public Object clone() {
       FuncPtg ptg = new FuncPtg();
-      ptg.field_1_num_args = field_1_num_args;
+      //ptg.field_1_num_args = field_1_num_args;
       ptg.field_2_fnc_index = field_2_fnc_index;
       return ptg;
     }
+    
+    public int getSize() {
+        return SIZE;
+    }
+    
+    public String toString() {
+        StringBuffer buffer = new StringBuffer();
+        buffer
+        .append("<FunctionPtg>").append("\n")
+        .append("   numArgs(internal)=").append(this.numParams).append("\n")
+        .append("      name         =").append(lookupName(field_2_fnc_index)).append("\n")
+        .append("   field_2_fnc_index=").append(field_2_fnc_index).append("\n")
+        .append("</FunctionPtg>");
+        return buffer.toString();
+    }
 }
\ No newline at end of file
index 0200ffda75c4cdf77f3d9472a43e677a3f71bf02..f333ba694e3cd3d3dc4044d8e879783e59782a4d 100644 (file)
@@ -8,6 +8,7 @@ import org.apache.poi.util.LittleEndian;
 public class FuncVarPtg extends AbstractFunctionPtg{
     
     public final static byte sid  = 0x22;
+    private final static int  SIZE = 4;  
     
     private FuncVarPtg() {
       //Required for clone methods
@@ -53,6 +54,21 @@ public class FuncVarPtg extends AbstractFunctionPtg{
       ptg.field_2_fnc_index = field_2_fnc_index;
       return ptg;
     }
+    
+    public int getSize() {
+        return SIZE;
+    }
+    
+    public String toString() {
+        StringBuffer buffer = new StringBuffer();
+        buffer
+        .append("<FunctionVarPtg>").append("\n")
+        .append("   field_1_num_args=").append(field_1_num_args).append("\n")
+        .append("      name         =").append(lookupName(field_2_fnc_index)).append("\n")
+        .append("   field_2_fnc_index=").append(field_2_fnc_index).append("\n")
+        .append("</FunctionPtg>");
+        return buffer.toString();
+    }
 
     
 }