Package org.apache.poi.ss.formula.ptg
Class Ptg
- java.lang.Object
-
- org.apache.poi.ss.formula.ptg.Ptg
-
- All Implemented Interfaces:
org.apache.poi.common.Duplicatable
,GenericRecord
- Direct Known Subclasses:
ArrayPtg
,ControlPtg
,OperandPtg
,OperationPtg
,ScalarConstantPtg
,UnknownPtg
public abstract class Ptg extends java.lang.Object implements org.apache.poi.common.Duplicatable, GenericRecord
Ptg
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).Ptg
s are logically arranged in a tree representing the structure of the parsed formula. However, in BIFF filesPtg
s are written/read in Reverse-Polish Notation order. The RPN ordering also simplifies formula evaluation logic, so POI mostly accessesPtg
s in the same way.
-
-
Field Summary
Fields Modifier and Type Field Description static byte
CLASS_ARRAY
static byte
CLASS_REF
static byte
CLASS_VALUE
static Ptg[]
EMPTY_PTG_ARRAY
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract Ptg
copy()
static Ptg
createPtg(LittleEndianInput in)
static boolean
doesFormulaReferToDeletedCell(Ptg[] ptgs)
abstract byte
getDefaultOperandClass()
static int
getEncodedSize(Ptg[] ptgs)
This method will return the same result asgetEncodedSizeWithoutArrayData(Ptg[])
if there are no array tokens present.static int
getEncodedSizeWithoutArrayData(Ptg[] ptgs)
Used to calculate value that should be encoded at the start of the encoded Ptg token array;byte
getPtgClass()
char
getRVAType()
Debug / diagnostic method to get this token's 'operand class' type.abstract byte
getSid()
abstract int
getSize()
abstract boolean
isBaseToken()
static Ptg[]
readTokens(int size, LittleEndianInput in)
Readssize
bytes of the input stream, to create an array ofPtg
s.static int
serializePtgs(Ptg[] ptgs, byte[] array, int offset)
Writes the ptgs to the data buffer, starting at the specified offset.void
setClass(byte thePtgClass)
abstract java.lang.String
toFormulaString()
return a string representation of this token alonejava.lang.String
toString()
abstract void
write(LittleEndianOutput out)
-
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.poi.common.usermodel.GenericRecord
getGenericChildren, getGenericProperties, getGenericRecordType
-
-
-
-
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)
Readssize
bytes of the input stream, to create an array ofPtg
s. Extra data (beyondsize
) may be read if andArrayPtg
s 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
Ptg
s
-
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 final java.lang.String toString()
- Overrides:
toString
in 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:
false
if this token is classified as 'reference', 'value', or 'array'
-
doesFormulaReferToDeletedCell
public static boolean doesFormulaReferToDeletedCell(Ptg[] ptgs)
-
copy
public abstract Ptg copy()
- Specified by:
copy
in interfaceorg.apache.poi.common.Duplicatable
-
getSid
public abstract byte getSid()
- Returns:
- structure id of the parsed thing, or
-1
if the record has no sid
-
-