Package org.apache.poi.ss.formula.ptg
Class Ptg
- java.lang.Object
-
- org.apache.poi.ss.formula.ptg.Ptg
-
- Direct Known Subclasses:
ArrayPtg,ControlPtg,OperandPtg,OperationPtg,ScalarConstantPtg,UnknownPtg
public abstract class Ptg extends java.lang.ObjectPtg represents a syntactic token in a formula. 'PTG' is an acronym for 'parse thing'. Originally, the name referred to the single byte identifier at the start of the token, but in POI, Ptg encapsulates the whole formula token (initial byte + value data).Ptgs are logically arranged in a tree representing the structure of the parsed formula. However, in BIFF files Ptgs are written/read in Reverse-Polish Notation order. The RPN ordering also simplifies formula evaluation logic, so POI mostly accesses Ptgs in the same way.
-
-
Field Summary
Fields Modifier and Type Field Description static byteCLASS_ARRAYstatic byteCLASS_REFstatic byteCLASS_VALUEstatic Ptg[]EMPTY_PTG_ARRAY
-
Constructor Summary
Constructors Constructor Description Ptg()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static PtgcreatePtg(LittleEndianInput in)static booleandoesFormulaReferToDeletedCell(Ptg[] ptgs)abstract bytegetDefaultOperandClass()static intgetEncodedSize(Ptg[] ptgs)This method will return the same result asgetEncodedSizeWithoutArrayData(Ptg[])if there are no array tokens present.static intgetEncodedSizeWithoutArrayData(Ptg[] ptgs)Used to calculate value that should be encoded at the start of the encoded Ptg token array;bytegetPtgClass()chargetRVAType()Debug / diagnostic method to get this token's 'operand class' type.abstract intgetSize()abstract booleanisBaseToken()static Ptg[]readTokens(int size, LittleEndianInput in)Reads size bytes of the input stream, to create an array of Ptgs.static intserializePtgs(Ptg[] ptgs, byte[] array, int offset)Writes the ptgs to the data buffer, starting at the specified offset.voidsetClass(byte thePtgClass)abstract java.lang.StringtoFormulaString()return a string representation of this token alonejava.lang.StringtoString()Overridden toString method to ensure object hash is not printed.abstract voidwrite(LittleEndianOutput out)
-
-
-
Field Detail
-
EMPTY_PTG_ARRAY
public static final Ptg[] EMPTY_PTG_ARRAY
-
CLASS_REF
public static final byte CLASS_REF
- See Also:
- Constant Field Values
-
CLASS_VALUE
public static final byte CLASS_VALUE
- See Also:
- Constant Field Values
-
CLASS_ARRAY
public static final byte CLASS_ARRAY
- See Also:
- Constant Field Values
-
-
Method Detail
-
readTokens
public static Ptg[] readTokens(int size, LittleEndianInput in)
Reads size bytes of the input stream, to create an array of Ptgs. Extra data (beyond size) may be read if and ArrayPtgs are present.
-
createPtg
public static Ptg createPtg(LittleEndianInput in)
-
getEncodedSize
public static int getEncodedSize(Ptg[] ptgs)
This method will return the same result asgetEncodedSizeWithoutArrayData(Ptg[])if there are no array tokens present.- Returns:
- the full size taken to encode the specified Ptgs
-
getEncodedSizeWithoutArrayData
public static int getEncodedSizeWithoutArrayData(Ptg[] ptgs)
Used to calculate value that should be encoded at the start of the encoded Ptg token array;- Returns:
- the size of the encoded Ptg tokens not including any trailing array data.
-
serializePtgs
public static int serializePtgs(Ptg[] ptgs, byte[] array, int offset)
Writes the ptgs to the data buffer, starting at the specified offset.
The 2 byte encode length field is not written by this method.- Returns:
- number of bytes written
-
getSize
public abstract int getSize()
- Returns:
- the encoded length of this Ptg, including the initial Ptg type identifier byte.
-
write
public abstract void write(LittleEndianOutput out)
-
toFormulaString
public abstract java.lang.String toFormulaString()
return a string representation of this token alone
-
toString
public java.lang.String toString()
Overridden toString method to ensure object hash is not printed. This helps get rid of gratuitous diffs when comparing two dumps Subclasses may output more relevant information by overriding this method- Overrides:
toStringin classjava.lang.Object
-
setClass
public final void setClass(byte thePtgClass)
-
getPtgClass
public final byte getPtgClass()
- Returns:
- the 'operand class' (REF/VALUE/ARRAY) for this Ptg
-
getRVAType
public final char getRVAType()
Debug / diagnostic method to get this token's 'operand class' type.- Returns:
- 'R' for 'reference', 'V' for 'value', 'A' for 'array' and '.' for base tokens
-
getDefaultOperandClass
public abstract byte getDefaultOperandClass()
-
isBaseToken
public abstract boolean isBaseToken()
- Returns:
falseif this token is classified as 'reference', 'value', or 'array'
-
doesFormulaReferToDeletedCell
public static boolean doesFormulaReferToDeletedCell(Ptg[] ptgs)
-
-